@startuml
skinparam packageStyle rectangle
skinparam shadowing false
skinparam linetype polyline


skinparam classAttributeIconSize 0

class ApplicationSession
{
    + static getInstance()
    + getCurrentSession()
}

class UserSession
{
    + getUserEmail()
}

class HMR {
}

class Job {
    - String name
    - String description

    + Job(name/description)
}


class Organization {
    - String name
    - String website
    - Integer phone
    - String email

    - addJob(job)
    - validateJob(job)
    + anyEmployeeHasEmail(email)
    + Organization(name, webSite, phone)
    + createJob(name/description)
    - getEmployeeByEmail(email)

}

class OrganizationRepository {
    + getOrganizationByEmployeeEmail(email)
}

class Repositories {
    - Repositories()
    + getInstance() : Repositories
    + getOrganizationRepository()
}

class RegisterJobController {
    + RegisterJobController(organizationRepository)
    + createJob (userEmail, reference, description,\ninformalDescription, technicalDescription,\nduration, cost, categoryDescription)
    - getEmployeeFromSession()
}

note right of RegisterJobController
    - userEmail is obtained
    from the user session
end note

class RegisterJobUI {
}

Repositories -> Repositories : instance
ApplicationSession -> ApplicationSession : instance

RegisterJobUI .> RegisterJobController

RegisterJobController .> Repositories : repositories

RegisterJobController ..> OrganizationRepository : organizationRepository

Repositories --> "1" OrganizationRepository

OrganizationRepository --> "*" Organization
ApplicationSession --> "1" UserSession : userSession

RegisterJobController ..> "1" Organization : organization
RegisterJobController ..> ApplicationSession
RegisterJobController ..> UserSession
Organization "1" --> "*" Job : owns
Job --> HMR : register by

Organization "1" --> "1" HMR : have

@enduml