ClassUMLdiagramdraft - bounswe/bounswe2025group5 GitHub Wiki

Draft 1 by Abdülkerim Kasar

image

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

Draft 2 by Cengiz Bilal Sarı

ZLPThzis37tthn3oKdStUTYhKGpzw51SuBOBiXPxvhLOHwijUHATeDZstolJIcBQJPm2ZItwy4Wy9CNxEX1uwfewUx6v-YzxeRu4z0giLc_AqdMMrBiQGi1mqotBoXwbTbYPGEXHCys_cL8g_jyeRC3KXVgJlB4LMxe8iD2WCBQHvEYydY4VfUa8WN27kYl9EFl1GUJMhdkkaJzNqV35

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

Draft 3 by Ege Tanriverdi

class_diagram_draft_png
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

Draft 4 by Serdar Bahar

class_diagram

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

Draft 5 by Abdülkerim Kasar

image

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


Loading

Draft 6 by Cengiz Bilal Sarı

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


Loading

Draft 7 by Osman Yusuf Tosun

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

Loading

Draft 8 by Abdülkerim Kasar and Abdurrahman Arslan

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











Loading

Draft 9 After Feedbacks - Ahmet Mert Balcı

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

Loading
⚠️ **GitHub.com Fallback** ⚠️