' SPDX-License-Identifier: AGPL-3.0-or-later ' SPDX-FileCopyrightText: 2023 swt23w23 @startuml skinparam linetype ortho skinparam groupInheritance 2 package javax.money { class MonetaryAmount class Money class EURO } package Spring { class CrudRepository class Streamable class Errors class Model } package catering.order { class OrderManagement class CustomOrder } package catering.staff { class Employee { - name: String - id: Long + Employee() + Employee(name: String, job: JobType, wage: MonetaryAmount) + getId(): Long + getName(): String + getJob(): JobType + getWage(): Double + setName(name: String): void + setJob(job: JobType): void + setWage(wage: Double): void } Employee --> JobType : -job Employee --> MonetaryAmount : -wage enum JobType { COOK SERVICE } class StaffController { + StaffController(staffRepository: StaffRepository) + getStaff(model: Model, month:Optional): String + getStaff(model: Model, form: StaffForm, month:Optional): String + removeEmployee(employee: Employee, model: Model): String + addEmployee(form:StaffForm, result:Errors, model: Model): String + editEmployee(employee: Employee, model Model): String + editEmployee(model Model, form:StaffForm): String + updateEmployee(employee: Employee, form:StaffForm): String } StaffController --> StaffManagement : -staffManagement StaffController ..> Employee StaffController ..> StaffForm StaffController ..> Model StaffController ..> Errors StaffController ..> Money StaffController ..> EURO class StaffManagement { + StaffManagement(staffRepository: StaffRepository, orderManagement:OrderManagement) + findById(id: Long): Optional + save(employee: Employee): Employee + findAll(): Streamable + delete(id: Long): void + getAvailableStaffByJob(job: JobType, start:LocalDateTime, finish:LocalDateTime): Set + getWorkingHourseByemployee(e: Employee,month: YearMonth): double } StaffManagement --> StaffRepository : -staffRepository StaffManagement --> OrderManagement : -orderManagement StaffManagement ..> Set interface StaffRepository { + findAll(): Streamable } StaffRepository --|> CrudRepository : <> StaffRepository ..|> Streamable StaffRepository o-- Employee class StaffForm { - name: String + StaffForm(): void + getName(): String + getJob(): JobType + getWage(): Double + setName(name:String): void + setJob(job:JobType): void + setWage( wage:Double): void + validate(e:Errors): void } StaffForm ..> JobType : -job } @enduml