From 440615a7fef03b50e339632cdf592505d89cd394 Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 15:52:19 -0700 Subject: [PATCH 01/16] Added assignment 3 from everyone into this branch --- docs/analysis/feature-and-usecases.md | 238 ++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 docs/analysis/feature-and-usecases.md diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md new file mode 100644 index 0000000..1ae7ca8 --- /dev/null +++ b/docs/analysis/feature-and-usecases.md @@ -0,0 +1,238 @@ +# Features and Use Cases + +## Features +- Log In +- Log Out +- Register +- Game library +- Search +- User Interactions + +## Brief Use Cases + +### UC1: User Logs In +- Primary Actor: User of this site. +- Goal: User successfully logs into the site using credentials. + +### UC2: User Logs Out +- Primary Actor: User of this site. +- Goal: User successfully logs out the site. + +### UC3: User Registers +- Primary Actor: User of this site. +- Goal: User successfully registers a account into the site using credentials. + +### UC4: User Accesses Game Library +- Primary Actor: User of this site. +- Goal: User can access a catalog of games that are available through the site. + +### UC5: User Searches For Specific Games +- Primary Actor: User of this site. +- Goal: User can search for specific games within the site. + +### UC6: User Interacts With Another User +- Primary Actor: User of this site. +- Goal: User can open one on one communications with another user. + +### UC7: User Interacts With Multiple Users +- Primary Actor: User of this site. +- Goal: User successfully opens a group chat with multiple users. + +### UC8: User Befriends Other Users +- Primary Actor: User of this site. +- Goal: User establishes a friendship relationship with another or multiple users. + +## Use Case Traceability + +| Use Case | Feature(s) | +|---|---| +| UC1: User Logs In | Log In, Register, User Interactions | +| UC2: User Logs Out | Log In, Register, Log Out | +| UC3: User Registers | Log In, Register, Log Out, User Interactions | +| UC4: User Accesses Game Library | Game Library, Search | +| UC5: User Searches For Specific Games | Search, Game Library | +| UC6: User Interacts With Another User | Log In, Register, User Interactions | +| UC7: User Interacts With Multiple Users | Log In, Register, User Interactions | +| UC8: User Befriends Other Users | Log In, Register, User Interactions | + +## Use Case Diagram + +### UML Use Case Diagram +- I made this using https://app.diagrams.net + +![Use Case Diagram](./CPW207-Assignment3.drawio.png) + + + + + + + + + + + + + + + + + + + + + + +# Features and Use Cases + +## Features +- Register +- Maintain WS connections +- Online Activities +- Inbox Messages +- Game Library +- Search +- Friends +- Achievement system +- Toast NotificationsExpand comment + +... + +## Brief Use Cases + +### UC1: User creates an account +- Primary Actor: New user +- Goal: User successfully creates and registers his account. + +### UC2: User plays a game +- Primary Actor: User +- Goal: User opens an available game and plays. + +### UC3: User plays online +- Primary Actor: Registered User +- Goal: User connects to online services and plays online game. + +### UC4: System sends an inbox letter to user +- Primary Actor: System +- Goal: System sends a letter to the user's inbox + +### UC5: System alerts user of achievement +- Primary Actor: System +- Goal: System alerts user when he has completed an achievement. + +### UC6: User views the Game Library +- Primary Actor: User +- Goal: User receives the site's library of games + +### UC7: User searches for a specific game, genre, etc. +- Primary Actor: User +- Goal: User receives the results of his search + +### UC8: User becomes friends with another user +- Primary Actor: Registered User +- Goal: The registered user becomes friends with another user and can chat and play online together. + + + +... + +## Use Case Traceability + +| Use Case | Feature(s) | +|---|---| +| UC1: User creates an account | Register | +| UC2: User plays a game | Game Library, WS connections | +| UC3: User plays online | Register, Online Activities, Game Library, WS connections | +| UC4: System sends an inbox letter to user | Register, Inbox Messages | +| UC5: System alerts user of achievement | Register, Achievement system, Toast Notifications | +| UC6: User views the Game Library | Game Library | +| UC7: User searches for a specific game, genre, etc. | Game Library, Search | +| UC8: User becomes friends with another user | Register, Online Activities, Friends | +... + +## Use Case Diagram +Here is my diagram built with PlantUML (AI assisted, so it might not look the greatest) + +![Use Case Diagram](use-case-diagram.png) + + + + + + + + + + + + + + + +## Features +- User Blocking and Safety Controls +- User Reporting System +- Support Ticket System +- Game Progress Tracking +- Notification Preferences Management +- Role and Permission Management +- Account Recovery +- Privacy and Visibility Settings + +## Brief Use Cases + +### UC1: User Blocks Another User +- Primary Actor: User +- Goal: User prevents another user from sending messages, friend requests, or interacting with them. + +### UC2: User Reports Another User +- Primary Actor: User +- Goal: User submits a report about inappropriate behavior or content. + +### UC3: User Submits a Support Ticket +- Primary Actor: User +- Goal: User creates a support request for technical issues, account problems, or abuse concerns. + +### UC4: User Views Game Progress +- Primary Actor: User +- Goal: User views their saved progress for a specific game. + +### UC5: User Updates Notification Preferences +- Primary Actor: User +- Goal: User customizes which notifications they receive (friend requests, achievements, messages, etc.). + +### UC6: Admin Assigns User Roles +- Primary Actor: Admin +- Goal: Admin grants or modifies user roles such as moderator or developer. + +### UC7: Admin Moderates User Reports +- Primary Actor: Admin +- Goal: Admin reviews submitted reports and takes appropriate action. + +### UC8: User Recovers Account +- Primary Actor: User +- Goal: User regains access to their account after losing credentials. + +### UC9: User Adjusts Privacy Settings +- Primary Actor: User +- Goal: User controls who can view their profile, activity, and online status. + +## Use Case Traceability + +| Use Case | Feature(s) | +|---|---| +| UC1: User Blocks Another User | User Blocking and Safety Controls | +| UC2: User Reports Another User | User Reporting System | +| UC3: User Submits a Support Ticket | Support Ticket System | +| UC4: User Views Game Progress | Game Progress Tracking | +| UC5: User Updates Notification Preferences | Notification Preferences Management | +| UC6: Admin Assigns User Roles | Role and Permission Management | +| UC7: Admin Moderates User Reports | User Reporting System, Role and Permission Management | +| UC8: User Recovers Account | Account Recovery | +| UC9: User Adjusts Privacy Settings | Privacy and Visibility Settings | + +## Use Case Diagram + +I made this in paint(the one built into windows) because of how artistic I am + +![Use Case Diagram](use-case-diagramToast.png) \ No newline at end of file From 804ae91d1fb9908ac4c933e8d431071607c9fb59 Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 16:09:25 -0700 Subject: [PATCH 02/16] restructured file to merge all 3 assignments in a more graceful manner --- docs/analysis/feature-and-usecases.md | 310 +++++++++----------------- 1 file changed, 108 insertions(+), 202 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 1ae7ca8..b40da63 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -1,233 +1,139 @@ -# Features and Use Cases +# Logan ## Features - Log In -- Log Out -- Register -- Game library -- Search -- User Interactions - -## Brief Use Cases - -### UC1: User Logs In -- Primary Actor: User of this site. -- Goal: User successfully logs into the site using credentials. - -### UC2: User Logs Out -- Primary Actor: User of this site. -- Goal: User successfully logs out the site. - -### UC3: User Registers -- Primary Actor: User of this site. -- Goal: User successfully registers a account into the site using credentials. - -### UC4: User Accesses Game Library -- Primary Actor: User of this site. -- Goal: User can access a catalog of games that are available through the site. - -### UC5: User Searches For Specific Games -- Primary Actor: User of this site. -- Goal: User can search for specific games within the site. - -### UC6: User Interacts With Another User -- Primary Actor: User of this site. -- Goal: User can open one on one communications with another user. - -### UC7: User Interacts With Multiple Users -- Primary Actor: User of this site. -- Goal: User successfully opens a group chat with multiple users. - -### UC8: User Befriends Other Users -- Primary Actor: User of this site. -- Goal: User establishes a friendship relationship with another or multiple users. - -## Use Case Traceability - -| Use Case | Feature(s) | -|---|---| -| UC1: User Logs In | Log In, Register, User Interactions | -| UC2: User Logs Out | Log In, Register, Log Out | -| UC3: User Registers | Log In, Register, Log Out, User Interactions | -| UC4: User Accesses Game Library | Game Library, Search | -| UC5: User Searches For Specific Games | Search, Game Library | -| UC6: User Interacts With Another User | Log In, Register, User Interactions | -| UC7: User Interacts With Multiple Users | Log In, Register, User Interactions | -| UC8: User Befriends Other Users | Log In, Register, User Interactions | - -## Use Case Diagram - -### UML Use Case Diagram -- I made this using https://app.diagrams.net - -![Use Case Diagram](./CPW207-Assignment3.drawio.png) - - - - - - - - - - - - - - - - - - - - - - -# Features and Use Cases - -## Features -- Register -- Maintain WS connections -- Online Activities -- Inbox Messages -- Game Library -- Search -- Friends -- Achievement system -- Toast NotificationsExpand comment - -... - -## Brief Use Cases - -### UC1: User creates an account +# Consolidated Features and Use Cases + +## Features (consolidated) +- Register / Account management +- Log In / Log Out / Account Recovery +- Game Library / Play Game / Game Progress Tracking +- Search (games, genres) +- Friends / Friend requests +- One-on-one messaging / Inbox messages +- Group chat / Multi-user interactions +- Maintain WebSocket / Online activities +- Achievements & Toast notifications +- Notification preferences +- User blocking / Reporting / Safety controls +- Support ticket system +- Role & permission management (admin) +- Privacy & visibility settings + +## Consolidated Brief Use Cases + +### UC1: User registers an account - Primary Actor: New user -- Goal: User successfully creates and registers his account. +- Goal: Create and register an account. -### UC2: User plays a game -- Primary Actor: User -- Goal: User opens an available game and plays. - -### UC3: User plays online -- Primary Actor: Registered User -- Goal: User connects to online services and plays online game. +### UC2: User logs in +- Primary Actor: Registered user +- Goal: Authenticate and access site features. -### UC4: System sends an inbox letter to user -- Primary Actor: System -- Goal: System sends a letter to the user's inbox +### UC3: User logs out +- Primary Actor: Registered user +- Goal: End session securely. -### UC5: System alerts user of achievement -- Primary Actor: System -- Goal: System alerts user when he has completed an achievement. - -### UC6: User views the Game Library +### UC4: User accesses or plays a game - Primary Actor: User -- Goal: User receives the site's library of games +- Goal: Browse the game library and play a selected game (local or online). -### UC7: User searches for a specific game, genre, etc. +### UC5: User searches for games or genres - Primary Actor: User -- Goal: User receives the results of his search - -### UC8: User becomes friends with another user -- Primary Actor: Registered User -- Goal: The registered user becomes friends with another user and can chat and play online together. - - - -... - -## Use Case Traceability - -| Use Case | Feature(s) | -|---|---| -| UC1: User creates an account | Register | -| UC2: User plays a game | Game Library, WS connections | -| UC3: User plays online | Register, Online Activities, Game Library, WS connections | -| UC4: System sends an inbox letter to user | Register, Inbox Messages | -| UC5: System alerts user of achievement | Register, Achievement system, Toast Notifications | -| UC6: User views the Game Library | Game Library | -| UC7: User searches for a specific game, genre, etc. | Game Library, Search | -| UC8: User becomes friends with another user | Register, Online Activities, Friends | -... - -## Use Case Diagram -Here is my diagram built with PlantUML (AI assisted, so it might not look the greatest) - -![Use Case Diagram](use-case-diagram.png) - +- Goal: Find games via search filters/queries. - - - - - - - - - - - - - -## Features -- User Blocking and Safety Controls -- User Reporting System -- Support Ticket System -- Game Progress Tracking -- Notification Preferences Management -- Role and Permission Management -- Account Recovery -- Privacy and Visibility Settings - -## Brief Use Cases - -### UC1: User Blocks Another User +### UC6: User interacts with another user (1:1) - Primary Actor: User -- Goal: User prevents another user from sending messages, friend requests, or interacting with them. +- Goal: Send/receive messages and inbox items. -### UC2: User Reports Another User +### UC7: User opens or participates in a group chat - Primary Actor: User -- Goal: User submits a report about inappropriate behavior or content. +- Goal: Chat with multiple users simultaneously. -### UC3: User Submits a Support Ticket -- Primary Actor: User -- Goal: User creates a support request for technical issues, account problems, or abuse concerns. +### UC8: User manages friendships +- Primary Actor: Registered user +- Goal: Send/accept friend requests and manage friend list. -### UC4: User Views Game Progress -- Primary Actor: User -- Goal: User views their saved progress for a specific game. +### UC9: System sends notifications / achievements +- Primary Actor: System +- Goal: Deliver inbox messages, achievement alerts, and toast notifications. -### UC5: User Updates Notification Preferences +### UC10: User blocks or reports another user - Primary Actor: User -- Goal: User customizes which notifications they receive (friend requests, achievements, messages, etc.). +- Goal: Prevent interaction and submit reports for moderation. -### UC6: Admin Assigns User Roles -- Primary Actor: Admin -- Goal: Admin grants or modifies user roles such as moderator or developer. +### UC11: User submits a support ticket +- Primary Actor: User +- Goal: Request help for technical or account issues. -### UC7: Admin Moderates User Reports +### UC12: Admin assigns roles / moderates reports - Primary Actor: Admin -- Goal: Admin reviews submitted reports and takes appropriate action. - -### UC8: User Recovers Account -- Primary Actor: User -- Goal: User regains access to their account after losing credentials. +- Goal: Manage roles and respond to user reports. -### UC9: User Adjusts Privacy Settings +### UC13: User recovers account / manages privacy & notifications - Primary Actor: User -- Goal: User controls who can view their profile, activity, and online status. +- Goal: Recover lost credentials and adjust privacy/notification preferences. ## Use Case Traceability | Use Case | Feature(s) | |---|---| -| UC1: User Blocks Another User | User Blocking and Safety Controls | -| UC2: User Reports Another User | User Reporting System | -| UC3: User Submits a Support Ticket | Support Ticket System | -| UC4: User Views Game Progress | Game Progress Tracking | -| UC5: User Updates Notification Preferences | Notification Preferences Management | -| UC6: Admin Assigns User Roles | Role and Permission Management | -| UC7: Admin Moderates User Reports | User Reporting System, Role and Permission Management | +| UC1: User registers an account | Register / Account management | +| UC2: User logs in | Log In, Register | +| UC3: User logs out | Log Out | +| UC4: User accesses or plays a game | Game Library, Play Game, WS connections | +| UC5: User searches for games or genres | Search, Game Library | +| UC6: User interacts with another user (1:1) | One-on-one messaging, Inbox messages, Friends | +| UC7: User opens or participates in a group chat | Group chat, WS connections | +| UC8: User manages friendships | Friends, User Interactions | +| UC9: System sends notifications / achievements | Inbox messages, Achievement system, Toast notifications | +| UC10: User blocks or reports another user | User Blocking and Safety Controls, User Reporting System | +| UC11: User submits a support ticket | Support Ticket System | +| UC12: Admin assigns roles / moderates reports | Role & Permission Management, User Reporting System | +| UC13: User recovers account / manages privacy & notifications | Account Recovery, Privacy & Visibility Settings, Notification Preferences | + +## Unified Use Case Diagram (PlantUML) + +The following PlantUML block represents the consolidated actors and use cases; you can paste it into a PlantUML renderer to generate an image. + +```plantuml +@startuml +actor User +actor Admin +actor System + +User --> (Register) +User --> (Log In) +User --> (Log Out) +User --> (View Game Library) +User --> (Search Games) +User --> (Play Game) +User --> (Play Online) +User --> (Send Message) +User --> (Start Group Chat) +User --> (Add Friend) +User --> (Block User) +User --> (Report User) +User --> (Submit Support Ticket) +User --> (View Game Progress) +User --> (Update Notification Preferences) +User --> (Recover Account) + +Admin --> (Assign Roles) +Admin --> (Moderate Reports) + +System --> (Send Inbox Message) +System --> (Send Achievement Alert) + +"Send Inbox Message" ..> (Send Message) : <> +"Send Achievement Alert" ..> (Send Inbox Message) : <> + +@enduml +``` + +--- + +If you'd like, I can: export the PlantUML as a PNG, render and embed the image here, or adjust grouping/labels in the diagram. | UC8: User Recovers Account | Account Recovery | | UC9: User Adjusts Privacy Settings | Privacy and Visibility Settings | From eccf785afc14477be3b54220404da3bd40c73176 Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 16:29:28 -0700 Subject: [PATCH 03/16] Started Detailed Use Case diagram and added boilerplate terms to UC17-25 --- docs/analysis/feature-and-usecases.md | 401 +++++++++++++++-------- docs/analysis/use-case-diagram-Alex.png | Bin 0 -> 68698 bytes docs/analysis/use-case-diagram-Logan.png | Bin 0 -> 64530 bytes docs/analysis/use-case-diagram-Toast.png | Bin 0 -> 17927 bytes 4 files changed, 265 insertions(+), 136 deletions(-) create mode 100644 docs/analysis/use-case-diagram-Alex.png create mode 100644 docs/analysis/use-case-diagram-Logan.png create mode 100644 docs/analysis/use-case-diagram-Toast.png diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index b40da63..bc4e514 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -1,144 +1,273 @@ -# Logan - -## Features -- Log In -# Consolidated Features and Use Cases - -## Features (consolidated) -- Register / Account management -- Log In / Log Out / Account Recovery -- Game Library / Play Game / Game Progress Tracking -- Search (games, genres) -- Friends / Friend requests -- One-on-one messaging / Inbox messages -- Group chat / Multi-user interactions -- Maintain WebSocket / Online activities -- Achievements & Toast notifications -- Notification preferences -- User blocking / Reporting / Safety controls -- Support ticket system -- Role & permission management (admin) -- Privacy & visibility settings - -## Consolidated Brief Use Cases - -### UC1: User registers an account -- Primary Actor: New user -- Goal: Create and register an account. - -### UC2: User logs in -- Primary Actor: Registered user -- Goal: Authenticate and access site features. - -### UC3: User logs out -- Primary Actor: Registered user -- Goal: End session securely. - -### UC4: User accesses or plays a game -- Primary Actor: User -- Goal: Browse the game library and play a selected game (local or online). - -### UC5: User searches for games or genres -- Primary Actor: User -- Goal: Find games via search filters/queries. - -### UC6: User interacts with another user (1:1) -- Primary Actor: User -- Goal: Send/receive messages and inbox items. - -### UC7: User opens or participates in a group chat -- Primary Actor: User -- Goal: Chat with multiple users simultaneously. - -### UC8: User manages friendships -- Primary Actor: Registered user -- Goal: Send/accept friend requests and manage friend list. - -### UC9: System sends notifications / achievements -- Primary Actor: System -- Goal: Deliver inbox messages, achievement alerts, and toast notifications. - -### UC10: User blocks or reports another user -- Primary Actor: User -- Goal: Prevent interaction and submit reports for moderation. - -### UC11: User submits a support ticket -- Primary Actor: User -- Goal: Request help for technical or account issues. - -### UC12: Admin assigns roles / moderates reports -- Primary Actor: Admin -- Goal: Manage roles and respond to user reports. - -### UC13: User recovers account / manages privacy & notifications -- Primary Actor: User -- Goal: Recover lost credentials and adjust privacy/notification preferences. - -## Use Case Traceability +# Unified Features and Use Case Catalog (Merged for Assignment 5) -| Use Case | Feature(s) | -|---|---| -| UC1: User registers an account | Register / Account management | -| UC2: User logs in | Log In, Register | -| UC3: User logs out | Log Out | -| UC4: User accesses or plays a game | Game Library, Play Game, WS connections | -| UC5: User searches for games or genres | Search, Game Library | -| UC6: User interacts with another user (1:1) | One-on-one messaging, Inbox messages, Friends | -| UC7: User opens or participates in a group chat | Group chat, WS connections | -| UC8: User manages friendships | Friends, User Interactions | -| UC9: System sends notifications / achievements | Inbox messages, Achievement system, Toast notifications | -| UC10: User blocks or reports another user | User Blocking and Safety Controls, User Reporting System | -| UC11: User submits a support ticket | Support Ticket System | -| UC12: Admin assigns roles / moderates reports | Role & Permission Management, User Reporting System | -| UC13: User recovers account / manages privacy & notifications | Account Recovery, Privacy & Visibility Settings, Notification Preferences | - -## Unified Use Case Diagram (PlantUML) - -The following PlantUML block represents the consolidated actors and use cases; you can paste it into a PlantUML renderer to generate an image. - -```plantuml -@startuml -actor User -actor Admin -actor System - -User --> (Register) -User --> (Log In) -User --> (Log Out) -User --> (View Game Library) -User --> (Search Games) -User --> (Play Game) -User --> (Play Online) -User --> (Send Message) -User --> (Start Group Chat) -User --> (Add Friend) -User --> (Block User) -User --> (Report User) -User --> (Submit Support Ticket) -User --> (View Game Progress) -User --> (Update Notification Preferences) -User --> (Recover Account) - -Admin --> (Assign Roles) -Admin --> (Moderate Reports) - -System --> (Send Inbox Message) -System --> (Send Achievement Alert) - -"Send Inbox Message" ..> (Send Message) : <> -"Send Achievement Alert" ..> (Send Inbox Message) : <> - -@enduml -``` +## Features (Combined Across All Members) + +### Logan’s Features +- Log In +- Log Out +- Register +- Game Library +- Search +- User Interactions + +### Alex’s Features +- Register +- Maintain WebSocket Connections +- Online Activities +- Inbox Messages +- Game Library +- Search +- Friends +- Achievement System +- Toast Notifications + +### Eli’s Features +- User Blocking and Safety Controls +- User Reporting System +- Support Ticket System +- Game Progress Tracking +- Notification Preferences Management +- Role and Permission Management +- Account Recovery +- Privacy and Visibility Settings + + +--- + +# Unified Brief Use Cases (Renumbered UC1–UC25) + +# Unified Brief Use Cases (Renumbered UC1–UC25 with Actors & Goals) + +### UC1 – User Logs In +- **Primary Actor:** User +- **Goal:** User successfully logs into the site using valid credentials. + +### UC2 – User Logs Out +- **Primary Actor:** User +- **Goal:** User successfully logs out of the site. + +### UC3 – User Registers +- **Primary Actor:** User +- **Goal:** User creates a new account using registration credentials. + +### UC4 – User Accesses Game Library +- **Primary Actor:** User +- **Goal:** User views the catalog of available games. + +### UC5 – User Searches for Specific Games +- **Primary Actor:** User +- **Goal:** User searches for a specific game within the site. + +### UC6 – User Interacts One‑on‑One +- **Primary Actor:** User +- **Goal:** User opens a one‑on‑one communication channel with another user. + +### UC7 – User Interacts with Multiple Users +- **Primary Actor:** User +- **Goal:** User opens a group chat with multiple users. + +### UC8 – User Befriends Other Users +- **Primary Actor:** User +- **Goal:** User establishes a friendship relationship with one or more users. --- -If you'd like, I can: export the PlantUML as a PNG, render and embed the image here, or adjust grouping/labels in the diagram. -| UC8: User Recovers Account | Account Recovery | -| UC9: User Adjusts Privacy Settings | Privacy and Visibility Settings | +### UC9 – User Creates an Account +- **Primary Actor:** New User +- **Goal:** User successfully creates and registers an account. + +### UC10 – User Plays a Game +- **Primary Actor:** User +- **Goal:** User opens and plays an available game. + +### UC11 – User Plays Online +- **Primary Actor:** Registered User +- **Goal:** User connects to online services and plays an online game. + +### UC12 – System Sends Inbox Letter +- **Primary Actor:** System +- **Goal:** System delivers a message to the user’s inbox. + +### UC13 – System Alerts User of Achievement +- **Primary Actor:** System +- **Goal:** System notifies the user when they complete an achievement. + +### UC14 – User Views Game Library +- **Primary Actor:** User +- **Goal:** User receives the site’s library of games. + +### UC15 – User Searches for a Game/Genre +- **Primary Actor:** User +- **Goal:** User receives search results for a game, genre, or related query. + +### UC16 – User Becomes Friends with Another User +- **Primary Actor:** Registered User +- **Goal:** User becomes friends with another user and can interact socially. + +--- + +### UC17 – User Blocks Another User +- **Primary Actor:** User +- **Goal:** User prevents another user from messaging, friending, or interacting with them. + +### UC18 – User Reports Another User +- **Primary Actor:** User +- **Goal:** User submits a report about inappropriate behavior or content. + +### UC19 – User Submits a Support Ticket +- **Primary Actor:** User +- **Goal:** User creates a support request for technical, account, or safety issues. + +### UC20 – User Views Game Progress +- **Primary Actor:** User +- **Goal:** User views their saved progress for a specific game. + +### UC21 – User Updates Notification Preferences +- **Primary Actor:** User +- **Goal:** User customizes which notifications they receive. + +### UC22 – Admin Assigns User Roles +- **Primary Actor:** Admin +- **Goal:** Admin grants or modifies user roles such as moderator or developer. + +### UC23 – Admin Moderates User Reports +- **Primary Actor:** Admin +- **Goal:** Admin reviews submitted reports and takes appropriate action. + +### UC24 – User Recovers Account +- **Primary Actor:** User +- **Goal:** User regains access to their account after losing credentials. + +### UC25 – User Adjusts Privacy Settings +- **Primary Actor:** User +- **Goal:** User controls who can view their profile, activity, and online status. + + +# Unified Use Case Traceability Table + +| Use Case | Feature(s) | +|---------|-------------| +| UC1 | Log In, Register, User Interactions | +| UC2 | Log In, Register, Log Out | +| UC3 | Log In, Register, Log Out, User Interactions | +| UC4 | Game Library, Search | +| UC5 | Search, Game Library | +| UC6 | Log In, Register, User Interactions | +| UC7 | Log In, Register, User Interactions | +| UC8 | Log In, Register, User Interactions | +| UC9 | Register | +| UC10 | Game Library, WebSocket Connections | +| UC11 | Register, Online Activities, Game Library, WebSocket Connections | +| UC12 | Register, Inbox Messages | +| UC13 | Register, Achievement System, Toast Notifications | +| UC14 | Game Library | +| UC15 | Game Library, Search | +| UC16 | Register, Online Activities, Friends | +| UC17 | User Blocking and Safety Controls | +| UC18 | User Reporting System | +| UC19 | Support Ticket System | +| UC20 | Game Progress Tracking | +| UC21 | Notification Preferences Management | +| UC22 | Role and Permission Management | +| UC23 | User Reporting System, Role and Permission Management | +| UC24 | Account Recovery | +| UC25 | Privacy and Visibility Settings | ## Use Case Diagram -I made this in paint(the one built into windows) because of how artistic I am +### Logan's Diagram +![Use Case Diagram](use-case-diagram-Logan.png) + +### Alex's Diagram +![Alex's Use Case Diagram](use-case-diagram-Alex.png) + +### Eli's Diagram +![Eli's Use Case Diagram](use-case-diagram-Toast.png) + +## Detailed Use Cases + +### UC1: User Logs In +**Primary Actor:** User +**Goal:** A user logs into the site. +**Preconditions:** The user is not currently logged in; The user has already registered on the site. +**Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that cofirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. + +** Main Flow ** +1. User navigates t +2. ... + +** Alternate Flow ** +- A1: ... +- A2: ... + +--- + +### UC9 – User Creates an Account +- **Primary Actor:** New User +- **Goal:** User successfully creates and registers an account. + +### UC10 – User Plays a Game +- **Primary Actor:** User +- **Goal:** User opens and plays an available game. + +### UC11 – User Plays Online +- **Primary Actor:** Registered User +- **Goal:** User connects to online services and plays an online game. + +### UC12 – System Sends Inbox Letter +- **Primary Actor:** System +- **Goal:** System delivers a message to the user’s inbox. + +### UC13 – System Alerts User of Achievement +- **Primary Actor:** System +- **Goal:** System notifies the user when they complete an achievement. + +### UC14 – User Views Game Library +- **Primary Actor:** User +- **Goal:** User receives the site’s library of games. + +### UC15 – User Searches for a Game/Genre +- **Primary Actor:** User +- **Goal:** User receives search results for a game, genre, or related query. + +### UC16 – User Becomes Friends with Another User +- **Primary Actor:** Registered User +- **Goal:** User becomes friends with another user and can interact socially. + +--- + +### UC17 – User Blocks Another User +- **Primary Actor:** User +- **Goal:** User prevents another user from messaging, friending, or interacting with them. + +### UC18 – User Reports Another User +- **Primary Actor:** User +- **Goal:** User submits a report about inappropriate behavior or content. + +### UC19 – User Submits a Support Ticket +- **Primary Actor:** User +- **Goal:** User creates a support request for technical, account, or safety issues. + +### UC20 – User Views Game Progress +- **Primary Actor:** User +- **Goal:** User views their saved progress for a specific game. + +### UC21 – User Updates Notification Preferences +- **Primary Actor:** User +- **Goal:** User customizes which notifications they receive. + +### UC22 – Admin Assigns User Roles +- **Primary Actor:** Admin +- **Goal:** Admin grants or modifies user roles such as moderator or developer. + +### UC23 – Admin Moderates User Reports +- **Primary Actor:** Admin +- **Goal:** Admin reviews submitted reports and takes appropriate action. + +### UC24 – User Recovers Account +- **Primary Actor:** User +- **Goal:** User regains access to their account after losing credentials. -![Use Case Diagram](use-case-diagramToast.png) \ No newline at end of file +### UC25 – User Adjusts Privacy Settings +- **Primary Actor:** User +- **Goal:** User controls who can view their profile, activity, and online status. \ No newline at end of file diff --git a/docs/analysis/use-case-diagram-Alex.png b/docs/analysis/use-case-diagram-Alex.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4cf21490752e9066540d4d166a4f497978f160 GIT binary patch literal 68698 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 UJ}=+2klzjL=j0IA*KN`N0T$IQ8UO$Q literal 0 HcmV?d00001 diff --git a/docs/analysis/use-case-diagram-Logan.png b/docs/analysis/use-case-diagram-Logan.png new file mode 100644 index 0000000000000000000000000000000000000000..1429d3fa21cb94e20500b80e82fbf6e559111f5a GIT binary patch literal 64530 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 literal 0 HcmV?d00001 From 8fb552806401de9c0a3a889b4d8cce68045c1ede Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 16:48:45 -0700 Subject: [PATCH 04/16] Added content from live share before break, possibly changing host --- docs/analysis/feature-and-usecases.md | 82 +++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index bc4e514..81f2ed2 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -193,11 +193,14 @@ **Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that cofirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. ** Main Flow ** -1. User navigates t -2. ... +1. User opens browser and enters the URl of the site. +2. User navigates to a menu item that requires a log in. +3. User clicks log in and puts in their credentials. + ** Alternate Flow ** -- A1: ... +- A1: User opens browser and enters the url of +tis eht - A2: ... --- @@ -205,6 +208,8 @@ ### UC9 – User Creates an Account - **Primary Actor:** New User - **Goal:** User successfully creates and registers an account. +- **Preconditions:** User should not be signed into an account +- **Success Outcome:** A new account is created ### UC10 – User Plays a Game - **Primary Actor:** User @@ -239,35 +244,104 @@ ### UC17 – User Blocks Another User - **Primary Actor:** User - **Goal:** User prevents another user from messaging, friending, or interacting with them. +- **Preconditions:** User is authenticated; Target user exists in system; The user has not already blocked the target user +- **Success Outcome:** Target user is added tothe user's block list and future interactions are prevented + +** Main Flow ** +1. User indicates intent to block another user +2. System verifies the target user exists +3. System verifies the user has not already blocked the target user +4. System records the block relationship +5. System updates the interaction rules to prevent further communication +6. System confirms the block. + +** Alternate FFlow ** +A1. Target user does not exist -> System rejects the requrest. +A2. User already blocked target -> System rejects the request. ### UC18 – User Reports Another User - **Primary Actor:** User - **Goal:** User submits a report about inappropriate behavior or content. +- **Preconditions:** User is authenticated; Target user exists; report contains valid details. +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** ### UC19 – User Submits a Support Ticket - **Primary Actor:** User - **Goal:** User creates a support request for technical, account, or safety issues. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC20 – User Views Game Progress - **Primary Actor:** User - **Goal:** User views their saved progress for a specific game. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC21 – User Updates Notification Preferences - **Primary Actor:** User - **Goal:** User customizes which notifications they receive. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC22 – Admin Assigns User Roles - **Primary Actor:** Admin - **Goal:** Admin grants or modifies user roles such as moderator or developer. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC23 – Admin Moderates User Reports - **Primary Actor:** Admin - **Goal:** Admin reviews submitted reports and takes appropriate action. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC24 – User Recovers Account - **Primary Actor:** User - **Goal:** User regains access to their account after losing credentials. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + ### UC25 – User Adjusts Privacy Settings - **Primary Actor:** User -- **Goal:** User controls who can view their profile, activity, and online status. \ No newline at end of file +- **Goal:** User controls who can view their profile, activity, and online status. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** + +** Alternate Flow ** + From 08ae90e64ef7c079f48ac90da52dc8158f047b59 Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 16:50:20 -0700 Subject: [PATCH 05/16] minor formatting change --- docs/analysis/feature-and-usecases.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 81f2ed2..ab9725c 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -199,10 +199,24 @@ ** Alternate Flow ** -- A1: User opens browser and enters the url of -tis eht -- A2: ... +* A1: User opens browser and enters the url of the site. +* A2: The User navigates to another menu item that requires log in. +* A3: User clicks log in and enters credentials. +### UC2: User Logs Out +**Primary Actor:** User +**Goal:** A user logs out of the site +**Preconditions:** The user is currently logged in; The user has already registered on the site. +**Success Outcome:** The user successfully logs out of their account and are redirected back to the home page. + +** Main Flow ** +1. User navigates to the menu and hits the log out button. +2. System confirms the user tries logging out +3. System logs user out. + +** Alternate Flow ** +* A1: +* A2: --- ### UC9 – User Creates an Account From 0a0861091954bb5450d5d0a8bcc749232d44ac7a Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:06:17 -0700 Subject: [PATCH 06/16] 123 --- docs/analysis/feature-and-usecases.md | 58 +++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index ab9725c..a9b487a 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -186,11 +186,13 @@ ## Detailed Use Cases +# Logan + ### UC1: User Logs In -**Primary Actor:** User -**Goal:** A user logs into the site. -**Preconditions:** The user is not currently logged in; The user has already registered on the site. -**Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that cofirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. +- **Primary Actor:** User +- **Goal:** A user logs into the site. +- **Preconditions:** The user is not currently logged in; The user has already registered on the site. +- **Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that cofirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. ** Main Flow ** 1. User opens browser and enters the URl of the site. @@ -217,7 +219,46 @@ ** Alternate Flow ** * A1: * A2: + +### UC3 – User Registers +- **Primary Actor:** User +- **Goal:** User creates a new account using registration credentials. + +### UC4 – User Accesses Game Library +- **Primary Actor:** User +- **Goal:** User views the catalog of available games. + +### UC5 – User Searches for Specific Games +- **Primary Actor:** User +- **Goal:** User searches for a specific game within the site. + +### UC6 – User Interacts One‑on‑One +- **Primary Actor:** User +- **Goal:** User opens a one‑on‑one communication channel with another user. + +### UC7 – User Interacts with Multiple Users +- **Primary Actor:** User +- **Goal:** User opens a group chat with multiple users. + +### UC8 – User Befriends Other Users +- **Primary Actor:** User +- **Goal:** User establishes a friendship relationship with one or more users. + + + + + + + + + + + + + + --- +# Alex ### UC9 – User Creates an Account - **Primary Actor:** New User @@ -253,7 +294,16 @@ - **Primary Actor:** Registered User - **Goal:** User becomes friends with another user and can interact socially. + + + + + + + + --- +# Eli ### UC17 – User Blocks Another User - **Primary Actor:** User From 3a4f88887bf8600f086777a1f55c1a5f469c7728 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:08:41 -0700 Subject: [PATCH 07/16] Added more gaps --- docs/analysis/feature-and-usecases.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index a9b487a..01354dc 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -186,6 +186,17 @@ ## Detailed Use Cases + + + + + + + + + + + # Logan ### UC1: User Logs In From e045fecb50fc4a4cdca65ddd31020cb755552455 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:10:22 -0700 Subject: [PATCH 08/16] Fix formatting --- docs/analysis/feature-and-usecases.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 01354dc..7bb3f59 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -217,10 +217,10 @@ * A3: User clicks log in and enters credentials. ### UC2: User Logs Out -**Primary Actor:** User -**Goal:** A user logs out of the site -**Preconditions:** The user is currently logged in; The user has already registered on the site. -**Success Outcome:** The user successfully logs out of their account and are redirected back to the home page. +- **Primary Actor:** User +- **Goal:** A user logs out of the site +- **Preconditions:** The user is currently logged in; The user has already registered on the site. +- **Success Outcome:** The user successfully logs out of their account and are redirected back to the home page. ** Main Flow ** 1. User navigates to the menu and hits the log out button. From 8e6f6560bbc2f2e7d6470d9cffc0d16bc00cf05e Mon Sep 17 00:00:00 2001 From: Logan Nelson Date: Mon, 9 Mar 2026 21:04:31 -0700 Subject: [PATCH 09/16] Enhance use case documentation with preconditions and success outcomes. --- docs/analysis/feature-and-usecases.md | 70 +++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 7bb3f59..fc95444 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -223,37 +223,99 @@ - **Success Outcome:** The user successfully logs out of their account and are redirected back to the home page. ** Main Flow ** -1. User navigates to the menu and hits the log out button. +1. User opts to log out. 2. System confirms the user tries logging out 3. System logs user out. ** Alternate Flow ** -* A1: -* A2: +* A1: If the user gives invalid credentials then they are unable to log in. ### UC3 – User Registers - **Primary Actor:** User - **Goal:** User creates a new account using registration credentials. +- **Preconditions:** The user is not already registered, user has a email address. +- **Success Outcome:** The user registers with a email and password. + +** Main Flow ** +1. User opts to register for a account. +2. user submits the request to register. +3. System logs user in if registration succeeds. + +** Alternate Flow ** +* A1: If the username is already used then the user is unable to register. ### UC4 – User Accesses Game Library - **Primary Actor:** User - **Goal:** User views the catalog of available games. +- **Preconditions:** The user is already registered and logged in. +- **Success Outcome:** The user can access the library of available games. + +** Main Flow ** +1. User attempts to access game library. +2. User is prompted to sign in. +3. Upon successfully logging in the user can see all games available in the library. + +** Alternate Flow ** +* A1: User logs in before attempting to access the gaming library. ### UC5 – User Searches for Specific Games - **Primary Actor:** User - **Goal:** User searches for a specific game within the site. +- **Preconditions:** The user is able to access site +- **Success Outcome:** The user is able to search for specific games in the site. + +** Main Flow ** +1. User navigates to the site. +2. User opens search and searches for a specific game. +3. System displays games that match search criteria. + +** Alternate Flow ** +* A1: If the user is unable to access the site then they cannot search for games. + ### UC6 – User Interacts One‑on‑One - **Primary Actor:** User - **Goal:** User opens a one‑on‑one communication channel with another user. +- **Preconditions:** The user is logged in and they have already accepted a friend request. +- **Success Outcome:** The user is able to open a one-on-one chat with a friend. + +** Main Flow ** +1. User navigates to the site. +2. User logs in and opens their chat and starts a new chat with a friend. +3. One-on-one communication channel is created between the users. + +** Alternate Flow ** +* A1: If the user doesn't have any friends they cannot open a one-on-one chat. + ### UC7 – User Interacts with Multiple Users - **Primary Actor:** User - **Goal:** User opens a group chat with multiple users. +- **Preconditions:** The user is logged in and they have multiple accepted friend requests. +- **Success Outcome:** The user is open a chat with multiple friends at the same time. + +** Main Flow ** +1. User navigates to the site. +2. User logs in and opens their chat and starts a new chat picking multiple friends to interact with. +3. System opens a group chat for the users to interact. + +** Alternate Flow ** +* A1: If the user doesn't have any friends they cannot open a multiple-user chat. ### UC8 – User Befriends Other Users - **Primary Actor:** User -- **Goal:** User establishes a friendship relationship with one or more users. +- **Goal:** User creates friendship with other users. +- **Preconditions:** The user is logged in and they know the username of other users they want to befriend. +- **Success Outcome:** The user establishes a friendship with one or more users. + +** Main Flow ** +1. User navigates to the site. +2. User logs in and sends a friend request to another user. +3. System sends notification to other user that this user wants to be their friend. +4. User accepts friend request. + +** Alternate Flow ** +* A1: If the user doesn't accept the friend request then then no friendship is established. From c15535f5b81bf02924b84263d5e65a6d312c5c3d Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Mon, 9 Mar 2026 22:40:48 -0700 Subject: [PATCH 10/16] Added detailed usecases 18-25 --- docs/analysis/feature-and-usecases.md | 99 +++++++++++++++++++++------ 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index ab9725c..85f717b 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -277,85 +277,144 @@ A2. User already blocked target -> System rejects the request. - **Primary Actor:** User - **Goal:** User submits a report about inappropriate behavior or content. - **Preconditions:** User is authenticated; Target user exists; report contains valid details. -- **Success Outcome:** +- **Success Outcome:** A new report is stored and marked for moderation review. ** Main Flow ** +1. User initiates a report. +2. System verifies the target user exists. +3. System validates the report details. +4. System creates a new report entry. +5. System timestamps and stores the report. +6. System confirms submission. ** Alternate Flow ** +- A1: Missing or invalid report details -> System rejects the report. +- A2: Target user does not exist -> System rejects the report. ### UC19 – User Submits a Support Ticket - **Primary Actor:** User - **Goal:** User creates a support request for technical, account, or safety issues. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User is authenticated; Ticket includes a valid issue description +- **Success Outcome:** A new support ticked is created and queued for review. ** Main Flow ** +1. User initiates a support ticket. +2. System validates the issue description. +3. System creates a new ticket entry. +4. System assigns an ID and timestamp. +5. System stores the ticket. +6. System confirms creation. ** Alternate Flow ** - +- A1: Missing or invalid issue description -> System rejects the ticket. ### UC20 – User Views Game Progress - **Primary Actor:** User - **Goal:** User views their saved progress for a specific game. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User is authenticated; Game exists; User has progress data +- **Success Outcome:** User receives accurate progress information ** Main Flow ** +1. User requests to view game progress. +2. System verifies the game exists. +3. System retrieves the user’s progress data. +4. System returns the progress information. +5. User views their progress. ** Alternate Flow ** - +- A1: No progress data exists -> System informs the user. +- A2: Game does not exist -> System rejects the request. ### UC21 – User Updates Notification Preferences - **Primary Actor:** User - **Goal:** User customizes which notifications they receive. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User is authenticated +- **Success Outcome:** User's notification preferences are updated. ** Main Flow ** +1. User indicates intent to update notification preferences. +2. System retrieves current preferences. +3. User selects new settings. +4. System validates the new settings. +5. System updates stored preferences. +6. System confirms the update. ** Alternate Flow ** +- A1: Invalid preference values -> System rejects the update. ### UC22 – Admin Assigns User Roles - **Primary Actor:** Admin - **Goal:** Admin grants or modifies user roles such as moderator or developer. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** Admin is authenticated; Admin has permission to assign roles; Target user exists +- **Success Outcome:** User's roles are updated ** Main Flow ** +1. Admin selects a user to modify roles. +2. System verifies admin permissions. +3. System verifies the target user exists. +4. Admin selects new role(s). +5. System validates the role changes. +6. System updates the user’s roles. +7. System confirms the update. ** Alternate Flow ** - +- A1: Admin lacks permission -> System rejects the request. +- A2: Invalid or unknown role -> System rejects the assignment. ### UC23 – Admin Moderates User Reports - **Primary Actor:** Admin - **Goal:** Admin reviews submitted reports and takes appropriate action. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** Admin is authenticated; Admin has moderation permission; At least one pending report exists +- **Success Outcome:** Report is resolved and moderation action is recorded. ** Main Flow ** +1. Admin requests pending reports. +2. System retrieves all pending reports. +3. Admin selects a report to review. +4. System displays report details. +5. Admin chooses an action. +6. System validates the action. +7. System applies the moderation action. +8. System records the decision. +9. System marks the report as resolved. ** Alternate Flow ** +- A1: Admin lacks moderation permissions -> System rejects the request. +- A2: Invalid moderation action -> System rejects the action. ### UC24 – User Recovers Account - **Primary Actor:** User - **Goal:** User regains access to their account after losing credentials. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User has an existing account; User provides required recovery information +- **Success Outcome:** User regains access to their account ** Main Flow ** +1. User initiates account recovery. +2. System verifies recovery information. +3. System confirms user identity. +4. System generates recovery authorization. +5. User resets credentials. +6. System confirms recovery. ** Alternate Flow ** - +- A1: Invalid recovery information -> System rejects the request. +- A2: Identity cannot be verified -> System halts the process. ### UC25 – User Adjusts Privacy Settings - **Primary Actor:** User - **Goal:** User controls who can view their profile, activity, and online status. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User is authenticated +- **Success Outcome:** User's privacy settings are updated ** Main Flow ** +1. User requests to modify privacy settings. +2. System retrieves current settings. +3. User selects new privacy options. +4. System validates the new settings. +5. System updates the privacy configuration. +6. System confirms the update. ** Alternate Flow ** - +- A1: Invalid privacy configuration -> System rejects the update. From ab3b25f294fe7c7847a6f0215255dfb0cc6d2304 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Wed, 11 Mar 2026 09:59:39 -0700 Subject: [PATCH 11/16] Modified UC9-UC12 --- docs/analysis/feature-and-usecases.md | 93 ++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 15 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index c0d3705..b4f345a 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -336,37 +336,100 @@ ### UC9 – User Creates an Account - **Primary Actor:** New User - **Goal:** User successfully creates and registers an account. -- **Preconditions:** User should not be signed into an account -- **Success Outcome:** A new account is created +- **Preconditions:** User should not be signed into an account. +- **Success Outcome:** A new account is created and registered, and the user is logged into that new account. + +** Main Flow ** +1. User must head to the sign-in form +2. User must enter their credentials +3. System will check if accounts with similar credentials exist +4. System will create new account and log the user back in. + +** Alternate Flow ** +- A1: User must log out of the account they are currently -> create another account ### UC10 – User Plays a Game - **Primary Actor:** User - **Goal:** User opens and plays an available game. +- **Preconditions:** A game must be on the list of existing games. (For some games, user must be signed in as well) +- **Success Outcome:** The user starts playing a selected game. + +** Main Flow ** +1. User opens the main menu +2. User selects a game on the home page +3. System sends the user to the game. + +** Alternate Flow ** +- A1: User logs into a registered account -> attempt playing a game again ### UC11 – User Plays Online - **Primary Actor:** Registered User - **Goal:** User connects to online services and plays an online game. +- **Preconditions:** User is logged into a registered account and has a stable internet connection. +- **Success Outcome:** User connects to an online service for the game or app. + +** Main Flow ** +1. User starts a game or app service. +2. User selects the "Online Game" option (if available) +3. User can interact with friends in the game or app. + +** Alternate Flow ** +- A1: User logs into a registered account before playing a game ### UC12 – System Sends Inbox Letter - **Primary Actor:** System - **Goal:** System delivers a message to the user’s inbox. +- **Preconditions:** An Achievement or Request must occur +- **Success Outcome:** A letter is sent to a user's inbox + +** Main Flow ** +1. A user completes an achievement or sends a friend request to another user. +2. System processes the action and sends a letter to the recipient user's inbox. + +** Alternate Flow ** +- A1: Inbox is still in development -> Nothing happens. ### UC13 – System Alerts User of Achievement - **Primary Actor:** System - **Goal:** System notifies the user when they complete an achievement. +- **Preconditions:** +- **Success Outcome:** + +** Main Flow ** +1. ... +2. ... + +** Alternate Flow ** +- A1: ... +- A2: ... ### UC14 – User Views Game Library - **Primary Actor:** User - **Goal:** User receives the site’s library of games. +- **Preconditions:** +- **Success Outcome:** -### UC15 – User Searches for a Game/Genre -- **Primary Actor:** User -- **Goal:** User receives search results for a game, genre, or related query. +** Main Flow ** +1. ... +2. ... -### UC16 – User Becomes Friends with Another User +** Alternate Flow ** +- A1: ... +- A2: ... + +### UC15 – User Becomes Friends with Another User - **Primary Actor:** Registered User - **Goal:** User becomes friends with another user and can interact socially. +- **Preconditions:** +- **Success Outcome:** +** Main Flow ** +1. ... +2. ... + +** Alternate Flow ** +- A1: ... +- A2: ... @@ -378,7 +441,7 @@ --- # Eli -### UC17 – User Blocks Another User +### UC16 – User Blocks Another User - **Primary Actor:** User - **Goal:** User prevents another user from messaging, friending, or interacting with them. - **Preconditions:** User is authenticated; Target user exists in system; The user has not already blocked the target user @@ -396,7 +459,7 @@ A1. Target user does not exist -> System rejects the requrest. A2. User already blocked target -> System rejects the request. -### UC18 – User Reports Another User +### UC17 – User Reports Another User - **Primary Actor:** User - **Goal:** User submits a report about inappropriate behavior or content. - **Preconditions:** User is authenticated; Target user exists; report contains valid details. @@ -414,7 +477,7 @@ A2. User already blocked target -> System rejects the request. - A1: Missing or invalid report details -> System rejects the report. - A2: Target user does not exist -> System rejects the report. -### UC19 – User Submits a Support Ticket +### UC18 – User Submits a Support Ticket - **Primary Actor:** User - **Goal:** User creates a support request for technical, account, or safety issues. - **Preconditions:** User is authenticated; Ticket includes a valid issue description @@ -431,7 +494,7 @@ A2. User already blocked target -> System rejects the request. ** Alternate Flow ** - A1: Missing or invalid issue description -> System rejects the ticket. -### UC20 – User Views Game Progress +### UC19 – User Views Game Progress - **Primary Actor:** User - **Goal:** User views their saved progress for a specific game. - **Preconditions:** User is authenticated; Game exists; User has progress data @@ -448,7 +511,7 @@ A2. User already blocked target -> System rejects the request. - A1: No progress data exists -> System informs the user. - A2: Game does not exist -> System rejects the request. -### UC21 – User Updates Notification Preferences +### UC20 – User Updates Notification Preferences - **Primary Actor:** User - **Goal:** User customizes which notifications they receive. - **Preconditions:** User is authenticated @@ -466,7 +529,7 @@ A2. User already blocked target -> System rejects the request. - A1: Invalid preference values -> System rejects the update. -### UC22 – Admin Assigns User Roles +### UC21 – Admin Assigns User Roles - **Primary Actor:** Admin - **Goal:** Admin grants or modifies user roles such as moderator or developer. - **Preconditions:** Admin is authenticated; Admin has permission to assign roles; Target user exists @@ -485,7 +548,7 @@ A2. User already blocked target -> System rejects the request. - A1: Admin lacks permission -> System rejects the request. - A2: Invalid or unknown role -> System rejects the assignment. -### UC23 – Admin Moderates User Reports +### UC22 – Admin Moderates User Reports - **Primary Actor:** Admin - **Goal:** Admin reviews submitted reports and takes appropriate action. - **Preconditions:** Admin is authenticated; Admin has moderation permission; At least one pending report exists @@ -507,7 +570,7 @@ A2. User already blocked target -> System rejects the request. - A2: Invalid moderation action -> System rejects the action. -### UC24 – User Recovers Account +### UC23 – User Recovers Account - **Primary Actor:** User - **Goal:** User regains access to their account after losing credentials. - **Preconditions:** User has an existing account; User provides required recovery information @@ -525,7 +588,7 @@ A2. User already blocked target -> System rejects the request. - A1: Invalid recovery information -> System rejects the request. - A2: Identity cannot be verified -> System halts the process. -### UC25 – User Adjusts Privacy Settings +### UC24 – User Adjusts Privacy Settings - **Primary Actor:** User - **Goal:** User controls who can view their profile, activity, and online status. - **Preconditions:** User is authenticated From 137c7fa4e89a5a953f73301af91d0270a4718525 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:52:24 -0700 Subject: [PATCH 12/16] Added final changes --- docs/analysis/feature-and-usecases.md | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index b4f345a..299307e 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -203,7 +203,7 @@ - **Primary Actor:** User - **Goal:** A user logs into the site. - **Preconditions:** The user is not currently logged in; The user has already registered on the site. -- **Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that cofirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. +- **Success Outcome:** The user enters their username, password, and clicks log in and is redirected to a page that confirms they want to sign in as their username and they click Yes, sign in and are redirected to the sites homepage as a logged in user. ** Main Flow ** 1. User opens browser and enters the URl of the site. @@ -374,7 +374,7 @@ 3. User can interact with friends in the game or app. ** Alternate Flow ** -- A1: User logs into a registered account before playing a game +- A1: User logs into a registered account -> attempt playing a game again ### UC12 – System Sends Inbox Letter - **Primary Actor:** System @@ -392,44 +392,44 @@ ### UC13 – System Alerts User of Achievement - **Primary Actor:** System - **Goal:** System notifies the user when they complete an achievement. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User must complete the requirement of an achievement +- **Success Outcome:** User receives the achievement and any rewards attached to it. ** Main Flow ** -1. ... -2. ... +1. User plays a game that has an achievement they want to complete. +2. User completes the task of that achievement +3. System processes the task and gives the user any rewards ** Alternate Flow ** -- A1: ... -- A2: ... +- A1: Achievement system is still development -> Nothing happens. ### UC14 – User Views Game Library - **Primary Actor:** User -- **Goal:** User receives the site’s library of games. -- **Preconditions:** -- **Success Outcome:** +- **Goal:** User receives their library of played games. +- **Preconditions:** None +- **Success Outcome:** User receives the site’s library of games. ** Main Flow ** -1. ... -2. ... +1. User goes to the Library page in the Home Menu +2. System retrieves the user's play activity and sends all the games they recently played and favored. ** Alternate Flow ** -- A1: ... -- A2: ... +- A1: The Library is still in development -> Nothing happens. ### UC15 – User Becomes Friends with Another User - **Primary Actor:** Registered User - **Goal:** User becomes friends with another user and can interact socially. -- **Preconditions:** -- **Success Outcome:** +- **Preconditions:** User must be registered +- **Success Outcome:** User is able to become friends with another user. ** Main Flow ** -1. ... -2. ... +1. User 1 goes to the friends page in the Home Menu +2. User 1 sends a friend request to user 2 +3. User 2 accepts the request ** Alternate Flow ** -- A1: ... -- A2: ... +- A1: User 1 already sent a request -> User 2 accepts. +- A2: User 2 already sent a request to User 1 -> User 1 accepts. @@ -445,7 +445,7 @@ - **Primary Actor:** User - **Goal:** User prevents another user from messaging, friending, or interacting with them. - **Preconditions:** User is authenticated; Target user exists in system; The user has not already blocked the target user -- **Success Outcome:** Target user is added tothe user's block list and future interactions are prevented +- **Success Outcome:** Target user is added to the user's block list and future interactions are prevented ** Main Flow ** 1. User indicates intent to block another user @@ -456,7 +456,7 @@ 6. System confirms the block. ** Alternate FFlow ** -A1. Target user does not exist -> System rejects the requrest. +A1. Target user does not exist -> System rejects the request. A2. User already blocked target -> System rejects the request. ### UC17 – User Reports Another User From 9577f8aabbeccc49c5cc7c12aeb44d91cbeb2ff9 Mon Sep 17 00:00:00 2001 From: Logan Nelson Date: Thu, 12 Mar 2026 19:01:27 -0700 Subject: [PATCH 13/16] Add implementation evidence for use cases UC1-UC8 --- docs/analysis/feature-and-usecases.md | 43 +++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 299307e..b236b47 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -210,12 +210,17 @@ 2. User navigates to a menu item that requires a log in. 3. User clicks log in and puts in their credentials. - ** Alternate Flow ** * A1: User opens browser and enters the url of the site. * A2: The User navigates to another menu item that requires log in. * A3: User clicks log in and enters credentials. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L503-L519 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/account.js#L224-L256 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/controller.js#L36-L50 + ### UC2: User Logs Out - **Primary Actor:** User - **Goal:** A user logs out of the site @@ -230,6 +235,12 @@ ** Alternate Flow ** * A1: If the user gives invalid credentials then they are unable to log in. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L564 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/account.js#L494-L516 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/controller.js#L144-L160 + ### UC3 – User Registers - **Primary Actor:** User - **Goal:** User creates a new account using registration credentials. @@ -244,6 +255,12 @@ ** Alternate Flow ** * A1: If the username is already used then the user is unable to register. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/account.js#L189-L222 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L521-L548 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/controller.js#L7-L31 + ### UC4 – User Accesses Game Library - **Primary Actor:** User - **Goal:** User views the catalog of available games. @@ -258,6 +275,11 @@ ** Alternate Flow ** * A1: User logs in before attempting to access the gaming library. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L153-L177 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/menu.js#L140-L190 + ### UC5 – User Searches for Specific Games - **Primary Actor:** User - **Goal:** User searches for a specific game within the site. @@ -272,6 +294,9 @@ ** Alternate Flow ** * A1: If the user is unable to access the site then they cannot search for games. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L138-L150 ### UC6 – User Interacts One‑on‑One - **Primary Actor:** User @@ -287,6 +312,11 @@ ** Alternate Flow ** * A1: If the user doesn't have any friends they cannot open a one-on-one chat. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/conversations/controller.js#L30-L55 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L323-L379 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/friends.js#L3068-L3090 ### UC7 – User Interacts with Multiple Users - **Primary Actor:** User @@ -302,6 +332,11 @@ ** Alternate Flow ** * A1: If the user doesn't have any friends they cannot open a multiple-user chat. +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/friends.js#L2688-L2728 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L339-L351 + ### UC8 – User Befriends Other Users - **Primary Actor:** User - **Goal:** User creates friendship with other users. @@ -317,7 +352,11 @@ ** Alternate Flow ** * A1: If the user doesn't accept the friend request then then no friendship is established. - +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/friends/controller.js#L32-L124 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/friends/service.js#L77-L189 + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/index.html#L230-L237 From 4b8fc4e958dd2a92aa207b1c1734cba52b09334e Mon Sep 17 00:00:00 2001 From: ToastedToast0090 Date: Thu, 12 Mar 2026 19:48:38 -0700 Subject: [PATCH 14/16] added implementation evidence --- docs/analysis/feature-and-usecases.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index b236b47..7114a97 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -498,6 +498,9 @@ A1. Target user does not exist -> System rejects the request. A2. User already blocked target -> System rejects the request. +**Implementation Evidence** +- Not implemented in this repository + ### UC17 – User Reports Another User - **Primary Actor:** User - **Goal:** User submits a report about inappropriate behavior or content. @@ -516,6 +519,9 @@ A2. User already blocked target -> System rejects the request. - A1: Missing or invalid report details -> System rejects the report. - A2: Target user does not exist -> System rejects the report. +**Implementation Evidence** +- Not implemented in this repository + ### UC18 – User Submits a Support Ticket - **Primary Actor:** User - **Goal:** User creates a support request for technical, account, or safety issues. @@ -533,6 +539,9 @@ A2. User already blocked target -> System rejects the request. ** Alternate Flow ** - A1: Missing or invalid issue description -> System rejects the ticket. +**Implementation Evidence** +- Not implemented in this repository + ### UC19 – User Views Game Progress - **Primary Actor:** User - **Goal:** User views their saved progress for a specific game. @@ -550,6 +559,9 @@ A2. User already blocked target -> System rejects the request. - A1: No progress data exists -> System informs the user. - A2: Game does not exist -> System rejects the request. +**Implementation Evidence** +- Not implemented in this repository + ### UC20 – User Updates Notification Preferences - **Primary Actor:** User - **Goal:** User customizes which notifications they receive. @@ -568,6 +580,9 @@ A2. User already blocked target -> System rejects the request. - A1: Invalid preference values -> System rejects the update. +**Implementation Evidence** +- Not implemented in this repository + ### UC21 – Admin Assigns User Roles - **Primary Actor:** Admin - **Goal:** Admin grants or modifies user roles such as moderator or developer. @@ -587,6 +602,9 @@ A2. User already blocked target -> System rejects the request. - A1: Admin lacks permission -> System rejects the request. - A2: Invalid or unknown role -> System rejects the assignment. +**Implementation Evidence** +- Not implemented in this repository + ### UC22 – Admin Moderates User Reports - **Primary Actor:** Admin - **Goal:** Admin reviews submitted reports and takes appropriate action. @@ -608,6 +626,8 @@ A2. User already blocked target -> System rejects the request. - A1: Admin lacks moderation permissions -> System rejects the request. - A2: Invalid moderation action -> System rejects the action. +**Implementation Evidence** +- Not implemented in this repository ### UC23 – User Recovers Account - **Primary Actor:** User @@ -627,6 +647,9 @@ A2. User already blocked target -> System rejects the request. - A1: Invalid recovery information -> System rejects the request. - A2: Identity cannot be verified -> System halts the process. +**Implementation Evidence** +- Not implemented in this repository + ### UC24 – User Adjusts Privacy Settings - **Primary Actor:** User - **Goal:** User controls who can view their profile, activity, and online status. @@ -643,3 +666,6 @@ A2. User already blocked target -> System rejects the request. ** Alternate Flow ** - A1: Invalid privacy configuration -> System rejects the update. + +**Implementation Evidence** +- Not implemented in this repository \ No newline at end of file From 8c14ae24aadfaf2527b78766323562deda59c753 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Fri, 13 Mar 2026 10:01:34 -0700 Subject: [PATCH 15/16] (Alex) Began Implementation Evidence --- docs/analysis/feature-and-usecases.md | 30 +++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index 7114a97..cda3b27 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -385,7 +385,13 @@ 4. System will create new account and log the user back in. ** Alternate Flow ** -- A1: User must log out of the account they are currently -> create another account +- None + +** Implementation Evidence ** +- Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/controller.js + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/index.js + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/auth/service.js ### UC10 – User Plays a Game - **Primary Actor:** User @@ -399,7 +405,12 @@ 3. System sends the user to the game. ** Alternate Flow ** -- A1: User logs into a registered account -> attempt playing a game again +- None + +** Implementation Evidence ** +- Entry points: + - + - ### UC11 – User Plays Online - **Primary Actor:** Registered User @@ -415,6 +426,9 @@ ** Alternate Flow ** - A1: User logs into a registered account -> attempt playing a game again +** Implementation Evidence ** +- Entry points: + ### UC12 – System Sends Inbox Letter - **Primary Actor:** System - **Goal:** System delivers a message to the user’s inbox. @@ -428,6 +442,9 @@ ** Alternate Flow ** - A1: Inbox is still in development -> Nothing happens. +** Implementation Evidence ** +- Entry points: + ### UC13 – System Alerts User of Achievement - **Primary Actor:** System - **Goal:** System notifies the user when they complete an achievement. @@ -442,6 +459,9 @@ ** Alternate Flow ** - A1: Achievement system is still development -> Nothing happens. +** Implementation Evidence ** +- Entry points: + ### UC14 – User Views Game Library - **Primary Actor:** User - **Goal:** User receives their library of played games. @@ -455,6 +475,9 @@ ** Alternate Flow ** - A1: The Library is still in development -> Nothing happens. +** Implementation Evidence ** +- Entry points: + ### UC15 – User Becomes Friends with Another User - **Primary Actor:** Registered User - **Goal:** User becomes friends with another user and can interact socially. @@ -470,6 +493,9 @@ - A1: User 1 already sent a request -> User 2 accepts. - A2: User 2 already sent a request to User 1 -> User 1 accepts. +** Implementation Evidence ** +- Entry points: + From 6263e2ec96006b9ffd11e2b1e6ad7a264662b5a8 Mon Sep 17 00:00:00 2001 From: Alex Fischer <183024988+SuperGamer001@users.noreply.github.com> Date: Fri, 13 Mar 2026 10:41:07 -0700 Subject: [PATCH 16/16] (Alex) Finished Implementation Evidence --- docs/analysis/feature-and-usecases.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/analysis/feature-and-usecases.md b/docs/analysis/feature-and-usecases.md index cda3b27..1a11b1e 100644 --- a/docs/analysis/feature-and-usecases.md +++ b/docs/analysis/feature-and-usecases.md @@ -409,8 +409,8 @@ ** Implementation Evidence ** - Entry points: - - - - + - https://github.com/InterLinked-Creations/Website/blob/8ab2ec06a0feec5b09cd6eb17e4553098ae76df6/Interlinked/app/lib/js/menu.js + - https://github.com/InterLinked-Creations/Website/blob/8ab2ec06a0feec5b09cd6eb17e4553098ae76df6/scripts/gameUpdate.js ### UC11 – User Plays Online - **Primary Actor:** Registered User @@ -428,6 +428,7 @@ ** Implementation Evidence ** - Entry points: + - https://github.com/InterLinked-Creations/Website/blob/8ab2ec06a0feec5b09cd6eb17e4553098ae76df6/src/websocket/index.js ### UC12 – System Sends Inbox Letter - **Primary Actor:** System @@ -443,7 +444,7 @@ - A1: Inbox is still in development -> Nothing happens. ** Implementation Evidence ** -- Entry points: +- Entry points: _Not fully implemented yet_ ### UC13 – System Alerts User of Achievement - **Primary Actor:** System @@ -460,7 +461,7 @@ - A1: Achievement system is still development -> Nothing happens. ** Implementation Evidence ** -- Entry points: +- Entry points: _Not fully implemented yet_ ### UC14 – User Views Game Library - **Primary Actor:** User @@ -476,7 +477,7 @@ - A1: The Library is still in development -> Nothing happens. ** Implementation Evidence ** -- Entry points: +- Entry points: _Not fully implemented yet_ ### UC15 – User Becomes Friends with Another User - **Primary Actor:** Registered User @@ -495,6 +496,10 @@ ** Implementation Evidence ** - Entry points: + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/friends/controller.js + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/friends/index.js + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/src/modules/friends/service.js + - https://github.com/InterLinked-Creations/Website/blob/0514ce8c8b222c75ddb82164d9d575b4a6100d1e/Interlinked/app/lib/js/friends.js