ClassUMLdiagramdraft - bounswe/bounswe2025group5 GitHub Wiki
Here is the full PlantUML Code:
@startuml
'--------------------------
' User and Account Classes
'--------------------------
abstract class User {
- email: String
- username: String
- password: String
}
class RegisteredUser {
- wasteReductionGoal: double
- goalUnit: String
- points: int
- profilePhoto: String
+ register()
+ login()
+ resetPassword()
+ deleteAccount()
+ logout()
+ editProfile()
}
User <|-- RegisteredUser
class Moderator {
+ moderatePost()
+ reviewReports()
}
RegisteredUser <|-- Moderator
'--------------------------
' Waste Tracking
'--------------------------
class WasteLog {
- logId: int
- date: Date
- amount: double
- unit: String
- wasteType: WasteType
+ logWaste()
}
RegisteredUser "1" -- "*" WasteLog : logs
enum WasteType {
Plastic
Organic
Paper
Metal
Glass
}
'--------------------------
' Post and Reporting
'--------------------------
class Post {
- postId: int
- content: String
- attachments: List<String>
- timestamp: Date
+ createPost()
+ deletePost()
+ savePost()
}
RegisteredUser "1" -- "*" Post : creates
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ reportPost()
+ resolve()
}
Post "1" -- "*" Report : has
Moderator "1" -- "*" Report : reviews
'--------------------------
' Challenges and Participation
'--------------------------
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
+ joinChallenge()
}
class ChallengeParticipation {
- participationDate: Date
- pointsEarned: int
}
RegisteredUser "1" -- "*" ChallengeParticipation : participates
Challenge "1" -- "*" ChallengeParticipation : involves
'--------------------------
' Leaderboard
'--------------------------
class Leaderboard {
- leaderboardId: int
- location: String
+ updateRanking()
}
Leaderboard "1" -- "*" RegisteredUser : "ranks in"
'--------------------------
' Rewards
'--------------------------
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeemReward()
}
RegisteredUser "1" -- "*" Reward : redeems
'--------------------------
' Notifications
'--------------------------
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ markAsRead()
}
RegisteredUser "1" -- "*" Notification : receives
@enduml
Here is the full PlantUML Code:
@startuml
'--------------------------
' User and Account Classes
'--------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- wasteReductionGoal: double
- goalUnit: String
- points: int
- profilePhoto: String
+ register(email: String, password:String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
}
RegisteredUser <|-- Moderator
'--------------------------
' Waste Tracking
'--------------------------
class WasteLog {
- logId: int
- date: Date
- amount: double
- unit: String
- wasteType: WasteType
+ logWaste(amount: double, unit: String, type: WasteType): boolean
}
RegisteredUser "1" -- "*" WasteLog : logs
enum WasteType {
Plastic
Organic
Paper
Metal
Glass
}
'--------------------------
' Post and Reporting
'--------------------------
class Post {
- postId: int
- content: String
- attachments: List<String>
- timestamp: Date
+ createPost(content: String, attachments: List<String>): boolean
+ deletePost(postId: int): boolean
+ savePost(postId: int): boolean
}
RegisteredUser "1" -- "*" Post : creates
RegisteredUser "1" -- "*" Profile: has
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ reportPost(postId: int, reason: String): boolean
+ resolve(reportId: int): boolean
}
Post "1" -- "*" Report : has
Moderator "1" -- "*" Report : reviews
'--------------------------
' Challenges and Participation
'--------------------------
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
+ joinChallenge(challengeId: int, userId: string): boolean
}
class ChallengeParticipation {
- participationDate: Date
- pointsEarned: int
}
class Profile{
- userName: String
- photo: Image
-biography: String
+ getPhoto():Image
+ setPhoto(photo:Image):boolean
+ getBiography(): String
+ setBiography(biography:String) :String
}
RegisteredUser "1" -- "*" ChallengeParticipation : participates
Challenge "1" -- "*" ChallengeParticipation : involves
'--------------------------
' Leaderboard
'--------------------------
class Leaderboard {
- leaderboardId: int
- location: String
- type : WasteType
+ updateRanking(userId: String, leaderboardId: int): void
}
Leaderboard "1" -- "*" RegisteredUser : "ranks in"
'--------------------------
' Rewards
'--------------------------
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeemReward(rewardId: int): boolean
}
RegisteredUser "1" -- "*" Reward : redeems
'--------------------------
' Notifications
'--------------------------
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser "1" -- "*" Notification : receives
@enduml

Here is the full PlantUML Code:
@startuml
'--------------------------
' User and Account Classes
'--------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- points: int
- posts: List<String>
+ register(email: String, password:String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ createPost(content: String, attachments: List<String>)
+ deletePost(postId: int): boolean
+ likePost(postId: int): void
+ commentOnPost(postId: int, comment: String): void
+ reportPost(postId: int, reason: String): void
+ editProfile(flag: String): void
+ createWasteGoal(name:String, duration:double, type:WasteType, amount: double): void
+ logWaste(wasteGoalId: String, amount: double): void
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
}
RegisteredUser <|-- Moderator
'--------------------------
' Waste Tracking
'--------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- progress: double
- reward: int
- ownerUserId: String
- duration: double
+ log(amount: double): boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
}
RegisteredUser "1" -- "*" WasteGoal : creates
enum WasteType {
Plastic
Organic
Paper
Metal
Glass
}
'--------------------------
' Post and Reporting
'--------------------------
class Post {
- postId: int
- content: String
- attachments: List<String>
- timestamp: Date
- authorName: String
- likes: int
- comments: List<String>
+ create(content: String, attachments: List<String>): boolean
+ savePost(postId: int): boolean
}
RegisteredUser "1" -- "*" Post : creates
RegisteredUser "1" -- "1" Profile: has
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
Post "1" -- "*" Report : has
Moderator "1" -- "*" Report : reviews
'--------------------------
' Challenges and Participation
'--------------------------
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- type: WasteType
+ getLoggedAmounts(userId, amount: double): void
+ updateLoggedAmounts(userId:int, loggedWaste: double): void
+ sendLoggedAmounts(userId:int, leaderboardId: int): double
+ deleteUserProgress(userId: int): int
}
RegisteredUser "1" -- "*" Challenge : participates
Challenge "1" -- "1" Leaderboard: communicates
class Profile{
- userName: String
- photo: Image
-biography: String
+ getPhoto():Image
+ setPhoto(photo:Image):boolean
+ getBiography(): String
+ setBiography(biography:String) :String
}
'--------------------------
' Leaderboard
'--------------------------
class Leaderboard {
- leaderboardId: int
- location: String
- type : WasteType
- usersList: List<int>
+ updateRanking(userId: String, leaderboardId: int): void
}
Leaderboard "1" -- "*" RegisteredUser : "ranks in"
'--------------------------
' Rewards
'--------------------------
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: int, points:int, rewardId: int): boolean
}
RegisteredUser "1" -- "*" Reward : redeems
'--------------------------
' Notifications
'--------------------------
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: int, content: String): boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser "1" -- "*" Notification : receives
@enduml
Here is the full PlantUML Code:
'--------------------------
' User and Account Classes
'--------------------------
skinparam linetype ortho
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- points: int
- posts: List<String>
- badges: List<Badge>
- goals: List<WasteGoal>
+ register(email: String, password:String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ createPost(content: String, attachments: List<String>)
+ deletePost(postId: int): boolean
+ likePost(postId: int): void
+ commentOnPost(postId: int, comment: String): void
+ reportPost(postId: int, reason: String): void
+ editProfile(flag: String): void
+ createWasteGoal(name:String, duration:double, type:WasteType, amount: double): void
+ logWaste(amount: double, type: WasteType): void
+ deleteWasteGoal(goalId: int): boolean
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ assignBadge(badge: Badge): void
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
}
RegisteredUser <|-- Moderator
'--------------------------
' Waste Tracking
'--------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- progress: double
- reward: int
- ownerUserId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
+ checkCompletion(): boolean
}
RegisteredUser "1" -- "*" WasteGoal : creates
class WasteLog {
- logId: int
- amount: double
- wasteType: WasteType
- goalId: int
- userId: int
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
RegisteredUser "1" -- "*" WasteLog : logs
enum WasteType {
Plastic
Organic
Paper
Metal
Glass
}
'--------------------------
' Post and Reporting
'--------------------------
class Post {
- postId: int
- content: String
- attachments: List<String>
- timestamp: Date
- authorName: String
- likes: int
- comments: List<String>
+ create(content: String, attachments: List<String>): boolean
+ savePost(postId: int): boolean
}
RegisteredUser "1" -- "*" Post : creates
RegisteredUser "1" -- "1" Profile: has
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
RegisteredUser "1" -- "*" Report : submits
Moderator "1" -- "*" Report : reviews
'--------------------------
' Challenges and Participation
'--------------------------
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- type: WasteType
- participants: Map<int, double>
+ addParticipant(userId: int): boolean
+ removeParticipant(userId: int): boolean
+ getLoggedAmounts(userId, amount: double): void
+ updateLoggedAmounts(userId:int, loggedWaste: double): void
+ sendLoggedAmounts(userId:int, leaderboardId: int): double
+ deleteUserProgress(userId: int): int
+ rewardWinners(): void
}
RegisteredUser "1" -- "*" Challenge : participates
Challenge "1" -- "1" Leaderboard: communicates
class Profile {
- userName: String
- photo: Image
- biography: String
+ getPhoto():Image
+ setPhoto(photo:Image):boolean
+ getBiography(): String
+ setBiography(biography:String) :String
}
'--------------------------
' Leaderboard
'--------------------------
class Leaderboard {
- leaderboardId: int
- location: String
- type : WasteType
- usersList: List<int>
+ updateRanking(userId: String, leaderboardId: int): void
}
Leaderboard "1" -- "*" RegisteredUser : "ranks in"
'--------------------------
' Rewards
'--------------------------
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: int, points:int, rewardId: int): boolean
}
RegisteredUser "1" -- "*" Reward : redeems
'--------------------------
' Badges
'--------------------------
class Badge {
- badgeId: int
- description: String
- criteria: String
}
RegisteredUser "1" -- "*" Badge : earns
WasteGoal "1" -- "1" Badge : awards
'--------------------------
' Notifications
'--------------------------
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: int, content: String): boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser "1" -- "*" Notification : receives
Here is the full PlantUML Code:
@startuml
top to bottom direction
skinparam nodesep 20
skinparam ranksep 20
skinparam linetype ortho
skinparam top to bottom
'-----------------------------------
' Package: User Management
'-----------------------------------
package "User Management" {
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- points: int
- posts: List<Post>
- badges: List<Badge>
- goals: List<WasteGoal>
+ register(email: String, password: String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ editProfile(flag: String): void
+ reportPost(postId: int, reason: String): void
+ createWasteGoal(name: String, duration: double, type: WasteType, amount: double): void
+ logWaste(amount: double, type: WasteType): void
+ deleteWasteGoal(goalId: int): boolean
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ assignBadge(badge: Badge): void
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
}
RegisteredUser <|-- Moderator
}
'-----------------------------------
' Package: Post Management
'-----------------------------------
package "Post Management" {
class PostManager {
+ createPost(userId: String, content: String, attachments: List<String>): boolean
+ deletePost(userId: String, postId: int): boolean
+ likePost(userId: String, postId: int): void
+ commentOnPost(userId: String, postId: int, comment: Comment): void
+ savePost(userId: String, postId: int): boolean
}
class Post {
- postId: int
- content: String
- attachments: List<String>
- timestamp: Date
- authorName: String
- likes: int
- comments: List<Comment>
+ create(content: String, attachments: List<String>): boolean
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: String
+ editComment(newContent: String): boolean
}
class ForumFeed {
- feedId: int
- posts: List<Post>
+ addPost(post: Post): void
+ removePost(postId: int): boolean
+ getPosts(): List<Post>
}
' One ForumFeed contains many Posts.
ForumFeed "1" -- "*" Post : contains
' One Post has many Comments.
Post "1" -- "*" Comment : has
}
' Each RegisteredUser has one PostManager.
RegisteredUser "1" -- "1" PostManager : manages posts
'-----------------------------------
' Package: Waste Tracking
'-----------------------------------
package "Waste Tracking" {
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- progress: double
- reward: int
- ownerUserId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: WasteType
- goalId: int
- userId: String
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
enum WasteType {
Plastic
Organic
Paper
Metal
Glass
}
}
WasteLog "1" -- "*" WasteType : contains
'-----------------------------------
' Package: Reporting & Challenges
'-----------------------------------
package "Reporting & Challenges" {
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- type: WasteType
- participants: Map<String, double>
+ addParticipant(userId: String): boolean
+ removeParticipant(userId: String): boolean
+ getLoggedAmounts(userId: String, amount: double): void
+ updateLoggedAmounts(userId: String, loggedWaste: double): void
+ sendLoggedAmounts(userId: String, leaderboardId: int): double
+ deleteUserProgress(userId: String): int
+ rewardWinners(): void
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: WasteType
- usersList: List<String>
+ updateRanking(userId: String, leaderboardId: int): void
}
' Cross-package associations:
RegisteredUser "1" -- "*" Report : submits
Moderator "1" -- "*" Report : reviews
RegisteredUser "1" -- "*" Challenge : participates
Challenge "1" -- "1" Leaderboard : communicates
}
'-----------------------------------
' Package: Profile & Rewards
'-----------------------------------
package "Profile & Rewards" {
class Profile {
- userName: String
- photo: Image
- biography: String
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: String, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: String, content: String): boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser "1" -- "1" Profile : has
RegisteredUser "1" -- "*" Reward : redeems
RegisteredUser "1" -- "*" Badge : earns
WasteGoal "1" -- "1" Badge : awards
RegisteredUser "1" -- "*" Notification : receives
}
'-----------------------------------
' Cross-Package Associations
'-----------------------------------
RegisteredUser "1" -- "*" Post : creates
RegisteredUser "1" -- "*" WasteGoal : creates
RegisteredUser "1" -- "*" WasteLog : logs
RegisteredUser "1" -- "*" Report : submits
@enduml
Here is the full Mermaid Code:
classDiagram
%% ---------------------------
%% Package: User Management
%% ---------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- points: int
- posts: List~Post~
- badges: List~Badge~
- goals: List~WasteGoal~
+ register(email: String, password: String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ editProfile(flag: String): void
+ reportPost(postId: int, reason: String): void
+ createWasteGoal(name: String, duration: double, type: WasteType, amount: double): void
+ logWaste(amount: double, type: WasteType): void
+ deleteWasteGoal(goalId: int): boolean
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ assignBadge(badge: Badge): void
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
}
RegisteredUser <|-- Moderator
RegisteredUser --> PostManager : manages posts
%% ---------------------------
%% Package: Post Management
%% ---------------------------
class PostManager {
+ createPost(userId: String, content: String, attachments: List~String~): boolean
+ deletePost(userId: String, postId: int): boolean
+ likePost(userId: String, postId: int): void
+ commentOnPost(userId: String, postId: int, comment: Comment): void
+ savePost(userId: String, postId: int): boolean
}
class Post {
- postId: int
- content: String
- attachments: List~String~
- timestamp: Date
- authorName: String
- likes: int
- comments: List~Comment~
+ create(content: String, attachments: List~String~): boolean
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: String
+ editComment(newContent: String): boolean
}
class ForumFeed {
- feedId: int
- posts: List~Post~
+ addPost(post: Post): void
+ removePost(postId: int): boolean
+ getPosts(): List~Post~
}
ForumFeed "1" --> "*" Post : contains
Post "1" --> "*" Comment : has
%% ---------------------------
%% Package: Waste Tracking
%% ---------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- progress: double
- reward: int
- ownerUserId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: WasteType
- goalId: int
- userId: String
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
%% Note: Mermaid doesn't have enum support in classDiagram,
%% so WasteType can be documented externally as:
%% WasteType: Plastic, Organic, Paper, Metal, Glass
%% ---------------------------
%% Package: Reporting & Challenges
%% ---------------------------
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- type: WasteType
- participants: Map~String, double~
+ addParticipant(userId: String): boolean
+ removeParticipant(userId: String): boolean
+ getLoggedAmounts(userId: String, amount: double): void
+ updateLoggedAmounts(userId: String, loggedWaste: double): void
+ sendLoggedAmounts(userId: String, leaderboardId: int): double
+ deleteUserProgress(userId: String): int
+ rewardWinners(): void
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: WasteType
- usersList: List~String~
+ updateRanking(userId: String, leaderboardId: int): void
}
RegisteredUser --> "*" Report : submits
Moderator --> "*" Report : reviews
RegisteredUser --> "*" Challenge : participates
Challenge --> "1" Leaderboard : communicates
%% ---------------------------
%% Package: Profile & Rewards
%% ---------------------------
class Profile {
- userName: String
- photo: Image
- biography: String
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: String, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: String, content: String): boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser --> Profile : has
RegisteredUser --> "*" Reward : redeems
RegisteredUser --> "*" Badge : earns
WasteGoal --> Badge : awards
RegisteredUser --> "*" Notification : receives
%% ---------------------------
%% Cross-Package Associations
%% ---------------------------
RegisteredUser --> "*" Post : creates
RegisteredUser --> "*" WasteGoal : creates
RegisteredUser --> "*" WasteLog : logs
RegisteredUser --> "*" Report : submits
Enum Classes: (since mermaid does not support it ):
WasteType: Plastic, Organic, Paper, Metal, Glass
ChallengeStatus: Active, Requested, Ended
Here is the full Mermaid Diagram:
classDiagram
%% ---------------------------
%% Package: User Management
%% ---------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- totalXp: int
- posts: List~Post~
- badges: List~Badge~
- goals: List~WasteGoal~
+ register(email: String, password: String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ editProfile(flag: String): void
+ reportPost(postId: int, reason: String): void
+ createWasteGoal(name: String, duration: double, type: WasteType, amount: double): void
+ logWaste(amount: double, type: WasteType): void
+ deleteWasteGoal(goalId: int): boolean
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ assignBadge(badge: Badge): void
+ requestChallenge(description: String, userId: String):int
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
+ approveRequestedChallenge(challengeId: int): int
}
RegisteredUser <|-- Moderator
RegisteredUser --> PostManager : manages posts
%% ---------------------------
%% Package: Post Management
%% ---------------------------
class PostManager {
+ createPost(userId: String, content: String, attachments: List~String~): boolean
+ deletePost(userId: String, postId: int): boolean
+ likePost(userId: String, postId: int): void
+ commentOnPost(userId: String, postId: int, comment: Comment): void
+ savePost(userId: String, postId: int): boolean
}
class Post {
- postId: int
- content: String
- attachments: List~String~
- timestamp: Date
- authorName: String
- likes: int
- comments: List~Comment~
+ create(content: String, attachments: List~String~): boolean
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: String
+ editComment(newContent: String): boolean
}
class ForumFeed {
- feedId: int
- posts: List~Post~
+ addPost(post: Post): void
+ removePost(postId: int): boolean
+ getPosts(): List~Post~
}
ForumFeed "1" --> "*" Post : contains
Post "1" --> "*" Comment : has
%% ---------------------------
%% Package: Waste Tracking
%% ---------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- percentOfProgress: double
- reward: int
- ownerId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: WasteType
- goalId: int
- userId: String
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
%% Note: Mermaid doesn't have enum support in classDiagram,
%% so WasteType can be documented externally as:
%% WasteType: Plastic, Organic, Paper, Metal, Glass
%% so WasteType can be documented externally as:
%% ChallengeStatus: Active, Requested, Ended
%% ---------------------------
%% Package: Reporting & Challenges
%% ---------------------------
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- status: ChallengeStatus
- type: WasteType
- participants: Map~String, double~
+ addParticipant(userId: String): boolean
+ removeParticipant(userId: String): boolean
+ getLoggedAmounts(userId: String, amount: double): void
+ updateLoggedAmounts(userId: String, loggedWaste: double): void
+ sendLoggedAmounts(userId: String, leaderboardId: int): double
+ deleteUserProgress(userId: String): int
+ rewardWinners(): void
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: WasteType
- usersList: List~String~
+ updateRanking(userId: String, leaderboardId: int): void
}
RegisteredUser --> "*" Report : submits
Moderator --> "*" Report : reviews
Moderator --> "*" Challenge : approves
RegisteredUser --> "*" Challenge : participates
RegisteredUser --> "*" Challenge : requests
Challenge --> "1" Leaderboard : communicates
%% ---------------------------
%% Package: Profile & Rewards
%% ---------------------------
class Profile {
- userName: String
- photo: Image
- biography: String
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: String, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: String, content: String): boolean
+ markAsRead(notificationId: int): void
}
RegisteredUser --> Profile : has
RegisteredUser --> "*" Reward : redeems
RegisteredUser --> "*" Badge : earns
WasteGoal --> Badge : awards
RegisteredUser --> "*" Notification : receives
%% ---------------------------
%% Cross-Package Associations
%% ---------------------------
RegisteredUser --> "*" Post : creates
RegisteredUser --> "*" WasteGoal : creates
RegisteredUser --> "*" WasteLog : logs
RegisteredUser --> "*" Report : submits
Enum Classes:
WasteType: Plastic, Organic, Paper, Metal, Glass
ChallengeStatus: Active, Requested, Ended
Here is the full Mermaid Diagram:
classDiagram
%% ---------------------------
%% Package: User Management
%% ---------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- totalXp: int
- posts: List~Post~
- badges: List~Badge~
- goals: List~WasteGoal~
+ register(email: String, password: String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ editProfile(flag: String): void
+ reportPost(postId: int, reason: String): void
+ createWasteGoal(name: String, duration: double, type: WasteType, amount: double): void
+ logWaste(amount: double, type: WasteType): void
+ deleteWasteGoal(goalId: int): boolean
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ assignBadge(badge: Badge): void
+ requestChallenge(description: String, userId: String):int
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
+ approveRequestedChallenge(challengeId: int): int
}
RegisteredUser <|-- Moderator
RegisteredUser --> PostManager : manages posts
%% ---------------------------
%% Package: Post Management
%% ---------------------------
class PostManager {
+ createPost(userId: String, content: String, attachments: List~String~): boolean
+ deletePost(userId: String, postId: int): boolean
+ likePost(userId: String, postId: int): void
+ commentOnPost(userId: String, postId: int, comment: Comment): void
+ savePost(userId: String, postId: int): boolean
}
class Post {
- postId: int
- content: String
- attachments: List~String~
- timestamp: Date
- authorName: String
- likes: int
- comments: List~Comment~
+ create(content: String, attachments: List~String~): boolean
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: String
+ editComment(newContent: String): boolean
}
class ForumFeed {
- feedId: int
- posts: List~Post~
+ addPost(post: Post): void
+ removePost(postId: int): boolean
+ getPosts(): List~Post~
}
ForumFeed "1" --> "*" Post : contains
Post "1" --> "*" Comment : has
%% ---------------------------
%% Package: Waste Tracking
%% ---------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: WasteType
- percentOfProgress: double
- reward: int
- ownerId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int)
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: WasteType
- goalId: int
- userId: String
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
%% Note: Mermaid doesn't have enum support in classDiagram,
%% so WasteType can be documented externally as:
%% WasteType: Plastic, Organic, Paper, Metal, Glass
%% so WasteType can be documented externally as:
%% ChallengeStatus: Active, Requested, Ended
%% ---------------------------
%% Package: Reporting & Challenges
%% ---------------------------
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- status: ChallengeStatus
- type: WasteType
- participants: Map~String, double~
+ addParticipant(userId: String): boolean
+ removeParticipant(userId: String): boolean
+ getLoggedAmounts(userId: String, amount: double): void
+ updateLoggedAmounts(userId: String, loggedWaste: double): void
+ sendLoggedAmounts(userId: String, leaderboardId: int): double
+ deleteUserProgress(userId: String): int
+ rewardWinners(): void
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: WasteType
- usersList: List~String~
+ updateRanking(userId: String, leaderboardId: int): void
}
RegisteredUser --> "*" Report : submits
Moderator --> "*" Report : reviews
Moderator --> "*" Challenge : approves
RegisteredUser --> "*" Challenge : participates
RegisteredUser --> "*" Challenge : requests
Challenge --> "1" Leaderboard : communicates
%% ---------------------------
%% Package: Profile & Rewards
%% ---------------------------
class Profile {
- userName: String
- photo: Image
- biography: String
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: String, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: String, content: String): boolean
+ markAsRead(notificationId: int): void
}
class NonRegisteredUser {
+ viewForum(): void
+ viewProfiles(): void
}
NonRegisteredUser --> "*" Profile : views
RegisteredUser --> Profile : has
RegisteredUser --> "*" Reward : redeems
RegisteredUser --> "*" Badge : earns
WasteGoal --> Badge : awards
RegisteredUser --> "*" Notification : receives
%% ---------------------------
%% Cross-Package Associations
%% ---------------------------
RegisteredUser --> "*" Post : creates
RegisteredUser --> "*" WasteGoal : creates
RegisteredUser --> "*" WasteLog : logs
RegisteredUser --> "*" Report : submits
NonRegisteredUser --> "*" ForumFeed : views
classDiagram
%% ---------------------------
%% Package: User Management
%% ---------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: String
- totalXp: int
- posts: List~Post~
- badges: List~Badge~
- goals: List~WasteGoal~
+ register(email: String, password: String): boolean
+ login(email: String, password: String): boolean
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ createWasteGoal(name: String, duration: double, type: String, amount: double): void
+ logWaste(amount: double, type: String): void
+ deleteWasteGoal(goalId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
+ approveRequestedChallenge(challengeId: int): int
}
RegisteredUser <|-- Moderator
RegisteredUser --> ForumFeed : accesses
%% ---------------------------
%% Package: Post Management
%% ---------------------------
class Post {
- postId: int
- content: String
- attachments: List~String~
- timestamp: Date
- authorName: String
- likes: int
- comments: List~Comment~
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: String
+ editComment(newContent: String): boolean
}
Post "1" --> "*" Comment : has
%% ---------------------------
%% Package: Forum Feed
%% ---------------------------
class ForumFeed {
- feedId: int
- posts: List~Post~
+ getPosts(): List~Post~
+ createPost(content: String, attachments: List~String~): boolean
+ selectPost(postId: int): Post
+ deletePost(userId: String, postId: int): boolean
+ likePost(userId: String, postId: int): void
+ commentOnPost(userId: String, postId: int, comment: Comment): void
+ savePost(userId: String, postId: int): boolean
+ reportPost(postId: int, reason: String): void
}
ForumFeed "1" --> "*" Post : contains
%% ---------------------------
%% Package: Waste Tracking
%% ---------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- percentOfProgress: double
- reward: int
- ownerId: String
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int): void
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- goalId: int
- userId: String
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
%% ---------------------------
%% Package: Reporting & Challenges
%% ---------------------------
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- status: String %% Allowed values: Active, Requested, Ended
- participants: Map~String, double~
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ requestChallenge(description: String, userId: String): int
+ getLoggedAmounts(userId: String, amount: double): void
+ updateLoggedAmounts(userId: String, loggedWaste: double): void
+ sendLoggedAmounts(userId: String, leaderboardId: int): double
+ deleteUserProgress(userId: String): int
+ rewardWinners(): void
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- usersList: List~String~
+ updateRanking(userId: String, leaderboardId: int): void
}
RegisteredUser --> "*" Report : submits
Moderator --> "*" Report : reviews
Moderator --> "*" Challenge : approves
RegisteredUser --> "*" Challenge : participates
RegisteredUser --> "*" Challenge : requests
Challenge --> "1" Leaderboard : communicates
%% ---------------------------
%% Package: Profile & Rewards
%% ---------------------------
class Profile {
- userName: String
- photo: Image
- biography: String
- displayedBadges: List~Badge~
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
+ editProfile(flag: String): void
+ saveBadges(badges: List~Badge~): List~Badge~
+ selectBadges(badges: List~Badge~): List~Badge~
+ updateDispBadges(badges: List~Badge~): void
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: String, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: String, content: String): boolean
+ markAsRead(notificationId: int): void
}
class User{
+ viewForum(): void
+ viewProfiles(): void
+ passwordAccuracy(password: String): boolean
}
User--> "*" Profile : views
RegisteredUser --> Profile : has
RegisteredUser --> "*" Reward : redeems
RegisteredUser --> "*" Badge : earns
WasteGoal --> Badge : awards
RegisteredUser --> "*" Notification : receives
%% ---------------------------
%% Cross-Package Associations
%% ---------------------------
RegisteredUser --> "*" WasteGoal : creates
RegisteredUser --> "*" WasteLog : logs
RegisteredUser --> "*" Report : submits
User--> "*" ForumFeed : views
classDiagram
%% ---------------------------
%% Package: User Management
%% ---------------------------
class RegisteredUser {
- email: String
- username: String
- password: String
- userId: int
- totalXp: int
- posts: List~Post~
- badges: List~Badge~
- goals: List~WasteGoal~
+ login(email: String, password: String): boolean
+ viewGoals(userId): List~WasteGoal~
+ resetPassword(email: String): void
+ deleteAccount(): boolean
+ logout(): void
+ createWasteGoal(name: String, duration: double, type: String, amount: double): void
+ logWaste(amount: double, type: String): void
+ deleteWasteGoal(goalId: int): boolean
+ redeemReward(rewardId: int): boolean
+ completeWasteGoal(goalId: int): Badge
+ viewChallenges(): List~Challenge~
+ getChallenges(): List~Challenge~
+ selectChallenge(challengeId: int): Challenge
+ getChallenge(challengeId: int): Challenge
}
class Moderator {
+ moderatePost(postId: int): void
+ reviewReports(reportId: int): void
+ approveRequestedChallenge(challengeId: int): int
}
RegisteredUser <|-- Moderator
RegisteredUser --> ForumFeed : accesses
%% ---------------------------
%% Package: Post Management
%% ---------------------------
class Post {
- postId: int
- content: String
- attachments: List~String~
- timestamp: Date
- authorName: String
- likes: int
- comments: List~Comment~
}
class Comment {
- commentId: int
- content: String
- timestamp: Date
- authorUserId: int
+ editComment(newContent: String): boolean
}
Post "1" --> "*" Comment : has
%% ---------------------------
%% Package: Forum Feed
%% ---------------------------
class ForumFeed {
- feedId: int
- posts: List~Post~
+ getPosts(): List~Post~
+ createPost(content: String, attachments: List~String~): boolean
+ selectPost(postId: int): Post
+ deletePost(userId: int, postId: int): boolean
+ likePost(userId: int, postId: int): void
+ commentOnPost(userId: int, postId: int, comment: Comment): void
+ savePost(userId: int, postId: int): boolean
+ reportPost(postId: int, reason: String): void
+ search(prompt: String): String
}
ForumFeed "1" --> "*" Post : contains
%% ---------------------------
%% Package: Waste Tracking
%% ---------------------------
class WasteGoal {
- goalId: int
- date: Date
- unit: String
- wasteType: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- percentOfProgress: double
- reward: int
- ownerId: int
- duration: double
- completed: boolean
+ visualize(): Image
+ returnPoints(pointAmount: int): void
+ checkCompletion(): boolean
}
class WasteLog {
- logId: int
- amount: double
- wasteType: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- goalId: int
- userId: int
+ updateChallengeProgress(challengeId: int, amount: double): void
+ updateGoalProgress(): void
}
%% ---------------------------
%% Package: Reporting & Challenges
%% ---------------------------
class Report {
- reportId: int
- reason: String
- reportDate: Date
- status: String
+ resolve(reportId: int): boolean
}
class Challenge {
- challengeId: int
- title: String
- description: String
- startDate: Date
- endDate: Date
- status: String %% Allowed values: Active, Requested, Ended
- participants: Map~int, double~
+ joinChallenge(challengeId: int): boolean
+ leaveChallenge(challengeId: int): boolean
+ requestChallenge(description: String, userId: int): int
+ getLoggedAmounts(userId: int, amount: double): void
+ updateLoggedAmounts(userId: int, loggedWaste: double): void
+ sendLoggedAmounts(userId: int, leaderboardId: int): double
+ deleteUserProgress(userId: int): int
+ rewardWinners(): void
+ viewLeaderboard(leaderboardId: int): Leaderboard
+ getLeaderboard(leaderboardId: int): Leaderboard
}
class Leaderboard {
- leaderboardId: int
- location: String
- type: String %% Allowed values: Plastic, Organic, Paper, Metal, Glass
- usersList: List~int~
+ updateRanking(userId: int, leaderboardId: int): void
}
RegisteredUser --> "*" Report : submits
Moderator --> "*" Report : reviews
Moderator --> "*" Challenge : approves
RegisteredUser --> "*" Challenge : participates
RegisteredUser --> "*" Challenge : requests
Challenge --> "1" Leaderboard : communicates
%% ---------------------------
%% Package: Profile & Rewards
%% ---------------------------
class Profile {
- userName: String
- photo: Image
- biography: String
- displayedBadges: List~Badge~
+ getPhoto(): Image
+ setPhoto(photo: Image): boolean
+ getBiography(): String
+ setBiography(biography: String): String
+ editProfile(flag: String): void
+ saveBadges(badges: List~Badge~): List~Badge~
+ selectBadges(badges: List~Badge~): List~Badge~
+ updateDispBadges(badges: List~Badge~): void
}
class Reward {
- rewardId: int
- description: String
- pointsRequired: int
+ redeem(userId: int, points: int, rewardId: int): boolean
}
class Badge {
- badgeId: int
- description: String
- criteria: String
}
class Notification {
- notificationId: int
- message: String
- timestamp: Date
- read: Boolean
+ sendNotification(notificationId: int, userId: int, content: String): boolean
+ markAsRead(notificationId: int): void
}
class User{
+ register(email: String, password: String): boolean
+ viewForum(): void
+ viewProfiles(): void
+ passwordAccuracy(password: String): boolean
}
User --> "*" Profile : views
RegisteredUser --> Profile : has
RegisteredUser --> "*" Reward : redeems
RegisteredUser --> "*" Badge : earns
WasteGoal --> Badge : awards
RegisteredUser --> "*" Notification : receives
%% ---------------------------
%% Cross-Package Associations
%% ---------------------------
RegisteredUser --> "*" WasteGoal : creates
RegisteredUser --> "*" WasteLog : logs
RegisteredUser --> "*" Report : submits
User --> "*" ForumFeed : views