@startuml rdcu_ajouterDevoir
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - ajouterDevoir()

participant ":DevoirControleur" as dc
participant ":Utilisateur" as u
participant "e:Enseignant" as e
participant "devoir:Devoir" as d
participant "c:Cours" as c
participant "_listeCours:Map<string, Cours>" as cMap
participant "_listeDevoirs:Map<string, Devoir>" as dMap

->dc : ajouterDevoir(descriptionDevoir: JSON)
note left of dc : descriptionDevoir = {\n sigle: string,\n courriel : string, \n groupe : string,\n nom: string,\n description : string,\n noteMax : int,\n dateDebut : Date, \n dateFin : Date,\n actif: boolean }
note right : selon Contrôleur\n(DevoirControleur est un sous-système)
dc -> u : e = getUtilisateur(courriel : string)
note right : Selon expert, Utilisateur est un singleton qui possède les utilisateurs
dc -> e : ajouterDevoir(descriptionDevoir: JSON)
note right : selon Expert\nEnseignant créer ses devoirs
e --> d ** : créer (descriptionDevoir : JSON)
note right : selon Créateur\n Enseignent créer ses devoirs
e -> cMap : c = get(id : string) : Cours
note right : selon Expert, la liste de cours possède le cours
e -> c : ajouterDevoir(devoir: Devoir)
note right : selon Expert\nCours possède la liste de travaux et possède un Map avec "nom" comme clé
c -> dMap : set(devoir.nom string, devoir: Devoir)
note left of dMap : selon Expert, la liste de devoirs est une Map qui contient les devoirs
@enduml


@startuml rdcu_recupererListeDevoirs
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - recupererListeDevoirs()
participant ":DevoirControleur" as dc
participant ":Utilisateur" as u
participant "e:Enseignant" as e
participant "c:Cours" as c
participant "_listeCours:Map<string, Cours>" as cMap
participant "_listeDevoirs:Map<string, Devoir>" as dMap

->dc : recupererListeDevoirs(sigle: string, groupe : string, courriel : string, courriel : string)
note right : selon Contrôleur\n(DevoirControleur est un sous-système)
dc -> u : e = getUtilisateur(courriel : string)
note right : Selon expert, Utilisateur est un singleton qui possède les utilisateurs
dc -> e : recupererListeDevoirs(id : string)
note right : selon Expert\n L'enseignant possède sa map de cours
e -> cMap : c = get(id : string) : Cours
note right : selon Expert, la map de cours possède les cours
e -> c : recupererListeDevoirs()
note right : selon Expert\nCours possède la liste de travaux
c -> dMap : devoirs = _listeDevoirs: Map<string,Devoir>
note left of dMap : selon Expert, la map de devoirs possède les devoirs
e <-- c : devoirs 
dc <-- e : devoirs 
<-- dc : devoirs 
@enduml

@startuml rdcu_recupererDevoir
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - recupererDevoir()

participant ":DevoirControleur" as dc
participant ":Utilisateur" as u
participant "e:Enseignant" as e
participant "c:Cours" as c
participant "_listeCours:Map<string, Cours>" as cMap
participant "_listeDevoirs:Map<string, Devoir>" as dMap

->dc : recupererDevoir(sigle: string, groupe : string, nom: string, courriel : string)
note right : selon Contrôleur\n(DevoirControleur est un sous-système)
dc -> u : e = getUtilisateur(courriel : string)
note right : Selon expert, Utilisateur est un singleton qui possède les utilisateurs
dc -> e : recupererDevoir(id: string, nom : string)
note right :  selon Expert\nEnseignant enseigne plusieurs Cours et possède un Map avec "sigle" comme clé
e -> cMap : c = get(id : string) : Cours
note right : selon Expert, la map de cours possède le cours
e -> c : recupererDevoir(nom : string)
note right : selon Expert\nCours possède la liste de travaux
c -> dMap : get(nom : string) : Devoir
e <<-- c : devoir
dc <<-- e : devoir
note right : selon Expert, la map de devoirs possède le devoir
<-- dc : devoir : Devoir
@enduml




@startuml rdcu_modifierDevoir
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - modifierDevoir()

participant ":DevoirControleur" as dc
participant ":Utilisateur" as u
participant "e:Enseignant" as e
participant "devoir:Devoir" as d
participant "c:Cours" as c
participant "_listeCours:Map<string, Cours>" as cMap
participant "_listeDevoirs:Map<string, Devoir>" as dMap

->dc : modifierDevoir(devoirDescription: JSON)
note left of dc : descriptionDevoir = {sigle: string, groupe : string, courriel : string, nom: string,\n description : string, noteMax : int,\n  dateDebut : Date, dateFin : Date,\n actif: boolean  }
note right : selon Contrôleur\n(DevoirControleur est un sous-système)
dc -> u : e = getUtilisateur(courriel : string)
note right : Selon expert, Utilisateur est un singleton qui possède les utilisateurs
dc -> e : modifierDevoir(devoirDescription: JSON)
note right : selon Expert, l'enseignant modifie ses devoirs
e -> cMap : c = get(id: string) : Cours
note right : selon Expert, la map de cours possède le cours
e -> c : recupererDevoir(nom: string)
note right : selon Expert\nCours possède la map de travaux
c -> dMap : devoir = get(nom: string) : Devoir
note left of dMap : selon Expert, la map de devoirs possède le devoir
e -> d : modifierDevoir(modification: JSON)
note left of d : modification = { description : string, noteMax : int,\n  dateDebut : Date, dateFin : Date, actif: boolean}
note right : selon Expert, devoir possède ses propres arguments
dc <-- e : devoir : Devoir
<-- dc : devoir : Devoir
@enduml



@startuml retirerDevoir
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - retirerDevoir()

participant ":DevoirControleur" as dc
participant ":Utilisateur" as u
participant "e:Enseignant" as e
participant "devoir:Devoir" as d
participant "c:Cours" as c
participant "_listeCours:Map<string, Cours>" as cMap
participant "_listeDevoirs:Map<string, Devoir>" as dMap

->dc : retirerDevoir(courriel : string, sigle : string, groupe : string, nom: string)
note left of dc : descriptionDevoir = {sigle: string, groupe : string,\n courriel : string, nom: string,\n description : string, noteMax : int,\n  dateDebut : Date, dateFin : Date,\n actif: boolean  }
note right : selon Contrôleur\n(DevoirControleur est un sous-système)
dc -> u : e = getUtilisateur(courriel : string)
dc -> e : retirerCours(id : string)
note right :  selon Expert\nEnseignant enseigne plusieurs Cours et possède un Map avec "id" comme clé
e -> cMap : c = get(id: string) : Cours
note right : selon Expert, la map de cours possède le cours
e -> c : retirerDevoir(nom: string)
note right : selon Expert\nCours possède la liste de travaux
c -> dMap : delete(nom: string)
note right : selon Expert, la map de devoirs possède le devoir
@enduml