"Updating Profile Picture" Sequence
sequenceDiagram
actor Registered User
participant Profile as Profile
participant ProfileController as Backend Controller
participant Database
Registered User->>Profile: setPhoto(photo)
activate Profile
Profile->>ProfileController: updateProfilePhoto(userId, photo)
activate ProfileController
ProfileController->>Database: update(userId, photoData)
activate Database
Database-->>ProfileController: response (Success/Failure)
deactivate Database
alt response is Success
ProfileController-->>Profile: "Your photo is changed !!"
else response is Failure
ProfileController-->>Profile: "Error: Photo does not meet requirements"
end
deactivate ProfileController
Profile-->>Registered User: Displays final message and updated photo
deactivate Profile
"Register" Sequence

"Delete Account" Sequence
sequenceDiagram
actor Registered User
participant Controller as Registered User
participant Database
Registered User->>Controller: deleteAccount(userId, password)
activate Controller
Controller->>Database: deleteByName(userId, password)
activate Database
Database-->>Controller: Deletion Status (Success/Failure)
deactivate Database
alt Deletion Status is Success
Controller-->>Registered User: Success
else Deletion Status is Failure
Controller-->>Registered User: Failure
end
deactivate Controller
"Follow" Sequence
sequenceDiagram
actor User as Registered User
participant App as Registered User
participant FollowController as Backend Controller
participant Database
User->>App: Clicks "Follow" button
activate App
App->>FollowController: createFollow(followerId, followedId)
activate FollowController
FollowController->>Database: Insert Follow Relationship
activate Database
Database-->>FollowController: Confirmation (Success/Failure)
deactivate Database
FollowController-->>App: Status (Success/Failure)
deactivate FollowController
alt Success
App-->>User: Update button to "Unfollow"
else Failure
App-->>User: Show error message
end
deactivate App
"Unfollow" Sequence
sequenceDiagram
actor User as Registered User
participant App as Registered User
participant FollowController as Backend Controller
participant Database
User->>App: Clicks "Unfollow" button
activate App
App->>FollowController: deleteFollow(followerId, followedId)
activate FollowController
FollowController->>Database: Delete Follow Relationship
activate Database
Database-->>FollowController: Confirmation (Success/Failure)
deactivate Database
FollowController-->>App: Status (Success/Failure)
deactivate FollowController
alt Success
App-->>User: Update button to "Follow"
else Failure
App-->>User: Show error message
end
deactivate App
"Moderate and Approve Challenge" Sequence
sequenceDiagram
actor Moderator
participant ModeratorClass as Moderator
participant Database
Moderator->>ModeratorClass: approveRequestedChallenge(challengeId)
activate ModeratorClass
ModeratorClass->>Database: activate(challengeId)
activate Database
Database-->>ModeratorClass: status
deactivate Database
alt status = 2
ModeratorClass-->>Moderator: Already active challenge
else status = 0
ModeratorClass-->>Moderator: No requested challenge
else status = 1
ModeratorClass-->>Moderator: Activated
end
deactivate ModeratorClass
"Join a Challenge" Sequence
sequenceDiagram
actor User as Registered User
participant App as Registered User
participant Challenge as Challenge
participant Database
User ->> App: Request to Join Challenge (challengeId)
App ->> Database: Check if Challenge Exists (challengeId)
Database -->> App: Challenge Exists? (Yes/No)
alt Challenge Not Found
App -->> User: Error: Challenge Not Found
else Challenge Exists
App ->> Challenge: addParticipant(userId)
Challenge ->> Database: Store Participant Entry
Database -->> Challenge: Confirmation
Challenge -->> App: Success
App -->> User: Successfully Joined Challenge
end
"Log a Challenge" Sequence
sequenceDiagram
actor User as Registered User
participant App as Registered User
participant Challenge
participant Database
User ->> App: Request to Log Waste (challengeId, amount, wasteType)
App ->> Database: Check if User is Participant (userId, challengeId)
Database -->> App: Is Participant? (Yes/No)
alt User is not a participant
App -->> User: Error: You must join the challenge to log waste
else User is a participant
App ->> Challenge: updateProgress(userId, amount, wasteType)
activate Challenge
Challenge ->> Database: Store Progress Entry
activate Database
Database -->> Challenge: Confirmation
deactivate Database
Challenge -->> App: Success
deactivate Challenge
App -->> User: Successfully Logged Waste
end
"Create Post" Sequence

"Set Waste Goal" Sequence
sequenceDiagram
actor U as User
participant RU as RegisteredUser
participant WG as WasteGoal
participant DB as Database
%% Create Goal Section
U->>RU: createWasteGoal(name, duration, type, amount)
activate RU
RU->>WG: new WasteGoal(...)
activate WG
WG-->>RU: instance
deactivate WG
RU->>DB: save(wasteGoal)
activate DB
DB-->>RU: response (Success/Failure)
deactivate DB
alt response is Success
RU-->>U: "Goal created successfully"
else response is Failure
RU-->>U: "Error: Could not save goal"
end
deactivate RU
"Semantic Search" sequence
sequenceDiagram
actor Registered User
participant ForumFeed as ForumFeed
participant Wikidata
Registered User->>ForumFeed: search(prompt)
activate ForumFeed
ForumFeed->>Wikidata: semanticSearch(prompt)
activate Wikidata
Wikidata-->>ForumFeed: response
deactivate Wikidata
alt response=no result
ForumFeed-->>Registered User: "No result found"
else response=result
ForumFeed-->>Registered User: results
end
deactivate ForumFeed
"Select Badges to Display" Sequence
"View Leaderboard" Sequence

"Log Waste" Sequence by Osman Yusuf Tosun
