@startuml skinparam linetype ortho skinparam groupInheritance 2 package Spring { class CrudRepository class Streamable class Errors class Model } package catering.staff { class Employee { - name: String - id: Long + Employee() + Employee(name: String, job: JobType) + getId(): Long + getName(): String + getJob(): JobType + setName(name: String): void + setJob(job: JobType): void } Employee --> JobType : -job enum JobType { COOK SERVICE } class StaffController { + StaffController(staffRepository: StaffRepository) + getStaff(model: Model): String + getStaff(model: Model, form: StaffForm): 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 class StaffManagement { + StaffManagement(staffRepository: StaffRepository) + findById(id: Long): Optional + save(employee: Employee): Employee + findAll(): Streamable + delete(id: Long): void } StaffManagement --> StaffRepository : -staffRepository interface StaffRepository { + findAll(): Streamable } StaffRepository --|> CrudRepository : <> StaffRepository ..|> Streamable StaffRepository o-- Employee class StaffForm { - name: String + StaffForm(): void + getName(): String + getJob(): JobType + setName(name:String): void + setJob(job:JobType): void + validate(e:Errors): void } StaffForm ..> JobType : -job } @enduml