From abef330bd72a8614f64bddfce51fb63b4fdd9f8c Mon Sep 17 00:00:00 2001
From: Debucquoy Anthony <d.tonitch@gmail.com>
Date: Fri, 15 Dec 2023 14:36:44 +0100
Subject: [PATCH] class diagram messaging extension (#13)

Co-authored-by: Anthony Debucquoy <debucquoy.anthony@gmail.com>
Reviewed-on: https://git.herisson.ovh/PGL/Clyde/pulls/13
Reviewed-by: Maxime <231026@umons.ac.be>
---
 Documents/proto/messaging_extension/Makefile  |  3 +-
 Documents/proto/messaging_extension/class.uml | 86 +++++++++++++++++++
 2 files changed, 88 insertions(+), 1 deletion(-)
 create mode 100644 Documents/proto/messaging_extension/class.uml

diff --git a/Documents/proto/messaging_extension/Makefile b/Documents/proto/messaging_extension/Makefile
index 8bd79dc..7ba3e31 100644
--- a/Documents/proto/messaging_extension/Makefile
+++ b/Documents/proto/messaging_extension/Makefile
@@ -11,7 +11,7 @@ extension_messagerie.pdf:use_case_messagerie.tex extension_messagerie.bbl extens
 use_case_messagerie.tex: use_case_messagerie.uml
 	plantuml -tlatex:nopreamble use_case_messagerie.uml
 
-image: use_case_messagerie.uml interaction_diagram.uml
+image: use_case_messagerie.uml interaction_diagram.uml class.uml 
 	plantuml $^ 
 	mmdc -i ERD.md -o ERD.png
 
@@ -25,6 +25,7 @@ clean:
 	latexmk -C
 	rm -f use_case_messagerie.tex
 	rm -f extension_messagerie.{bbl,run.xml}
+	rm -f class.tex
 
 run: extension_messagerie.pdf
 	xdg-open $<
diff --git a/Documents/proto/messaging_extension/class.uml b/Documents/proto/messaging_extension/class.uml
new file mode 100644
index 0000000..48ef5b9
--- /dev/null
+++ b/Documents/proto/messaging_extension/class.uml
@@ -0,0 +1,86 @@
+@startuml
+title Class diagram for Messaging extension
+
+package Messages {
+	class Message{
+		content: String
+		response: Message
+		respond(User, String)
+	}
+	class Discussion{
+		name: String
+		users: ArrayList<User>
+		invite(User)
+		sendMessage(User, String)
+	}
+	Discussion *-- Message
+}
+
+package Forums {
+	class Forum{
+		name: String
+		Owner: Teacher
+		Registered: ArrayList<User>
+		{static} createForum(Course): Forum
+		createTopic(String): Topic
+		createPoll(String, PollType, ArrayList<Option>): Poll
+	}
+	class Topic{
+		subject: String
+		author: Teacher 
+		content: String
+		answer(User, String): Answer
+		lock(Boolean)
+	}
+	class Answer{
+		author: User
+		content: String
+		anonymous: Boolean 
+		remove()
+	}
+	class Poll{
+		options: ArrayList<Option>
+		type: PollType
+		answer(User, Option): Vote
+		addOption(Option)
+	}
+	class Option{
+		name: String
+	}
+	class Vote{
+		voter: User
+	}
+	enum PollType {
+		ALLOW_NEW_OPTIONS
+		ALLOW_MULTIPLE_CHOICE
+	}
+	note "Change the behaviour of poll" as N
+
+	Forum *-l- Topic
+	Topic *-l- Answer
+
+	Topic <|-d- Poll
+	Poll *-l- Option
+	Option "1..*" -d-x Vote
+	Poll *-- Vote
+
+	Poll -- PollType
+	PollType .r. N
+
+}
+
+package Appointments{
+	class Appointment{
+		date: Date
+		teacher: Teacher
+		student: Student
+		{static} Appointment(Student, Teacher, Date)
+		accept()
+		refuse()
+		propose(Date)
+		export(): File
+	}
+}
+
+Appointments -[hidden]d- Messages
+@enduml