-
Notifications
You must be signed in to change notification settings - Fork 0
Sequence Diagrams
hasancankeles edited this page Mar 21, 2025
·
11 revisions
sequenceDiagram
actor Client
Client->>Object1: request(data)
activate Object1
Object1->>Object2: processData(data)
activate Object2
Object2->>Database: query(data)
activate Database
Database-->>Object2: result
deactivate Database
Object2-->>Object1: processedResult
deactivate Object2
alt success
Object1-->>Client: response(result)
else error
Object1-->>Client: errorResponse(error)
deactivate Object1
end
sequenceDiagram
actor Client as Can
Client->>RecipeCreationPage: request(recipeData)
activate RecipeCreationPage
RecipeCreationPage->>FoodDatabase: query(nutritionalInfo)
activate FoodDatabase
FoodDatabase-->>RecipeCreationPage: result(nutritionalInfo)
deactivate FoodDatabase
RecipeCreationPage->>RecipeCreationPage: process(recipeData, nutritionalInfo)
RecipeCreationPage->>RecipeForum: post(recipe with cost breakdown, instructions, tags)
activate RecipeForum
RecipeForum-->>RecipeCreationPage: confirmation(posted)
deactivate RecipeForum
alt success
RecipeCreationPage-->>Client: response(recipe posted confirmation)
else error
RecipeCreationPage-->>Client: errorResponse(error)
deactivate RecipeCreationPage
end
sequenceDiagram
actor Client as Mehmet
Client->>InventoryPage: request(view inventory)
activate InventoryPage
InventoryPage->>InventorySystem: fetch inventory list
activate InventorySystem
InventorySystem-->>InventoryPage: current inventory list
deactivate InventorySystem
InventoryPage-->>Client: response(inventory list)
Client->>InventoryPage: request(add new item with details)
activate InventoryPage
InventoryPage->>FoodDatabase: query nutritional info (if applicable)
activate FoodDatabase
FoodDatabase-->>InventoryPage: nutritional information
deactivate FoodDatabase
InventoryPage->>InventorySystem: add new item (name, price, quantity, tags, image)
activate InventorySystem
InventorySystem-->>InventoryPage: confirmation(new item added)
deactivate InventorySystem
Client->>InventoryPage: request(update item (price & quantity))
activate InventoryPage
InventoryPage->>InventorySystem: update item details
activate InventorySystem
InventorySystem-->>InventoryPage: confirmation(item updated)
deactivate InventorySystem
Client->>InventoryPage: request(remove item)
activate InventoryPage
InventoryPage->>InventorySystem: remove item
activate InventorySystem
InventorySystem-->>InventoryPage: confirmation(item removed)
deactivate InventorySystem
InventoryPage->>PublicListing: update public store listing
activate PublicListing
PublicListing-->>InventoryPage: confirmation(listing updated)
deactivate PublicListing
alt success
InventoryPage-->>Client: response(operations successful)
else error
InventoryPage-->>Client: errorResponse(error)
deactivate InventoryPage
end
sequenceDiagram
actor Cem
participant MealPlan
Cem->>MealPlan: MealPlan("Vegan Meal Plan", Weekly)
activate MealPlan
MealPlan-->>Cem:
deactivate MealPlan
Cem->>MealPlan: addDietaryOption(Vegan)
activate MealPlan
MealPlan-->>Cem:
deactivate MealPlan
Cem->>MealPlan: generateMealPlan()
activate MealPlan
MealPlan-->>Cem:
deactivate MealPlan
Cem->>MealPlan: saveToCollection()
activate MealPlan
MealPlan->>Database: writeToCollection
activate Database
Database-->>MealPlan: status
deactivate Database
alt Success (status == 200)
MealPlan-->>Cem: Success (Plan Saved)
else Error
MealPlan-->>Cem: Error (Failed to Save Plan)
deactivate MealPlan
end
Cem->>MealPlan: shareAsPost()
activate MealPlan
MealPlan->>Database: readFromCollections()
activate Database
Database-->>MealPlan: (status, MealPlan)
deactivate Database
alt Success (status == 200)
MealPlan-->>Cem: MealPlan
else Error
MealPlan-->>Cem: Error (Failed to Retrieve Plan)
deactivate MealPlan
end
sequenceDiagram
actor Kadir
participant LoginPage
participant AuthorizationAPI
participant Database
Kadir->>LoginPage: requestPasswordReset(username)
activate LoginPage
LoginPage->>AuthorizationAPI: validateResetRequest(username)
activate AuthorizationAPI
AuthorizationAPI->>Database: getUserEmail(username)
activate Database
Database-->>AuthorizationAPI: userEmail
deactivate Database
AuthorizationAPI-->>LoginPage: resetToken
deactivate AuthorizationAPI
alt status == 200 (email found)
LoginPage-->>Kadir: resetEmailSent
Kadir->>LoginPage: submitNewPassword(resetToken, newPassword)
LoginPage->>AuthorizationAPI: validateToken(resetToken)
activate AuthorizationAPI
AuthorizationAPI->>Database: updatePassword(username, newPasswordHash)
activate Database
Database-->>AuthorizationAPI: passwordUpdateResponse
deactivate Database
AuthorizationAPI-->>LoginPage: passwordUpdateResponse
deactivate AuthorizationAPI
alt status == 200 (password update successful)
LoginPage-->>Kadir: passwordResetSuccess
else status != 200 (password update failed)
LoginPage-->>Kadir: passwordResetError
end
else status != 200 (email not found)
LoginPage-->>Kadir: userNotFound
end
deactivate LoginPage
sequenceDiagram
actor Client
Client->>FoodCatalog: searchByName("Quinoa")
activate FoodCatalog
FoodCatalog->>Database: query("Quinoa")
activate Database
Database-->>FoodCatalog: listOfFoodEntries
deactivate Database
FoodCatalog-->>Client: return FoodEntry details
deactivate FoodCatalog
alt Sorting Action
Client->>Client: sort list by proteinContent
end
sequenceDiagram
actor Client
%% Step 1: Search for "Teff" and get no results
Client->>FoodCatalog: searchByName("Teff")
activate FoodCatalog
FoodCatalog->>Database: query("Teff")
activate Database
Database-->>FoodCatalog: noResults
deactivate Database
FoodCatalog-->>Client: emptyResult
deactivate FoodCatalog
%% Step 2: Create new FoodEntry submission for "Teff"
Client->>FoodEntry: new FoodEntry("Teff", "Grain", servingSize, calories, protein, fat, carbs)
activate FoodEntry
FoodEntry->>FoodEntry: calculateNutritionScore()
deactivate FoodEntry
%% Step 3: Submit the new food item to the catalog
Client->>FoodCatalog: addFoodItem(newFoodEntry)
activate FoodCatalog
FoodCatalog->>Database: insert(newFoodEntry, status="Pending Review")
activate Database
Database-->>FoodCatalog: insertionSuccess
deactivate Database
FoodCatalog-->>Client: submissionReceived
deactivate FoodCatalog
%% Step 4: Moderator reviews and approves the submission
Moderator->>FoodCatalog: approveFoodSubmission(newFoodEntry)
activate FoodCatalog
FoodCatalog->>ModerationHistory: logApproval(newFoodEntry)
activate ModerationHistory
ModerationHistory-->>FoodCatalog: logCreated
deactivate ModerationHistory
FoodCatalog->>Database: updateStatus(newFoodEntry, "Approved")
activate Database
Database-->>FoodCatalog: updateSuccess
deactivate Database
FoodCatalog-->>Moderator: approvalConfirmed
deactivate FoodCatalog
%% Step 5: Notification to the client
alt Notification Success
FoodCatalog-->>Client: notify("Teff is now available")
else Error
FoodCatalog-->>Client: errorResponse("Approval Failed")
end
sequenceDiagram
actor Sam
participant MealPlanner
participant BudgetOptimizer
participant Database
Sam->>MealPlanner: openMealPlanner()
activate MealPlanner
MealPlanner->>Sam: selectDietaryPreference("Vegan")
Sam->>MealPlanner: setBudget(optional)
MealPlanner->>BudgetOptimizer: generateMealPlan(diet="Vegan", budget)
activate BudgetOptimizer
BudgetOptimizer->>Database: fetchAffordableIngredients(diet="Vegan")
activate Database
Database-->>BudgetOptimizer: ingredientList
deactivate Database
BudgetOptimizer-->>MealPlanner: optimizedMealPlan
deactivate BudgetOptimizer
MealPlanner-->>Sam: displayMealPlan
Sam->>MealPlanner: saveMealPlan()
MealPlanner->>Database: storeMealPlan(userID, mealPlan)
alt success
MealPlanner-->>Sam: mealPlanSavedSuccess
else error
MealPlanner-->>Sam: mealPlanSaveError
end
Sam->>MealPlanner: shareMealPlan()
MealPlanner->>Database: storeForumPost(mealPlan, userID)
alt success
MealPlanner-->>Sam: mealPlanSharedSuccess
else error
MealPlanner-->>Sam: mealPlanShareError
end
deactivate MealPlanner
sequenceDiagram
actor Lisa
participant Store
participant MarketListing
participant Database
Lisa->>Store: createStore("Lisa's Fresh Market - East Side", "150 Greenway Ave", "Bringing fresh...", "store_image.jpg")
activate Store
Store->>Database: saveStoreData(storeData)
activate Database
Database-->>Store: status
deactivate Database
alt Success (status == 200)
Store-->>Lisa: Success (Store Created)
else Error
Store-->>Lisa: Error (Failed to Create Store)
end
deactivate Store
Lisa->>Store: getListings(storeID)
activate Store
Store->>Database: fetchListingsData(storeID)
activate Database
Database-->>Store: (status, listingsData)
deactivate Database
Store-->>Lisa: List~MarketListing~
deactivate Store
loop For each selected product
Lisa->>MarketListing: updateStock(reducedQuantity)
activate MarketListing
MarketListing->>Database: updateStockInDatabase(listingID, reducedQuantity)
activate Database
Database-->>MarketListing: status
deactivate Database
MarketListing-->>Lisa:
deactivate MarketListing
Lisa->>Store: addListing(newListing)
activate Store
Store->>Database: saveListingData(newListing)
activate Database
Database-->>Store: status
deactivate Database
Store-->>Lisa:
deactivate Store
Lisa->>Store: removeListing(originalListingID)
activate Store
Store->>Database: deleteListingData(originalListingID)
activate Database
Database-->>Store: status
deactivate Database
alt Success (status == 200)
Store-->>Lisa: Success (Item Transferred)
else Error
Store-->>Lisa: Error (Failed to Transfer Item)
end
deactivate Store
end
Lisa->>MarketListing: updatePrice(newPrice)
activate MarketListing
MarketListing->>Database: updateListingData(listingID, updatedPrice)
activate Database
Database-->>MarketListing: status
deactivate Database
MarketListing-->>Lisa:
deactivate MarketListing
Lisa->>MarketListing: updateImage(newImageURL)
activate MarketListing
MarketListing->>Database: updateListingData(listingID, updatedImage)
activate Database
Database-->>MarketListing: status
deactivate Database
MarketListing-->>Lisa:
deactivate MarketListing
Lisa->>Database: createPost("Grand Opening Announcement")
activate Database
Database-->>Lisa: status
alt Success (status == 200)
Database-->>Lisa: Success (Post Created)
else Error
Database-->>Lisa: Error (Failed to Create Post)
end
deactivate Database
sequenceDiagram
actor Sarah
participant LoginPage
participant AuthorizationAPI
participant Database
participant ProfileManager
%% User logs in
Sarah->>LoginPage: login(username, password)
activate LoginPage
LoginPage->>AuthorizationAPI: authenticateUser(username, password)
activate AuthorizationAPI
AuthorizationAPI->>Database: verifyCredentials(username, password)
activate Database
Database-->>AuthorizationAPI: returnLoginStatus(success/failure)
deactivate Database
AuthorizationAPI-->>LoginPage: returnAuthStatus(success/failure)
deactivate AuthorizationAPI
alt status == success
LoginPage-->>Sarah: loginSuccess()
Sarah->>ProfileManager: redirectToProfileSettings()
else status == failure
LoginPage-->>Sarah: loginErrorMessage()
end
deactivate LoginPage
%% User updates contact information
Sarah->>ProfileManager: updateContactInfo(sharedEmail, sharedPhone)
activate ProfileManager
ProfileManager->>Database: saveContactInfo(userId, sharedEmail, sharedPhone)
activate Database
Database-->>ProfileManager: returnUpdateStatus(success)
deactivate Database
ProfileManager-->>Sarah: confirmationMessage()
deactivate ProfileManager
%% User updates dietary preferences
Sarah->>ProfileManager: selectAllergen("Gluten")
activate ProfileManager
ProfileManager->>Database: addPredefinedAllergen(userId, "Gluten")
activate Database
Database-->>ProfileManager: returnAllergenUpdateStatus(success)
deactivate Database
ProfileManager-->>Sarah: confirmationMessage()
deactivate ProfileManager
Sarah->>ProfileManager: addCustomAllergen("Coconut Oil")
activate ProfileManager
ProfileManager->>Database: saveCustomAllergen(userId, "Coconut Oil")
activate Database
Database-->>ProfileManager: returnCustomAllergenStatus(success)
deactivate Database
ProfileManager-->>Sarah: confirmationMessage()
deactivate ProfileManager
%% User selects a recipe
Sarah->>ProfileManager: getPersonalRecipes(userId)
activate ProfileManager
ProfileManager->>Database: fetchPersonalRecipes(userId)
activate Database
Database-->>ProfileManager: returnRecipes(recipeList)
deactivate Database
ProfileManager-->>Sarah: displayPersonalRecipes()
deactivate ProfileManager
Sarah->>ProfileManager: getLikedRecipes(userId)
activate ProfileManager
ProfileManager->>Database: fetchLikedRecipes(userId)
activate Database
Database-->>ProfileManager: returnLikedRecipes(likedRecipeList)
deactivate Database
ProfileManager-->>Sarah: displayLikedRecipes()
deactivate ProfileManager
Sarah->>ProfileManager: selectRecipe(recipeId)
activate ProfileManager
ProfileManager->>Database: getRecipeDetails(recipeId)
activate Database
Database-->>ProfileManager: returnRecipeDetails(recipe)
deactivate Database
ProfileManager-->>Sarah: displayRecipeDetails()
deactivate ProfileManager
%% User updates the shopping list
Sarah->>ProfileManager: addRecipeToShoppingList(recipeId)
activate ProfileManager
ProfileManager->>Database: updateShoppingList(userId, recipeIngredients)
activate Database
Database-->>ProfileManager: returnShoppingListUpdateStatus(success)
deactivate Database
ProfileManager-->>Sarah: confirmationMessage()
deactivate ProfileManager
Sarah->>ProfileManager: getShoppingList(userId)
activate ProfileManager
ProfileManager->>Database: fetchShoppingList(userId)
activate Database
Database-->>ProfileManager: returnShoppingList(shoppingList)
deactivate Database
ProfileManager-->>Sarah: displayShoppingList()
deactivate ProfileManager

-
Use Cases:
- Template
- Scenario 1: Community Sharing
- Scenario 2: For a Dietitian
- Scenario 3: Maintaining a Personal Inventory (as a Producer)
- Scenario 4: Proposing a Product and Adding a Recipe to Weekly Meal Plan
- Scenario 5: Creating a Meal Plan
- Scenario 6: Resetting Password
- Scenario 7: Moderator Actions
- Scenario 8: Searching for and Proposing a New Food Item
- Scenario 9: Budget-Conscious Grocery Shopping
- Scenario 10: Creating a New Store