@startuml
skinparam classAttributeIconSize 0

class User {
  -name: String
  -email: String
  -pwd: String
  -roleId: String
}

class Employee {
  -id: String
  -phone: String
  -address: String
  -citizenCardNumber: String
  
  +Employee(name,email,phone,address,citizenCardNumber,roleId)

  +hasRoleId(roleId)
}

class Company {
  -designation: String
  -authFacade: AuthFacade
  -employeeStore: EmployeeStore
  -employeeRoleStore: EmployeeRoleStore
  
  +Company(designation)

  +getAuthFacade()
  +getEmployeeStore()
  +getEmployeeRoleStore()
}

class AuthFacade {
  +existsRole(String roleId)
  +getUserRoles()
  +getUsersWithRole(String roleId)
}

class EmployeeStore {
  +createEmployee(name,phoneNumber,email,address,citizenCard,roleId)
  +saveEmployee(employee)
  +getEmployeesWithRole(roleId)
}

class ListEmployeeController {
  +getRoles()
  +getEmployeesByRoleId(role)
}

class EmployeeRole {
  -id: String
  -description: String
}

class ListEmployeeUI {}

class EmployeeRolesStore {
  +addEmployeeRole(id,description)
  +getRoles()
  +existsRole(id)
}

ListEmployeeUI ..> ListEmployeeController
ListEmployeeController ..> Company

Company ..> AuthFacade
Company ..> EmployeeStore
Employee "*" -- "1" EmployeeStore : stores <
Company "1" --> "*" Employee : knows >

EmployeeRolesStore "1" -- "*" EmployeeRole : stores >
Company ..> EmployeeRolesStore
Employee "1" -- "*" EmployeeRole : has >

ListEmployeeController ..> EmployeeStore
ListEmployeeController ..> EmployeeRoleStore

User -- Employee : corresponds to <

@enduml
