# Getting Started

Welcome to the team! This guide will help you orient yourself quickly and know where to look next.

---

## What This Project Does

This repository contains a small Java project built around three core data classes: `Mixed`, `PatternA`, and `PatternB`. These classes model distinct data patterns used within a larger system — possibly a service layer, workflow engine, or integration pipeline. While the classes themselves are minimal, they are designed to plug into a broader application as data carriers and routing structures.

---

## Recommended Reading Order

Follow this sequence to build context efficiently:

1. **[Repository Overview](.codewiki/overview.md)** — Start here. You're already on this page; the overview gives you a broader context.
2. **[Mixed.java](src/main/java/Mixed.java)** — The simplest class. Two string fields, no dependencies. It gives you a feel for the coding style and naming conventions.
3. **[PatternA.java](src/main/java/PatternA.java)** — Introduces the concept of processing-area classification and shows how the codebase handles versioned additions (see the `ANK-0001` change markers).
4. **[PatternB.java](src/main/java/PatternB.java)** — The most structured of the three. Demonstrates how service-level identifiers and codes are modeled for request routing.

---

## Key Entry Points

This project has no standalone application entry point (no `main()` method). The three classes below are the building blocks you will encounter first:

| Class | Location | Role |
|---|---|---|
| [Mixed](src/main/java/Mixed.java) | `src/main/java/Mixed.java` | Holds unstructured or loosely labeled text content (`englishOnly`, `unlabeled`). |
| [PatternA](src/main/java/PatternA.java) | `src/main/java/PatternA.java` | Represents a processing-area concept (`syoriDiv`), used to categorize or route work items. |
| [PatternB](src/main/java/PatternB.java) | `src/main/java/PatternB.java` | Carries service interface identifiers (`templateID`) and identification codes (`identifyCD`) for request dispatch. |

These classes are used as input/output structures by other parts of the system. Look for consuming modules or a main application entry point in the broader project to understand how they are wired together.

---

## Project Structure

The source code is flat and easy to navigate:

```
src/
  main/
    java/
      Mixed.java
      PatternA.java
      PatternB.java
```

There are no sub-packages, no test directories, and no build files (e.g., `pom.xml` or `build.gradle`) in this repository. This suggests the project lives as a module within a larger monorepo or parent project.

High-level structure:

```mermaid
flowchart TD
    Root["src"] --> main["src/main"]
    main --> java["src/main/java"]
    java --> Mixed["Mixed"]
    java --> PatternA["PatternA"]
    java --> PatternB["PatternB"]
```

---

## Configuration

There are no configuration files (such as `application.yml`, `logback.xml`, or build scripts) in this repository. Configuration for the broader project that consumes these classes likely lives in a parent module. When you join the project, check with your team lead for:

- The build system used by the parent project (`pom.xml`, `build.gradle`, or Maven/Gradle wrapper).
- Any external configuration files in the broader codebase that wire these classes into services.
- Test files (typically under `src/test/java`) that show usage examples.

---

## Common Patterns

### Data Class Convention

All three classes follow a simple, consistent pattern:

- Plain `public class` declarations with no constructors, no methods, and no `Serializable` implementation.
- Fields are declared with default values of empty strings (`""`).
- Field names use camelCase with descriptive abbreviations.

```java
public class PatternA {
    private String syoriDiv = "";  // Processing area division
}
```

### Field Naming Conventions

The codebase uses abbreviated field names, some of which include Japanese annotations:

| Pattern | Field | Meaning |
|---|---|---|
| Mixed | `englishOnly` | English-only text content |
| Mixed | `unlabeled` | Free-form or mixed-language data |
| PatternA | `syoriDiv` | 処理区分 — Processing area division |
| PatternB | `templateID` | サービスIF_ID — Service interface ID |
| PatternB | `identifyCD` | 識別コード — Identification code |

### Versioned Change Markers

When new fields are added to existing classes, the codebase uses version markers to track changes:

```java
// ANK-0001 ADD START
private String syoriDiv = "";  // Processing area division
// ANK-0001 ADD END
```

This pattern (e.g., `ANK-0001`) makes it easy to identify when and why fields were added, which is helpful for code review and debugging.

---

## Next Steps

- **Find the parent project** — These classes are building blocks. Locate the modules that import and instantiate them to understand the full picture.
- **Check for tests** — Test files are the best source of usage examples. Look under `src/test/java` in the broader project.
- **Ask your team** — Since this is a module within a larger system, your team can point you to the relevant service layers and integration pipelines.

Happy coding!
