# wilsoncespedes-dot/ajedrez architecture

> Architecture diagram of the GitHub repository wilsoncespedes-dot/ajedrez, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wilsoncespedes-dot/ajedrez
- Repository: https://github.com/wilsoncespedes-dot/ajedrez

## Overview

#### Purpose and execution

ModeladorAjedrez is a Java/Maven chess-domain model split into logical microservice-ready bounded contexts. It currently runs in one JVM; no HTTP servers, persistence layer, or deployed infrastructure exist. The Maven aggregator is `ModeladorAjedrez/pom.xml`; the console demo entry point is `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Main.java`. A separate browser-only visualizer is `ModeladorAjedrez/interfaz-web/index.html`.

#### Module boundaries

Each Maven module produces its own JAR and exposes a public `XxxService` facade. Dependencies are directional: board → movement rules → game orchestration.

- Board state: `ModeladorAjedrez/tablero-service/pom.xml`
- Movement rules depend on board: `ModeladorAjedrez/movimientos-service/pom.xml`
- Game orchestration depends on both: `ModeladorAjedrez/partida-service/pom.xml`

The intended future deployment seam is an HTTP adapter around each facade, without moving domain logic.

#### Board-state authority

`tablero-service` exclusively owns board contents and mutation. `Tablero` is the mutable implementation, while other modules consume the read-only `EstadoTablero` contract, preventing rules code from changing positions directly.

Core model paths:
- `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java`
- `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/EstadoTablero.java`
- `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java`

`Pieza`, `Posicion`, and `Color` form the shared board-domain representation within this bounded context.

#### Movement-rule engine

`movimientos-service` evaluates legal destination squares from a supplied `EstadoTablero`; it does not execute moves. `CalculadorMovimientos` defines the per-piece rule contract, implemented by piece-specific calculators such as pawn, rook, knight, bishop, queen, and king.

Core paths:
- `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/CalculadorMovimientos.java`
- `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java`
- `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/Reina.java`

This boundary supports rule evaluation against a board snapshot/read interface and keeps mutation centralized.

#### Game orchestration and flow

`partida-service` is the only context that coordinates board and movement services. Its primary flow is: validate/current-turn context → request possible moves from `MovimientosService` against board state → execute an approved move through `TableroService` → determine capture → record `Jugada` → switch turn.

Core paths:
- `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java`
- `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Jugada.java`
- `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Main.java`

It owns business-level state such as turn, move history, and captures; neither lower module should own that orchestration.

#### User interfaces and external boundaries

The console demo drives the Java model in-process. The independent HTML UI reimplements the movement rules in JavaScript and therefore does not call Java modules or any backend:

- `ModeladorAjedrez/interfaz-web/index.html`

There are no current external services, databases, message brokers, containers, or HTTP APIs. A future browser/backend boundary should target `PartidaService` as the business-facing API, while preserving `TableroService` and `MovimientosService` as internal or independently deployable service facades.

Main entry points: [`ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java`](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java) (MovimientosService), [`ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java`](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java) (PartidaService), [`ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java`](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java) (Tablero), [`ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java`](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java) (TableroService)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_board["Board state"]
  node_tablero_service["TableroService<br/>board facade"]
  node_tablero["Tablero<br/>mutable board<br/>[Tablero.java]"]
  node_estado_tablero["EstadoTablero<br/>read contract<br/>[EstadoTablero.java]"]
  node_board_domain["Pieza · Posicion · Color<br/>board domain"]
end

subgraph group_rules["Movement rules"]
  node_movimientos_service["MovimientosService<br/>rules facade"]
  node_calculador["CalculadorMovimientos<br/>rule contract"]
  node_reina["Reina calculator<br/>piece rule<br/>[Reina.java]"]
end

subgraph group_game["Game orchestration"]
  node_partida_service["PartidaService<br/>game facade"]
  node_jugada["Jugada<br/>move record<br/>[Jugada.java]"]
end

subgraph group_ui["User interfaces"]
  node_main["Console demo<br/>JVM entry point<br/>[Main.java]"]
  node_web_ui["Browser visualizer<br/>standalone HTML UI<br/>[index.html]"]
end

node_tablero_service -->|"mutates"| node_tablero
node_tablero -->|"exposes read view"| node_estado_tablero
node_tablero -->|"stores"| node_board_domain
node_movimientos_service -->|"delegates rules"| node_calculador
node_calculador -->|"implemented by"| node_reina
node_movimientos_service -->|"reads board state"| node_estado_tablero
node_movimientos_service -->|"evaluates pieces and positions"| node_board_domain
node_partida_service -->|"requests possible moves"| node_movimientos_service
node_partida_service -->|"executes approved move"| node_tablero_service
node_partida_service -->|"records move and capture"| node_jugada
node_main -->|"drives in-process"| node_partida_service

click node_tablero_service "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java"
click node_tablero "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java"
click node_estado_tablero "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/EstadoTablero.java"
click node_movimientos_service "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java"
click node_calculador "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/CalculadorMovimientos.java"
click node_reina "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/Reina.java"
click node_partida_service "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java"
click node_jugada "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Jugada.java"
click node_main "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Main.java"
click node_web_ui "https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/interfaz-web/index.html"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_tablero_service,node_tablero,node_estado_tablero,node_board_domain toneBlue
class node_movimientos_service,node_calculador,node_reina toneAmber
class node_partida_service,node_jugada toneMint
class node_main,node_web_ui toneRose
```

## Components

### Board state

Exclusive owner of board contents and mutation.

- [TableroService](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java): board facade · Public mutation-facing board service. · `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/TableroService.java`
- [Tablero](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java): mutable board · Authoritative mutable board implementation. · `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/Tablero.java`
- [EstadoTablero](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/EstadoTablero.java): read contract · Read-only board view consumed by rules. · `ModeladorAjedrez/tablero-service/src/main/java/ajedrez/tablero/EstadoTablero.java`
- **Pieza · Posicion · Color**: board domain

### Movement rules

Read-only legal-move evaluation.

- [MovimientosService](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java): rules facade · Returns legal destinations without executing moves. · `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/MovimientosService.java`
- [CalculadorMovimientos](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/CalculadorMovimientos.java): rule contract · Per-piece legal-move calculator contract. · `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/CalculadorMovimientos.java`
- [Reina calculator](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/Reina.java): piece rule · Example piece-specific calculator implementation. · `ModeladorAjedrez/movimientos-service/src/main/java/ajedrez/movimientos/Reina.java`

### Game orchestration

Coordinates turns, moves, captures, and history.

- [PartidaService](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java): game facade · Business-facing coordinator for game flow. · `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/PartidaService.java`
- [Jugada](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Jugada.java): move record · Records approved moves in game history. · `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Jugada.java`

### User interfaces

- [Console demo](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Main.java): JVM entry point · In-process demonstration entry point. · `ModeladorAjedrez/partida-service/src/main/java/ajedrez/partida/Main.java`
- [Browser visualizer](https://github.com/wilsoncespedes-dot/ajedrez/blob/main/ModeladorAjedrez/interfaz-web/index.html): standalone HTML UI · Reimplements movement rules in JavaScript; does not call Java. · `ModeladorAjedrez/interfaz-web/index.html`

## Connections

- TableroService → Tablero: mutates
- Tablero → EstadoTablero: exposes read view
- Tablero → Pieza · Posicion · Color: stores
- MovimientosService → CalculadorMovimientos: delegates rules
- CalculadorMovimientos → Reina calculator: implemented by
- MovimientosService → EstadoTablero: reads board state
- MovimientosService → Pieza · Posicion · Color: evaluates pieces and positions
- PartidaService → MovimientosService: requests possible moves
- PartidaService → TableroService: executes approved move
- PartidaService → Jugada: records move and capture
- Console demo → PartidaService: drives in-process
