# gelenski/barbertrack-poo architecture

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

- Interactive diagram: https://gitdiagram.com/gelenski/barbertrack-poo
- Repository: https://github.com/gelenski/barbertrack-poo

## Overview

BarberTrack is a JavaFX desktop app for managing a barbershop’s services, clients, appointments, shop details, barbers, specialties, and opening hours. Users start at a management menu, open a dedicated screen, edit records, and persist them to local serialized files. Service management also supports service categories through dialogs. The graph reflects the shown menu routing and source-index references; unsampled screens are included as documented by the index, but their internal behavior is not inferred.

Main entry points: [`src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/app/Main.java) (Management menu), [`src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java) (Services), [`src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.java`](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.java) (File repository), [`src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java) (Appointments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application entry"]
  node_main["Management menu<br/>[Main.java]"]
end

subgraph group_screens["Management screens"]
  node_services["Services<br/>[ServicoView.java]"]
  node_clients["Clients<br/>[ClienteView.java]"]
  node_appointments["Appointments"]
  node_shop["Barbershop<br/>[BarbeariaView.java]"]
  node_barbers["Barbers<br/>[BarbeiroView.java]"]
  node_specialties["Specialties"]
  node_hours["Opening hours"]
end

subgraph group_category["Category dialogs"]
  node_category_create["Create category"]
  node_category_edit["Edit category"]
  node_category_details["Category details"]
end

subgraph group_data["Domain and persistence"]
  node_appointment_model["Appointment record<br/>[Agendamento.java]"]
  node_shop_model["Barbershop record<br/>[Barbearia.java]"]
  node_barber_model["Barber record<br/>[Barbeiro.java]"]
  node_category_model["Service category"]
  node_client_model["Client record<br/>[Cliente.java]"]
  node_specialty_model["Specialty record<br/>[Especialidade.java]"]
  node_hours_model["Hours record"]
  node_service_model["Service record<br/>[Servico.java]"]
  node_repository["File repository"]
end

node_user(("Operator"))
node_serialized_files[("Serialized local files")]

node_user -->|"opens"| node_main
node_main -->|"opens screen"| node_services
node_main -->|"opens screen"| node_clients
node_main -->|"opens screen"| node_appointments
node_main -->|"opens screen"| node_shop
node_main -->|"opens screen"| node_barbers
node_main -->|"opens screen"| node_specialties
node_main -->|"opens screen"| node_hours
node_services -->|"opens dialog"| node_category_create
node_services -->|"opens dialog"| node_category_edit
node_services -->|"opens dialog"| node_category_details
node_services -->|"manages"| node_service_model
node_services -->|"manages"| node_category_model
node_services -->|"loads and saves"| node_repository
node_clients -->|"manages"| node_client_model
node_clients -->|"loads and saves"| node_repository
node_appointments -->|"manages"| node_appointment_model
node_appointments -->|"selects client"| node_client_model
node_appointments -->|"selects service"| node_service_model
node_appointments -->|"loads and saves"| node_repository
node_shop -->|"manages"| node_shop_model
node_shop -->|"loads and saves"| node_repository
node_barbers -->|"manages"| node_barber_model
node_barbers -->|"loads and saves"| node_repository
node_specialties -->|"manages"| node_specialty_model
node_specialties -->|"loads and saves"| node_repository
node_hours -->|"manages"| node_hours_model
node_hours -->|"loads and saves"| node_repository
node_category_create -->|"creates"| node_category_model
node_category_edit -->|"edits"| node_category_model
node_category_details -->|"displays"| node_category_model
node_appointment_model -->|"references"| node_client_model
node_appointment_model -->|"references"| node_service_model
node_service_model -->|"categorizes"| node_category_model
node_repository -->|"reads and writes"| node_serialized_files

click node_main "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/app/Main.java"
click node_services "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java"
click node_clients "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/ClienteView.java"
click node_appointments "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java"
click node_shop "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/BarbeariaView.java"
click node_barbers "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/BarbeiroView.java"
click node_specialties "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/EspecialidadeView.java"
click node_hours "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/HorarioFuncionamentoView.java"
click node_category_create "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaModal.java"
click node_category_edit "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaEditarModal.java"
click node_category_details "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaDetalhesModal.java"
click node_appointment_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Agendamento.java"
click node_shop_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Barbearia.java"
click node_barber_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Barbeiro.java"
click node_category_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/CategoriaServico.java"
click node_client_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Cliente.java"
click node_specialty_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Especialidade.java"
click node_hours_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/HorarioFuncionamento.java"
click node_service_model "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Servico.java"
click node_repository "https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.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_main toneBlue
class node_services,node_clients,node_appointments,node_shop,node_barbers,node_specialties,node_hours,node_serialized_files toneAmber
class node_category_create,node_category_edit,node_category_details toneMint
class node_appointment_model,node_shop_model,node_barber_model,node_category_model,node_client_model,node_specialty_model,node_hours_model,node_service_model,node_repository toneRose
class node_user toneIndigo
```

## Components

### Application entry

- [Management menu](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/app/Main.java): `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`

### Management screens

- [Services](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`
- [Clients](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/ClienteView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/ClienteView.java`
- [Appointments](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`
- [Barbershop](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/BarbeariaView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeariaView.java`
- [Barbers](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/BarbeiroView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeiroView.java`
- [Specialties](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/EspecialidadeView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/EspecialidadeView.java`
- [Opening hours](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/HorarioFuncionamentoView.java): `src/main/java/org/barbertrack/barbertrack_poo/views/HorarioFuncionamentoView.java`

### Category dialogs

- [Create category](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaModal.java): `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaModal.java`
- [Edit category](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaEditarModal.java): `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaEditarModal.java`
- [Category details](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaDetalhesModal.java): `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaDetalhesModal.java`

### Domain and persistence

- [Appointment record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Agendamento.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Agendamento.java`
- [Barbershop record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Barbearia.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Barbearia.java`
- [Barber record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Barbeiro.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Barbeiro.java`
- [Service category](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/CategoriaServico.java): `src/main/java/org/barbertrack/barbertrack_poo/model/CategoriaServico.java`
- [Client record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Cliente.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Cliente.java`
- [Specialty record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Especialidade.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Especialidade.java`
- [Hours record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/HorarioFuncionamento.java): `src/main/java/org/barbertrack/barbertrack_poo/model/HorarioFuncionamento.java`
- [Service record](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/model/Servico.java): `src/main/java/org/barbertrack/barbertrack_poo/model/Servico.java`
- [File repository](https://github.com/gelenski/barbertrack-poo/blob/main/src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.java): `src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.java`

### Other components

- **Operator**
- **Serialized local files**

## Connections

- Operator → Management menu: opens (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Services: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Clients: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Appointments: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Barbershop: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Barbers: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Specialties: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Management menu → Opening hours: opens screen (evidence: `src/main/java/org/barbertrack/barbertrack_poo/app/Main.java`)
- Services → Create category: opens dialog (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Services → Edit category: opens dialog (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Services → Category details: opens dialog (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Services → Service record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Services → Service category: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Services → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ServicoView.java`)
- Clients → Client record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ClienteView.java`)
- Clients → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/ClienteView.java`)
- Appointments → Appointment record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`)
- Appointments → Client record: selects client (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`)
- Appointments → Service record: selects service (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`)
- Appointments → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/AgendamentoView.java`)
- Barbershop → Barbershop record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeariaView.java`)
- Barbershop → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeariaView.java`)
- Barbers → Barber record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeiroView.java`)
- Barbers → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/BarbeiroView.java`)
- Specialties → Specialty record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/EspecialidadeView.java`)
- Specialties → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/EspecialidadeView.java`)
- Opening hours → Hours record: manages (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/HorarioFuncionamentoView.java`)
- Opening hours → File repository: loads and saves (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/HorarioFuncionamentoView.java`)
- Create category → Service category: creates (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaModal.java`)
- Edit category → Service category: edits (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaEditarModal.java`)
- Category details → Service category: displays (evidence: `src/main/java/org/barbertrack/barbertrack_poo/views/CategoriaDetalhesModal.java`)
- Appointment record → Client record: references (evidence: `src/main/java/org/barbertrack/barbertrack_poo/model/Agendamento.java`)
- Appointment record → Service record: references (evidence: `src/main/java/org/barbertrack/barbertrack_poo/model/Agendamento.java`)
- Service record → Service category: categorizes (evidence: `src/main/java/org/barbertrack/barbertrack_poo/model/Servico.java`)
- File repository → Serialized local files: reads and writes (evidence: `src/main/java/org/barbertrack/barbertrack_poo/repository/RepositoryManager.java`)
