@startuml US10_CD
skinparam classAttributeIconSize 0

class RegisterEmployeeUI {
}

class RegisterEmployeeController {
  +getEmployeeRoles()
  +createEmployee(name, address, phoneNumber, email, citizenCardNumber, roleId)
  +saveEmployee()
}

class Company {
  -designation: String
  +Company(designation)
  +getDesignation()
  +getAuthFacade()
  +getEmployeeStore()
  +getEmployeeRoleStore()
}

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

class Employee {
  -id: String
  -address: String
  -phoneNumber: String
  -citizenCardNumber: int
  +Employee(id, name, address, phoneNumber, email, citizenCardNumber, roleId)
  +getId()
  +getName()
  +getAddress()
  +getPhoneNumber()
  +getEmail()
  +getCitizenCardNumber()
  +getPassword()
  +getRoleId()
}

class EmployeeRoleStore {
  +getRoles()
}

class AuthFacade {
  +existsUser(email)
  +addUserWithRole(name, email, password, roleId)
}

class PasswordGenerator {
  +generatePassword()
}

class EmailSender {
  +sendPasswordEmail(email, password)
}

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

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

RegisterEmployeeUI ..> RegisterEmployeeController

' RegisterEmployeeController ..> EmployeeStore
RegisterEmployeeController ..> Company
' RegisterEmployeeController ..> AuthFacade
' RegisterEmployeeController ..> EmployeeRoleStore

' EmployeeStore ..> AuthFacade
EmployeeStore ..> PasswordGenerator
EmployeeStore ..> EmailSender
EmployeeStore -- Employee : stores >

Company ..> AuthFacade
Company ..> EmployeeStore
Company ..> EmployeeRoleStore

Employee --|> User
Employee "*" -- "1" EmployeeRole : has >

EmployeeRoleStore -- EmployeeRole : stores >

@enduml