-
Notifications
You must be signed in to change notification settings - Fork 0
Sequence Diagrams
nuriba edited this page Apr 6, 2025
·
12 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 Elif
participant FoodCatalog as FoodCatalog
participant FoodEntry as FoodEntry
participant Moderator as Moderator
participant Recipe as Recipe
participant RecipeList as RecipeList
participant Forum as Forum
participant Post as Post
participant MealPlan as MealPlan
%% Search for the flour
Elif->>FoodCatalog: searchByName("New Gluten-Free Flour")
activate FoodCatalog
FoodCatalog-->>Elif: emptyList (Not Found)
deactivate FoodCatalog
%% Propose new food item
Elif->>FoodCatalog: addFoodItem(newFlour)
activate FoodCatalog
FoodCatalog->>FoodEntry: new FoodEntry("New Gluten-Free Flour", "Grain")
activate FoodEntry
FoodEntry->>FoodEntry: updateNutritionalInfo(calories, protein, fat, carbs)
FoodEntry->>FoodEntry: addDietaryOption("Celiac-friendly")
FoodEntry->>FoodEntry: calculateNutritionScore()
FoodEntry-->>FoodCatalog: newFoodEntry
deactivate FoodEntry
FoodCatalog->>Moderator: reviewFoodItem(newFoodEntry)
activate Moderator
Moderator-->>FoodCatalog: approved
deactivate Moderator
FoodCatalog-->>Elif: confirmation
deactivate FoodCatalog
%% Create recipe
Elif->>Recipe: new Recipe(name: "Gluten-Free Flatbread")
activate Recipe
Recipe-->>Elif: newRecipe
deactivate Recipe
%% Add ingredients to recipe
Elif->>Recipe: addIngredient(newFlour, amount)
activate Recipe
Recipe->>FoodCatalog: getFoodItemById(flourId)
activate FoodCatalog
FoodCatalog-->>Recipe: flourEntry
deactivate FoodCatalog
Recipe-->>Elif: ingredientAdded
deactivate Recipe
%% Add more ingredients (abbreviated)
Elif->>Recipe: addIngredient(otherIngredients...)
%% Add preparation steps
Elif->>Recipe: instructions = ["Mix dry ingredients", "Add water", "Knead dough", "Roll out", "Cook in pan"]
%% Calculate nutrition and cost
Elif->>Recipe: calculateTotalProteinContent()
activate Recipe
Recipe-->>Elif: proteinContent
deactivate Recipe
Elif->>Recipe: calculateCost()
activate Recipe
Recipe->>Market: getListingsByFoodEntryId(flourId)
activate Market
Market-->>Recipe: listings
deactivate Market
Recipe-->>Elif: recipeCost
deactivate Recipe
%% Post recipe to forum
Elif->>Forum: addPost(newRecipePost)
activate Forum
Forum->>Post: new Post(content: recipe, tags: ["Recipe", "Gluten-Free"])
activate Post
Post-->>Forum: newPost
deactivate Post
Forum-->>Elif: postConfirmation
deactivate Forum
%% Add to meal plan
Elif->>MealPlan: generatePlan()
activate MealPlan
MealPlan-->>Elif: emptyPlan
deactivate MealPlan
Elif->>MealPlan: addMeal(recipe, days)
activate MealPlan
MealPlan->>MealPlan: calculateNutritionalSummary()
MealPlan-->>Elif: updatedPlan
deactivate MealPlan
%% Save meal plan
Elif->>MealPlan: saveToCollection()
activate MealPlan
MealPlan-->>Elif: savedConfirmation
deactivate MealPlan
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
- Scenario 11: User Profile Management
- Git: In a Nutshell
- Example GitHub Repositories
- System Modeling & UML
- Frontend Tutorial
- Frontend Roadmap
- Frontend Styling Guide
- Docker Summary
- Writing Endpoints
- Yusuf AKIN
- Arda SAYGAN
- Fatih Furkan Bilsel
- Berk GOKTAS
- Berkay BILEN
- Yusuf Anıl YAZICI
- Taha Topaloglu
- Nuri Basar
- Onur Kucuk
- Hasancan Keles
- Mete Damar