Ajouts oubliés

This commit is contained in:
MarcEricMartel
2023-06-03 18:07:33 -04:00
parent ab5a0205b4
commit 2159d58ddb
2996 changed files with 19234 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
# Hypothèses et dépendances
## Hypothèses
1. Est-ce qu'un admin devrait pouvoir créer un autre admin à l'intérieur du
programme?
- Je penserais que non, les administrateurs devraient avoir à passer par le
DBA à l'extérieur pour ajouter d'autres administrateurs.
2. Est-ce qu'on devrait utiliser un framework déjà existant pour
l'authentification et les autorisations ou bien le faire nous-même?
- Oui, un bon standard sera adéquat pour tous les cas de figures pertinents.
3. Est-ce que la version originale d'une publication modifiée devrait être
sauvegardée?
- Pour des fins de journalisation et possiblement juridique, il serait mieux
de garder des traces des modifications faites à une publication sans supprimer
les anciennes versions.
4. Est-ce qu'un invité devrait pouvoir voir le forum sans s'y inscrire?
- C'est le standard pour les forums internet, à moins d'une raison
spécifique pour un cas particulier, le forum sera public pour la lecture.
5. Qu'arriverait-t'il si une catégorie viendrait à être supprimée?
- L'administrateur aura le choix entre déplacer les fils dans une autre
catégorie ou les supprimer.
## Dépendances
1. Ça prend un serveur web.
2. Et une base de données.
3. Un domaine pour les serveurs dns.
4. Un framework d'identité ayant déjà été utilisé.
5. Un serveur centralisé serait mieux pour la gestion de concurrence qu'un
service cloud.
6.

View File

@@ -0,0 +1,31 @@
# UC01 - [Afficher les Catégories]
Quelqu'un veut faire afficher les catégories du forum.
## Acteur(s) primaires et secondaires
* Invité ou mieux. (Primaire)
## Préconditions/déclencheur
* Il y a au moins une catégorie de préalablement créée dans le forum.
## Postconditions
L'invité voit les catégories créées dans le forum.
## Scénario de base
1. L'invite fait afficher la liste des catégories du forum.
2. La liste s'affiche.
## Exceptions
* Aucune exception.
## Besoins non-fonctionnels spécifique
* L'affichage doit se faire un moins d'une seconde.
* Le système doit pouvoir traiter au moins 100 requêtes par minute sans
ralentissement.

View File

@@ -0,0 +1,29 @@
# UC02 - [Créer une Catégorie]
Un Administrateur veut créer une catégorie dans le forum.
## Acteur(s) primaires et secondaires
* Administrateur (Primaire)
## Préconditions/déclencheur
* Aucune précondition.
## Postconditions
* Une catégorie a été créée dans le forum.
## Scénario de base
1. Un Administrateur ajoute une nouvelle catégorie.
2. Il choisit un nom pour cette catégorie.
3. La catégorie est créée dans le Forum.
## Exceptions
* La transaction a échoué parce que la catégorie existe déjà dans le forum.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,30 @@
# UC03 - [Modifier le nom d'une Catégorie]
Un Administrateur veut modifier le nom d'une catégorie existante dans le forum.
## Acteur(s) primaires et secondaires
* Administrateur (Primaire)
## Préconditions/déclencheur
* Le forum doit préalablement contenir au moins une catégorie.
## Postconditions
* Le nom d'une catégorie a changé dans le forum.
## Scénario de base
1. Un Administrateur choisit une catégorie existante.
2. Il modifie le nom de cette catégorie.
3. Le nom est modifié pour cette catégorie.
## Exceptions
* La transaction a échoué parce qu'une autre catégorie a déjà le même nom dans
le forum.
## Besoins non-fonctionnels spécifique
* L'affichage du nouveau nom doit se faire en moins de 10 secondes.

View File

@@ -0,0 +1,41 @@
# UC04 - [Supprimer une Catégorie]
Un Administrateur veut supprimer une catégorie du Forum.
## Acteur(s) primaires et secondaires
* Administrateur (Primaire)
## Préconditions/déclencheur
* Il doit préalablement y avoir au moins une catégorie existante dans le Forum.
## Postconditions
* Une catégorie a été supprimée du Forum.
* Les fils dans cette catégorie ont été supprimés ou déplacés vers une autre
catégorie.
## Scénario de base
```plantuml
start
:Supprimer une catégorie;
switch(Quoi faire avec les fils?)
case(\r\r\rLes supprimer)
:Les fils sont supprimés;
case(\r\r\rLes déplacer)
:Choisir la catégorie destination;
:Les fils sont déplacés vers la catégorie destination;
endswitch
stop
```
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifiques
* Il doit être impossible d'afficher la catégorie supprimée au plus tard 10
secondes après sa suppression.

View File

@@ -0,0 +1,28 @@
# UC05 - [Lister les Fils]
Quelqu'un veut voir la liste des fils présents dans une catégorie.
## Acteur(s) primaires et secondaires
* Invité ou mieux. (Primaire)
## Préconditions/déclencheur
* Il y a au moins une catégorie avec au moins un fil dans le Forum.
## Postconditions
* Aucun changement.
## Scénario de base
1. Quelqu'un choisit une catégorie pour faire afficher ses fils.
2. Les fils sont affichés.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* La liste doit se rafraîchir automatiquement à chaque minute.

View File

@@ -0,0 +1,28 @@
# UC06 - [Afficher un Fil]
Une personne veut faire afficher les publications d'un fil en particulier.
## Acteur(s) primaires et secondaires
* Invité ou mieux. (Primaire)
## Préconditions/déclencheur
* Au moins un fil existe dans une catégorie.
## Postconditions
* Aucun changement.
## Scénario de base
1. Une personne choisit un fil à afficher.
2. Les publications composant ce fil s'affichent.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* Le délai d'affichage devrait être de moins de 1 seconde.

View File

@@ -0,0 +1,29 @@
# UC07 - [Créer un Fil]
Un utilisateur veut créer un fil de discussion.
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Il doit au moins y avoir une catégorie dans le forum.
## Postconditions
* Un fil a été ajouté à une catégorie.
## Scénario de base
1. Un utilisateur choisit un titre pour le fil.
2. Il créé la publication originale de ce fil ([UC11](UC11.md)).
3. Le fil est ajouté au forum.
## Exceptions
* L'échec de l'UC11 doit entraîner l'échec de cette transaction.
## Besoins non-fonctionnels spécifique
* Le fil doit être créé en moins d'une seconde.

View File

@@ -0,0 +1,41 @@
# UC08 - [Répondre au Fil]
Un utilisateur veut répondre à une publication dans un fil.
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Au moins un fil non-archivé existe dans le forum.
## Postconditions
* Une publication de réponse est ajoutée à un fil.
## Scénario de base
```plantuml
start
:L'utilisateur visionne un fil;
switch(Il répond)
case(Au fil en tant que tel)
case(À une publication en particulier dans le fil)
:La publication à répondre est ajoutée à la publication en cours;
endswitch
:Il créé la publication de réponse (UC11);
:La publication est ajoutée au fil;
stop
```
([UC11](UC11.md))
## Exceptions
* L'échec de l'UC11 doit entraîner l'échec de cette transaction.
* La transaction doit échouer si le fil est archivé.
## Besoins non-fonctionnels spécifique
* Mise à jour de l'affichage du fil en moins de 1 seconde.

View File

@@ -0,0 +1,30 @@
# UC09 - [Épingler un Fil]
Un modérateur veut épingler un fil au haut d'une catégorie.
## Acteur(s) primaires et secondaires
* Modérateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Au moins un fil existe dans le forum (Il peut être archivé et épinglé en même
temps).
## Postconditions
* Un fil a été épinglé au haut de sa catégorie.
## Scénario de base
1. Un modérateur sélectionne un fil dans une catégorie.
2. Il l'épingle.
3. Le fil est épinglé.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,30 @@
# UC10 - [Archiver un Fil]
Un modérateur veut archiver un fil.
## Acteur(s) primaires et secondaires
* Modérateur ou mieux. (Primaire)
* Utilisateurs (Secondaire)
## Préconditions/déclencheur
* Au moins un fil non-archivé existe dans le forum.
## Postconditions
* Un fil a été archivé et devient immuable.
## Scénario de base
1. Un modérateur sélectionne un fil dans une catégorie.
2. Il l'archive.
3. Le fil est archivé.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* Le fil doit être archivé en moins de 1 seconde pour tous les utilisateurs.

View File

@@ -0,0 +1,31 @@
# UC11 - [Créer une Publication]
Un utilisateur veut créer une publication dans le cadre d'une création de fil
([UC07 - Créer un fil](UC07.md)) ou pour répondre à une autre publication dans
un fil existant ([UC08 - Répondre au fil](UC08.md)).
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Le déclenchement de [UC07 - Créer un fil](UC07.md) ou de [UC08 - Répondre au
fil](UC08.md).
## Postconditions
* Une publication est ajoutée dans un fil.
## Scénario de base
1. L'utilisateur écrit le contenu de sa publication.
## Exceptions
* La transaction va échouer si l'utilisateur est banni.
## Besoins non-fonctionnels spécifique
* Doit être appliquée avant la fin de son UC déclencheur.

View File

@@ -0,0 +1,36 @@
# UC12 - [Modifier une Publication]
Un utilisateur veut modifier une de ses publications.
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* L'utilisateur doit avoir préalablement publié au moins une publication dans le
forum.
## Postconditions
* Une publication a été modifiée dans le forum.
* Une date de modification a été ajoutée à la publication.
## Scénario de base
1. Un utilisateur sélectionne une de ses propre publications.
2. Il modifie le contenu de la publication.
3. La publication est modifiée.
## Exceptions
* La transaction va échouer si l'utilisateur est banni.
* La transaction va échouer si l'utilisateur tente de modifier la publication
d'un autre utilisateur.
* La transaction va échouer si la publication est cachée.
* La transaction va échouer si le fil est archivé.
## Besoins non-fonctionnels spécifique
* La propagation de cette modification doit être faite en moins de 1 seconde.

View File

@@ -0,0 +1,30 @@
# UC13 - [Cacher une Publication]
Un modérateur veut cacher une publication pour des raisons de modération.
## Acteur(s) primaires et secondaires
* Modérateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Au moins une publication existe dans le forum.
## Postconditions
* Une publication est cachée.
## Scénario de base
1. Un modérateur choisit une publication à cacher.
2. La publication est cachée.
## Exceptions
* Aucune (Note: l'archivage d'un fil ne doit pas empêcher la censure d'une
publication).
## Besoins non-fonctionnels spécifique
* La propagation de cette modification doit être la plus rapide possible.

View File

@@ -0,0 +1,30 @@
# UC14 - [Afficher un Compte]
Quelqu'un veut faire afficher les informations d'un compte utilisateur du forum.
## Acteur(s) primaires et secondaires
* Invité ou mieux. (Primaire)
* Utilisateur (Secondaire)
## Préconditions/déclencheur
* Au moins un compte utilisateur existe dans le forum.
## Postconditions
* Aucune.
## Scénario de base
1. Quelqu'un choisit un compte à faire afficher.
2. Un compte est affiché.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,31 @@
# UC15 - [Créer un Compte]
Un invité veut se créer un compte.
## Acteur(s) primaires et secondaires
* Invité (Primaire)
## Préconditions/déclencheur
* Aucun.
## Postconditions
* Un compte a été créé dans le forum.
## Scénario de base
1. Un invité entre son nom d'utilisateur, son adresse courriel, et un mot de
passe.
2. (Optionnel) Il entre une description et/ou une signature.
3. Le compte est créé.
## Exceptions
* La transaction va échouer si le nom d'utilisateur ou le courriel existe déjà
dans le forum.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,32 @@
# UC16 - [Modifier une description de Compte]
Un utilisateur veut modifier sa description dans son compte ou un administrateur
veut modifier la description d'un compte utilisateur.
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Aucune.
## Postconditions
* La description de l'utilisateur a été modifiée.
## Scénario de base
1. Un administrateur choisit un compte à modifier. (S'il n'est pas admin,
l'utilisateur affiche son compte).
2. Il modifie le contenu de la description.
3. La description est modifiée.
## Exceptions
* La transaction va échouer si l'utilisateur tente de modifier la description
d'une autre utilisateur s'il n'est pas un administrateur.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,32 @@
# UC17 - [Modifier une signature de Compte]
Un utilisateur veut modifier sa signature dans son compte ou un administrateur
veut modifier la signature d'un compte utilisateur.
## Acteur(s) primaires et secondaires
* Utilisateur ou mieux. (Primaire)
## Préconditions/déclencheur
* Aucune.
## Postconditions
* La signature de l'utilisateur a été modifiée.
## Scénario de base
1. Un administrateur choisit un compte à modifier. (S'il n'est pas admin,
l'utilisateur affiche son compte).
2. Il modifie le contenu de la signature.
3. La signature est modifiée.
## Exceptions
* La transaction va échouer si l'utilisateur tente de modifier la signature
d'une autre utilisateur s'il n'est pas un administrateur.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,31 @@
# UC18 - [Modifier un rôle de Compte]
Un administrateur veut modifier le rôle d'un compte utilisateur.
## Acteur(s) primaires et secondaires
* Administrateur (Primaire)
* Utilisateur ou Modérateur (secondaire)
## Préconditions/déclencheur
* Au moins un compte admin et un compte utilisateur ou modérateur existe dans le
forum.
## Postconditions
* Le rôle d'un utilisateur a changé.
## Scénario de base
1. Un administrateur choisit un compte.
2. Il choisit le rôle à donner au compte (Utilisateur ou Modérateur).
3. Le rôle du compte est changé.
## Exceptions
* Aucune.
## Besoins non-fonctionnels spécifique
* Aucun.

View File

@@ -0,0 +1,30 @@
# UC19 - [Bannir un Compte]
Un modérateur veut bannir un compte utilisateur.
## Acteur(s) primaires et secondaires
* Modérateur ou mieux. (Primaire)
* Utilisateur ou modérateur. (Secondaire)
## Préconditions/déclencheur
* Au moins un compte Modérateur et un compte Utilisateur existe dans le forum.
## Postconditions
* Un compte a été banni du forum.
## Scénario de base
1. Un modérateur choisit le compte à bannir.
2. Le compte est banni.
## Exceptions
* La transaction va échouer si le compte à bannir a le même rôle ou un rôle
supérieur à celui qui fait le bannissement.
## Besoins non-fonctionnels spécifique
* La propagation doit se faire le plus rapidement possible.

View File

@@ -0,0 +1,76 @@
# Cas d'utilisations
* [UC01 Afficher les Catégories](UC01.md)
* [UC02 Créer une Catégorie](UC02.md)
* [UC03 Modifier le nom d'une Catégorie](UC03.md)
* [UC04 Supprimer une Catégorie](UC04.md)
* [UC05 Lister les Fils](UC05.md)
* [UC06 Afficher un Fil](UC06.md)
* [UC07 Créer un Fil](UC07.md)
* [UC08 Répondre au Fil](UC08.md)
* [UC09 Épingler un Fil](UC09.md)
* [UC10 Archiver un Fil](UC10.md)
* [UC11 Créer une Publication](UC11.md)
* [UC12 Modifier une Publication](UC12.md)
* [UC13 Cacher une Publication](UC13.md)
* [UC14 Afficher un Compte](UC14.md)
* [UC15 Créer un Compte](UC15.md)
* [UC16 Modifier une description de Compte](UC16.md)
* [UC17 Modifier une signature de Compte](UC17.md)
* [UC18 Modifier un rôle de Compte](UC18.md)
* [UC19 Bannir un Compte](UC19.md)
```plantuml
left to right direction
:Administrateur: as Admin
:Modérateur: as Mod
:Utilisateur: as User
:Invité: as Guest
Mod <|- Admin
User <|- Mod
Guest <|- User
package Forum {
usecase "UC01 - Afficher les Catégories" as UC01
usecase "UC02/UC03/UC04 - Gérer une Catégorie" as UC02
usecase "UC05 - Lister les Fils" as UC05
usecase "UC06 - Afficher un Fil" as UC06
usecase "UC07 - Créer un Fil" as UC07
usecase "UC08 - Répondre au Fil" as UC08
usecase "UC09/UC10 - Épingler/Archiver un Fil" as UC09
usecase "UC11 - Créer une Publication" as UC11
usecase "UC12 - Modifier une Publication" as UC12
usecase "UC13 - Cacher une Publication" as UC13
usecase "UC14 - Afficher un Compte" as UC14
usecase "UC15 - Créer un Compte" as UC15
usecase "UC16/UC17 - Modifier un Compte" as UC16
usecase "UC18 - Modifier un Rôle de Compte" as UC18
usecase "UC19 - Bannir un Compte" as UC19
}
Guest --> UC01
Guest --> UC05
Guest --> UC06
Guest --> UC14
Guest --> UC15
User --> UC07
User --> UC08
User --> UC12
User --> UC16
Mod --> UC09
Mod --> UC13
Mod --> UC19
Admin --> UC02
Admin --> UC18
UC07 ..> UC11 : <<include>>
UC08 ..> UC11 : <<include>>
```

View File

@@ -0,0 +1,111 @@
# Abstractions principales
Un forum est divisé par catégories générales (par exemple: un forum ayant
comme intêret les aliments pourrait être divisé en 4 catégories qui seraient
analogues aux 4 catégories alimentaires); ces sujets vont ensuite être divisés
par fils - ou conversations (comme un fil dans la catégorie "Fruits et légumes"
avec comme sujet "Comment aimez-vous manger des carottes?"). L'atôme du forum
est la publication; un texte écrit par un utilisateur, soit pour démarrer une
conversation, soit en réponse à la publication de départ, ou bien en réponse à
une réponse en particulier.
Les forums sont modérés par des utilisateurs particuliers (des modérateurs) et
des administrateurs responsables du contenu de ceux-ci, ils peuvent ainsi
censurer du contenu inapproprié et bannir un utilisateur qui ne suit pas les
conditions d'utilisation des forums.
## Modèle du domaine (Diagramme de classes simplifié)
```plantuml
hide circles
hide methods
hide attributes
package Rôles {
class "Administrateur" as Admin
class "Modérateur" as Mod
class "Utilisateur" as User
class "Invité" as Guest
}
Guest <|-- User
User <|-- Mod
Mod <|-- Admin
package Forum {
class "Catégorie" as Category
class "Fil" as Thread
class "Publication" as Post
class "Compte" as Account
}
Category "1" --o "*" Thread
Thread "1" --o "1" Post : Publication Originale
Thread "1" ---* "*" Post
Post "1" --* "*" Post : Références
Post "*" o-- "1" Account
User "1" --o "1" Account
```
## Glossaire
### Langage Commun
#### Invité (Guest)
Acteur qui utilise le système sans authentification.
#### Utilisateur (User)
Acteur authentifié dans un système.
#### Modérateur (Moderator)
Super-utilisateur avec certains droits sur le système et la responsabilité de
garder le système sain d'utilisation.
#### Administrateur (Administrator)
Super-utilisateur qui gère le système et qui a ainsi tous les droits sur ce
dernier.
### Jargon du domaine
#### Forum (Forum)
Souvent vu au pluriel pour désigner son ensemble, c'est l'environnement où des
utilisateurs vont discuter sur des sujets désignés selon le contexte de
l'endroit.
#### Catégorie (Category)
Division des forums par sujets généraux permettant une recherche plus facile des
discussions passées.
#### Publication (Post)
Message écrit par un utilisateur, qui peut être en réponse à une autre
publication ou pour démarrer une discussion.
#### Fil de discussion (Thread)
Ensemble de publications entre des utilisateurs qui composent une discussion.
#### Compte (Account)
Ensemble des informations reliés à un utilisateur (Nom d'utilisateur, adresse
courriel, emplacement, etc.) qui peuvent où ne pas être vues par les autres
utilisateurs.
#### Archivage (Archiving)
Mettre un fil de discussion dans un état où il est impossible d'ajouter à la
conversation; effectivement rendre le fil uniquement lisible.
### Langage spécifique
Vu l'aspect général du projet, il n'y a pas vraiment de langage spécifique à
utiliser.

View File

@@ -0,0 +1,76 @@
# Analyse détaillée
```plantuml
hide circles
package Rôles {
hide methods
hide attributes
class "Administrateur" as Admin
class "Modérateur" as Mod
class "Utilisateur" as User
class "Invité" as Guest
}
Guest <|-- User
User <|-- Mod
Mod <|-- Admin
package Forum {
class "Catégorie" as Category {
Nom
AfficherCatégories()
CréerCatégorie()
ModifierNomCatégorie()
SupprimerCatégorie()
}
class "Fil" as Thread {
Titre
EstÉpinglé
EstArchivé
ListerFils()
AfficherFil()
CréerFil()
RépondreAuFil()
ÉpinglerFil()
ArchiverFil()
}
class "Publication" as Post {
Contenu
ContenuModifié
DateDePublication
DateDeModification
EstCachée
CréerPublication()
ModifierPublication()
CacherPublication()
}
class "Compte" as Account {
Pseudo
Courriel
Description
Signature
Rôle
AfficherCompte()
CréerCompte()
ModifierDescription()
ModifierSignature()
ModifierRôle()
BannirCompte()
}
}
Category "1" --o "*" Thread
Thread "1" --o "1" Post : Publication Originale
Thread "1" ---* "*" Post
Post "1" --* "*" Post : Références
Post "*" o-- "1" Account
User "1" --o "1" Account
```

View File

@@ -0,0 +1,63 @@
# Analyse de robustesse
```plantuml
left to right direction
actor "Invité" as Guest
actor "Utilisateur" as User
actor "Modérateur" as Mod
actor "Administrateur" as Admin
Mod <|-- Admin
User <|-- Mod
Guest <|-- User
boundary "Écran Catégories" as CategoryView
boundary "Écran Fils" as ThreadView
boundary "Écran Publications" as PostView
boundary "Écran Comptes" as AccountView
boundary "Écran Bannir" as BanView
boundary "Écran Changer Rôle" as RoleView
boundary "Écran Gestion Catégories" as ModCatView
control "Catégories" as CategoryController
control "Fils" as ThreadController
control "Publications" as PostController
control "Comptes" as AccountController
entity "Catégorie" as CategoryModel
entity "Fil" as ThreadModel
entity "Publication" as PostModel
entity "Compte" as AccountModel
Guest -> CategoryView
Guest --> ThreadView
Guest --> PostView
Guest --> AccountView
Mod --> BanView
Admin --> ModCatView
Admin --> RoleView
ModCatView --> CategoryController
RoleView --> AccountController
BanView --> AccountController
CategoryView --> CategoryController
ThreadView --> ThreadController
PostView --> PostController
AccountView --> AccountController
CategoryController --> CategoryModel
ThreadController --> ThreadModel
ThreadController --> PostModel
PostController --> PostModel
PostController --> AccountModel
AccountController --> AccountModel
```