@startuml
skinparam classAttributeIconSize 0

class EfetuarCandidaturaUI {
}
class EfetuarCandidaturaController {
  +novoCandidatura(valor, nrDias, texto)
  +getListaAnunciosDisponiveis()
  +efetuarCandidatura()
  +getAnuncio(Id)
}

class AplicacaoPOT{
  +getInstance()
  +getSessaoAtual()
}

class SessaoUtilizador{
  +getEmailUser()
}

class Plataforma {
  -String designacao
  +getRegistoFreelancer()
  +getRegistoAnuncio()
}

class Candidatura {
    -double valor
    -int nrDias
    -String texto
    +Candidatura(valor, duracao, texto)
}


class Anuncio {
    -Periodo pDePub
    -Periodo pDeCand
    -Periodo pDeDec
    +getListaCandidatura()
    +efetuarCandidatura()
    +addCandidatura()
}
class RegistoAnuncio{
  +getListaAnunciosDisponivel(m_oFreelancer)
  }
class RegistoCandidatura{
  +novaCandidatura(valor, nrDias, texto)
    -validaCandidatura(candidatura)
}

class RegistoFreelancer{
private List<Freelancer> freelancerList;
getAnuncioByEmail(User)
}


EfetuarCandidaturaUI ..> EfetuarCandidaturaController
EfetuarCandidaturaController ..> Plataforma
EfetuarCandidaturaController ..> AplicacaoPOT
EfetuarCandidaturaController ..> Anuncio
EfetuarCandidaturaController ..> SessaoUtilizador
EfetuarCandidaturaController ..> RegistoAnuncio
EfetuarCandidaturaController ..> RegistoCandidatura
EfetuarCandidaturaController ..> Candidatura

RegistoAnuncio "1" --> " * "  Anuncio : tem
Anuncio "1" --> " * "  RegistoCandidatura : possui
RegistoCandidatura "1" --> " * "  Candidatura : tem
Plataforma "1" --> " * "  RegistoAnuncio : possui
Plataforma"1"-->"*" RegistoFreelancer : possui
RegistoFreelancer"1"-->"*"Freelancer : tem
@enduml

