diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c507849 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +target +.idea diff --git a/UML.md b/UML.md new file mode 100644 index 0000000..948dbc9 --- /dev/null +++ b/UML.md @@ -0,0 +1,210 @@ +# UML Class Diagram + +```mermaid +classDiagram + class App { + +main(String[] args) + } + + class ConsoleUi { + -WorkshopService service + -Scanner scanner + +ConsoleUi(WorkshopService service) + +start() + -printMenu() + -addPerson() + -listPersons() + -addVehicle() + -listVehiclesOfPerson() + -createWorkOrder() + -listWorkOrders() + -importPersons() + -exportPersons() + } + + class WorkshopService { + -PersonDao personDao + -VehicleDao vehicleDao + -ServiceItemDao serviceItemDao + -WorkOrderDao workOrderDao + +WorkshopService() + +createPerson(String name, String phone) Person + +listPersons() List~Person~ + +createVehicle(int personId, String brand, String model, String plate) Vehicle + +listVehicles(int personId) List~Vehicle~ + +listServiceItems() List~ServiceItem~ + +createWorkOrder(int vehicleId, String note, Map~Integer, Integer~ items) int + +listWorkOrders() List~WorkOrderDetails~ + +findPerson(int id) Person + +findVehicle(int id) Vehicle + } + + class Database { + +getConnection() Connection$ + } + + class Person { + -int id + -String name + -String phone + +Person(int id, String name, String phone) + +getId() int + +getName() String + +getPhone() String + +toString() String + } + + class Vehicle { + -int id + -int personId + -String brand + -String model + -String plate + +Vehicle(int id, int personId, String brand, String model, String plate) + +getId() int + +getPersonId() int + +getBrand() String + +getModel() String + +getPlate() String + +toString() String + } + + class ServiceItem { + -int id + -String title + -BigDecimal price + +ServiceItem(int id, String title, BigDecimal price) + +getId() int + +getTitle() String + +getPrice() BigDecimal + +toString() String + } + + class WorkOrder { + -int id + -int vehicleId + -String note + -LocalDateTime createdAt + +WorkOrder(int id, int vehicleId, String note, LocalDateTime createdAt) + +getId() int + +getVehicleId() int + +getNote() String + +getCreatedAt() LocalDateTime + } + + class WorkOrderItem { + -int id + -int workOrderId + -ServiceItem serviceItem + -int quantity + +WorkOrderItem(int id, int workOrderId, ServiceItem serviceItem, int quantity) + +getId() int + +getWorkOrderId() int + +getServiceItem() ServiceItem + +getQuantity() int + +getTotalPrice() BigDecimal + } + + class WorkOrderDetails { + -int orderId + -String personName + -String vehicleText + -LocalDateTime createdAt + -String note + -List~WorkOrderItem~ items + -BigDecimal total + +WorkOrderDetails(int orderId, String personName, String vehicleText, LocalDateTime createdAt, String note, List~WorkOrderItem~ items, BigDecimal total) + +getOrderId() int + +getPersonName() String + +getVehicleText() String + +getCreatedAt() LocalDateTime + +getNote() String + +getItems() List~WorkOrderItem~ + +getTotal() BigDecimal + } + + class PersonDao { + +create(String name, String phone) Person + +findAll() List~Person~ + +findById(int id) Person + } + + class VehicleDao { + +create(int personId, String brand, String model, String plate) Vehicle + +findByPerson(int personId) List~Vehicle~ + +findById(int id) Vehicle + } + + class ServiceItemDao { + +findAll() List~ServiceItem~ + +seedDefaultItems() + } + + class WorkOrderDao { + +createWorkOrder(int vehicleId, String note, Map~Integer, Integer~ items) int + +fetchAllDetails() List~WorkOrderDetails~ + } + + class SchemaCreator { + +ensureSchema() + } + + namespace importers { + class IImporter~T~ { + <> + +importData(String path) List~T~ + } + + class CsvPersonImporter { + +importData(String path) List~Person~ + } + } + + namespace exporters { + class IExporter~T~ { + <> + +exportData(List~T~ data, String path) + } + + class CsvPersonExporter { + +exportData(List~Person~ data, String path) + } + } + + namespace loggers { + class ILogger { + <> + +Log() + } + } + + App ..> ConsoleUi : creates + App ..> WorkshopService : creates + ConsoleUi --> WorkshopService : uses + ConsoleUi ..> CsvPersonImporter : creates + ConsoleUi ..> CsvPersonExporter : creates + + WorkshopService --> PersonDao : uses + WorkshopService --> VehicleDao : uses + WorkshopService --> ServiceItemDao : uses + WorkshopService --> WorkOrderDao : uses + WorkshopService ..> SchemaCreator : uses + + PersonDao ..> Person : uses + VehicleDao ..> Vehicle : uses + ServiceItemDao ..> ServiceItem : uses + WorkOrderDao ..> WorkOrder : uses + WorkOrderDao ..> WorkOrderDetails : creates + WorkOrderDao ..> WorkOrderItem : creates + + WorkOrderDetails *-- WorkOrderItem : contains + WorkOrderItem --> ServiceItem : has + + CsvPersonImporter ..|> IImporter : implements + CsvPersonExporter ..|> IExporter : implements + + PersonDao ..> Database : uses + VehicleDao ..> Database : uses + ServiceItemDao ..> Database : uses + WorkOrderDao ..> Database : uses +```