# mist1qu3x/carwash_development architecture

> Architecture diagram of the GitHub repository mist1qu3x/carwash_development, 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/mist1qu3x/carwash_development
- Repository: https://github.com/mist1qu3x/carwash_development

## Overview

Автомойка — консольное приложение для ведения клиентов и записей, работающее с PostgreSQL через JDBC. Основной путь: пользователь взаимодействует с меню и вводом, UI вызывает сервисы для проверок и бизнес-правил, а репозитории читают и изменяют данные. Сервисы также поддерживают поиск, фильтрацию, сортировку и статистику; UI предлагает экспорт записей в CSV и Excel, а также инициализацию БД. Связи основаны на показанном коде и README; не показанные реализации подсистем не раскрываю сверх подтверждённых связей.

Main entry points: [`src/main/java/carwash/ui/ConsoleApp.java`](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/ui/ConsoleApp.java) (Консольное меню), [`src/main/java/carwash/service/BookingService.java`](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/BookingService.java) (Записи и правила), [`src/main/java/carwash/repository/ClientRepository.java`](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/ClientRepository.java) (Репозиторий клиентов), [`src/main/java/carwash/util/DatabaseManager.java`](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/DatabaseManager.java) (JDBC-подключение)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Консольный интерфейс"]
  node_main["Точка входа<br/>[Main.java]"]
  node_console["Консольное меню<br/>[ConsoleApp.java]"]
  node_reader["Ввод данных<br/>[ConsoleReader.java]"]
end

subgraph group_domain["Доменная логика"]
  node_client_service["Клиенты<br/>[ClientService.java]"]
  node_booking_service["Записи и правила"]
  node_statistics["Статистика<br/>[Statistics.java]"]
  node_client_model["Клиент<br/>[Client.java]"]
  node_booking_model["Запись<br/>[Booking.java]"]
  node_booking_status["Статусы записей<br/>[BookingStatus.java]"]
  node_service_type["Типы услуг<br/>[ServiceType.java]"]
  node_exceptions["Доменные ошибки"]
end

subgraph group_persistence["Доступ к данным"]
  node_client_repo["Репозиторий клиентов"]
  node_booking_repo["Репозиторий записей"]
  node_repository_contract["Контракт репозитория<br/>[Repository.java]"]
  node_db_manager["JDBC-подключение"]
  node_postgres[("PostgreSQL")]
  node_schema["Схема таблиц<br/>[schema.sql]"]
end

subgraph group_export["Экспорт и настройка"]
  node_initializer["Инициализация БД"]
  node_exporter["Контракт экспорта<br/>[Exporter.java]"]
  node_csv["Экспорт CSV<br/>[CsvExporter.java]"]
  node_excel["Экспорт Excel<br/>[ExcelExporter.java]"]
end

node_user(("Пользователь"))

node_user -->|"выбирает действия"| node_console
node_main -->|"запускает"| node_console
node_console -->|"считывает ввод"| node_reader
node_console -->|"вызывает"| node_client_service
node_console -->|"вызывает"| node_booking_service
node_console -->|"запускает"| node_initializer
node_console -->|"выбирает формат"| node_exporter
node_console -->|"создаёт экспортёр"| node_csv
node_console -->|"создаёт экспортёр"| node_excel
node_client_service -->|"проверяет и сохраняет"| node_client_repo
node_booking_service -->|"читает и изменяет"| node_booking_repo
node_booking_service -->|"проверяет клиентов"| node_client_repo
node_booking_service -->|"собирает итоги"| node_statistics
node_booking_model -->|"использует"| node_booking_status
node_booking_model -->|"использует"| node_service_type
node_client_repo -->|"открывает соединение"| node_db_manager
node_booking_repo -->|"открывает соединение"| node_db_manager
node_db_manager -->|"подключается к"| node_postgres
node_client_repo -->|"читает и пишет"| node_postgres
node_booking_repo -->|"читает и пишет"| node_postgres
node_initializer -->|"получает соединение"| node_db_manager
node_schema -->|"описывает таблицы"| node_postgres
node_csv -->|"реализует"| node_exporter
node_excel -->|"реализует"| node_exporter

click node_main "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/Main.java"
click node_console "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/ui/ConsoleApp.java"
click node_reader "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/ui/ConsoleReader.java"
click node_client_service "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/ClientService.java"
click node_booking_service "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/BookingService.java"
click node_statistics "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/Statistics.java"
click node_client_model "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/Client.java"
click node_booking_model "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/Booking.java"
click node_booking_status "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/BookingStatus.java"
click node_service_type "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/ServiceType.java"
click node_exceptions "https://github.com/mist1qu3x/carwash_development/tree/main/src/main/java/carwash/exception"
click node_client_repo "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/ClientRepository.java"
click node_booking_repo "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/BookingRepository.java"
click node_repository_contract "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/Repository.java"
click node_db_manager "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/DatabaseManager.java"
click node_schema "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/resources/schema.sql"
click node_initializer "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/DatabaseInitializer.java"
click node_exporter "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/Exporter.java"
click node_csv "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/CsvExporter.java"
click node_excel "https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/ExcelExporter.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,node_console,node_reader toneBlue
class node_client_service,node_booking_service,node_statistics,node_client_model,node_booking_model,node_booking_status,node_service_type,node_exceptions toneAmber
class node_client_repo,node_booking_repo,node_repository_contract,node_db_manager,node_postgres,node_schema toneMint
class node_initializer,node_exporter,node_csv,node_excel toneRose
class node_user toneIndigo
```

## Components

### Консольный интерфейс

- [Точка входа](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/Main.java): `src/main/java/carwash/Main.java`
- [Консольное меню](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/ui/ConsoleApp.java): `src/main/java/carwash/ui/ConsoleApp.java`
- [Ввод данных](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/ui/ConsoleReader.java): `src/main/java/carwash/ui/ConsoleReader.java`

### Доменная логика

- [Клиенты](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/ClientService.java): `src/main/java/carwash/service/ClientService.java`
- [Записи и правила](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/BookingService.java): `src/main/java/carwash/service/BookingService.java`
- [Статистика](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/service/Statistics.java): `src/main/java/carwash/service/Statistics.java`
- [Клиент](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/Client.java): `src/main/java/carwash/model/Client.java`
- [Запись](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/Booking.java): `src/main/java/carwash/model/Booking.java`
- [Статусы записей](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/BookingStatus.java): `src/main/java/carwash/model/BookingStatus.java`
- [Типы услуг](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/model/ServiceType.java): `src/main/java/carwash/model/ServiceType.java`
- [Доменные ошибки](https://github.com/mist1qu3x/carwash_development/tree/main/src/main/java/carwash/exception): `src/main/java/carwash/exception`

### Доступ к данным

- [Репозиторий клиентов](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/ClientRepository.java): `src/main/java/carwash/repository/ClientRepository.java`
- [Репозиторий записей](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/BookingRepository.java): `src/main/java/carwash/repository/BookingRepository.java`
- [Контракт репозитория](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/repository/Repository.java): `src/main/java/carwash/repository/Repository.java`
- [JDBC-подключение](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/DatabaseManager.java): `src/main/java/carwash/util/DatabaseManager.java`
- **PostgreSQL**
- [Схема таблиц](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/resources/schema.sql): `src/main/resources/schema.sql`

### Экспорт и настройка

- [Инициализация БД](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/DatabaseInitializer.java): `src/main/java/carwash/util/DatabaseInitializer.java`
- [Контракт экспорта](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/Exporter.java): `src/main/java/carwash/util/Exporter.java`
- [Экспорт CSV](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/CsvExporter.java): `src/main/java/carwash/util/CsvExporter.java`
- [Экспорт Excel](https://github.com/mist1qu3x/carwash_development/blob/main/src/main/java/carwash/util/ExcelExporter.java): `src/main/java/carwash/util/ExcelExporter.java`

### Other components

- **Пользователь**

## Connections

- Пользователь → Консольное меню: выбирает действия (evidence: `README.md`)
- Точка входа → Консольное меню: запускает (evidence: `src/main/java/carwash/Main.java`)
- Консольное меню → Ввод данных: считывает ввод (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Клиенты: вызывает (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Записи и правила: вызывает (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Инициализация БД: запускает (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Контракт экспорта: выбирает формат (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Экспорт CSV: создаёт экспортёр (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Консольное меню → Экспорт Excel: создаёт экспортёр (evidence: `src/main/java/carwash/ui/ConsoleApp.java`)
- Клиенты → Репозиторий клиентов: проверяет и сохраняет (evidence: `src/main/java/carwash/service/ClientService.java`)
- Записи и правила → Репозиторий записей: читает и изменяет (evidence: `src/main/java/carwash/service/BookingService.java`)
- Записи и правила → Репозиторий клиентов: проверяет клиентов (evidence: `src/main/java/carwash/service/BookingService.java`)
- Записи и правила → Статистика: собирает итоги (evidence: `src/main/java/carwash/service/BookingService.java`)
- Запись → Статусы записей: использует (evidence: `src/main/java/carwash/model/Booking.java`)
- Запись → Типы услуг: использует (evidence: `src/main/java/carwash/model/Booking.java`)
- Репозиторий клиентов → JDBC-подключение: открывает соединение (evidence: `src/main/java/carwash/repository/ClientRepository.java`)
- Репозиторий записей → JDBC-подключение: открывает соединение (evidence: `src/main/java/carwash/repository/BookingRepository.java`)
- JDBC-подключение → PostgreSQL: подключается к (evidence: `src/main/java/carwash/util/DatabaseManager.java`)
- Репозиторий клиентов → PostgreSQL: читает и пишет (evidence: `src/main/java/carwash/repository/ClientRepository.java`)
- Репозиторий записей → PostgreSQL: читает и пишет (evidence: `src/main/java/carwash/repository/BookingRepository.java`)
- Инициализация БД → JDBC-подключение: получает соединение (evidence: `src/main/java/carwash/util/DatabaseInitializer.java`)
- Схема таблиц → PostgreSQL: описывает таблицы (evidence: `README.md`)
- Экспорт CSV → Контракт экспорта: реализует (evidence: `src/main/java/carwash/util/CsvExporter.java`)
- Экспорт Excel → Контракт экспорта: реализует (evidence: `src/main/java/carwash/util/ExcelExporter.java`)
