# mariiakolisnykshi2025-pixel/farmapp architecture

> Architecture diagram of the GitHub repository mariiakolisnykshi2025-pixel/farmapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mariiakolisnykshi2025-pixel/farmapp
- Repository: https://github.com/mariiakolisnykshi2025-pixel/farmapp

## Overview

This is a Spring Boot REST API for managing farm, field, and storage records, transferring workers between records, and calculating net profit. Requests enter through the type-parameterized controller and are dispatched by the Facade to the matching repository or transfer service. JPA repositories persist the domain entities in H2; the entities provide profit and cost behavior. A statistics-printing interface is also present, but the sampled code does not show it wired into the API. The README is empty, and unsampled entity/repository details are inferred only from the tree and sampled code.

Main entry points: [`src/main/java/Service/Facade.java`](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/Facade.java) (Facade), [`src/main/java/Service/TransferService.java`](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/TransferService.java) (Worker transfer), [`src/main/java/Controller/TypeController.java`](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Controller/TypeController.java) (Type controller), [`src/main/java/Repository/FarmRepository.java`](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/FarmRepository.java) (Farm repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["REST API"]
  node_controller["Type controller"]
  node_main["Spring Boot app<br/>[Main.java]"]
end

subgraph group_services["Application Services"]
  node_facade["Facade<br/>[Facade.java]"]
  node_transfer["Worker transfer"]
  node_statistics["Statistics printing"]
end

subgraph group_domain["Farm Domain"]
  node_type["Shared type model<br/>[Type.java]"]
  node_farm["Farm<br/>[Farm.java]"]
  node_field["Field<br/>[Field.java]"]
  node_storage["Storage<br/>[Storage.java]"]
end

subgraph group_persistence["Persistence"]
  node_farmrepo["Farm repository"]
  node_fieldrepo["Field repository"]
  node_storagerepo["Storage repository"]
  node_appconfig["Data source config<br/>[AppConfig.java]"]
  node_database[("H2 database")]
end

node_client(("API client"))

node_client -->|"HTTP requests"| node_controller
node_controller -->|"dispatches"| node_facade
node_facade -->|"CRUD/query"| node_farmrepo
node_facade -->|"CRUD/query"| node_fieldrepo
node_facade -->|"CRUD/query"| node_storagerepo
node_facade -->|"delegates transfer"| node_transfer
node_transfer -->|"loads/saves"| node_farmrepo
node_transfer -->|"loads/saves"| node_fieldrepo
node_transfer -->|"loads/saves"| node_storagerepo
node_farmrepo -->|"persists"| node_database
node_fieldrepo -->|"persists"| node_database
node_storagerepo -->|"persists"| node_database
node_appconfig -->|"configures connection"| node_database
node_farm -->|"extends"| node_type
node_field -->|"extends"| node_type
node_storage -->|"extends"| node_type
node_main -->|"starts app"| node_controller

click node_controller "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Controller/TypeController.java"
click node_facade "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/Facade.java"
click node_transfer "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/TransferService.java"
click node_statistics "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/StatisticsFunctions.java"
click node_type "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Type.java"
click node_farm "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Farm.java"
click node_field "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Field.java"
click node_storage "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Storage.java"
click node_farmrepo "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/FarmRepository.java"
click node_fieldrepo "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/FieldRepository.java"
click node_storagerepo "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/StorageRepository.java"
click node_appconfig "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Config/AppConfig.java"
click node_main "https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Main.java"

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_controller,node_main,node_client toneBlue
class node_facade,node_transfer,node_statistics toneAmber
class node_type,node_farm,node_field,node_storage toneMint
class node_farmrepo,node_fieldrepo,node_storagerepo,node_appconfig,node_database toneRose
```

## Components

### REST API

- [Type controller](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Controller/TypeController.java): `src/main/java/Controller/TypeController.java`
- [Spring Boot app](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Main.java): `src/main/java/Main.java`

### Application Services

- [Facade](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/Facade.java): `src/main/java/Service/Facade.java`
- [Worker transfer](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/TransferService.java): `src/main/java/Service/TransferService.java`
- [Statistics printing](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Service/StatisticsFunctions.java): `src/main/java/Service/StatisticsFunctions.java`

### Farm Domain

- [Shared type model](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Type.java): `src/main/java/Entities/Type.java`
- [Farm](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Farm.java): `src/main/java/Entities/Farm.java`
- [Field](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Field.java): `src/main/java/Entities/Field.java`
- [Storage](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Entities/Storage.java): `src/main/java/Entities/Storage.java`

### Persistence

- [Farm repository](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/FarmRepository.java): `src/main/java/Repository/FarmRepository.java`
- [Field repository](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/FieldRepository.java): `src/main/java/Repository/FieldRepository.java`
- [Storage repository](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Repository/StorageRepository.java): `src/main/java/Repository/StorageRepository.java`
- [Data source config](https://github.com/mariiakolisnykshi2025-pixel/farmapp/blob/main/src/main/java/Config/AppConfig.java): `src/main/java/Config/AppConfig.java`
- **H2 database**

### Other components

- **API client**

## Connections

- API client → Type controller: HTTP requests
- Type controller → Facade: dispatches
- Facade → Farm repository: CRUD/query
- Facade → Field repository: CRUD/query
- Facade → Storage repository: CRUD/query
- Facade → Worker transfer: delegates transfer
- Worker transfer → Farm repository: loads/saves
- Worker transfer → Field repository: loads/saves
- Worker transfer → Storage repository: loads/saves
- Farm repository → H2 database: persists
- Field repository → H2 database: persists
- Storage repository → H2 database: persists
- Data source config → H2 database: configures connection
- Farm → Shared type model: extends
- Field → Shared type model: extends
- Storage → Shared type model: extends
- Spring Boot app → Type controller: starts app
