132 lines
4.9 KiB
Markdown
132 lines
4.9 KiB
Markdown
# Features
|
|
|
|
## Personas
|
|
|
|
- **Alice**: New user who wants to join the platform to chat with friends.
|
|
- **Bob**: Regular user, member of several salons, likes to organize group conversations.
|
|
- **Claire**: Administrator, responsible for managing roles and permissions.
|
|
- **David**: Invited user, discovers the platform via a salon invitation.
|
|
|
|
## User Registration
|
|
**Persona:** Alice
|
|
**Scenario:** User registers into the application
|
|
- Given Alice is on the registration page
|
|
- When she provides valid details (username, email, password)
|
|
- And she clicks "Register"
|
|
- Then the username, email and password are validated by the system
|
|
- And her account is created
|
|
- And she receives a confirmation message
|
|
- And she is redirected to the login page
|
|
- And she receives a welcome email
|
|
- When she tries to register with an existing email
|
|
- Then the system displays an error message
|
|
|
|
## User Login
|
|
**Persona:** Alice
|
|
**Scenario:** User logs into the application
|
|
- Given Alice is on the login page
|
|
- When she enters valid credentials (email/username and password)
|
|
- And she clicks "Login"
|
|
- Then the credentials are validated by the system
|
|
- And she is granted access to the application
|
|
- When she enters an invalid password
|
|
- Then the system displays an error message
|
|
- When she forgets her password
|
|
- Then she can request a password reset link
|
|
|
|
## Role Management
|
|
**Persona:** Claire
|
|
**Scenario:** Admin creates and assigns roles
|
|
- Given Claire is logged in as an admin
|
|
- When she navigates to the roles management page
|
|
- And she creates a new role or edits an existing one
|
|
- Then the role is saved
|
|
- And she can assign or unassign it to the users
|
|
- When she tries to assign a role to herself
|
|
- Then the system prevents self-assignment for certain roles (e.g., SuperAdmin)
|
|
- When she deletes a role
|
|
- Then the system asks for confirmation and updates all affected users
|
|
|
|
## Permission Management
|
|
**Persona:** Claire
|
|
**Scenario:** Admin manages permissions for roles
|
|
- Given Claire is logged in as an admin
|
|
- When she navigates to the permissions management page
|
|
- And she assigns or removes permissions for a role
|
|
- Then the permissions are updated
|
|
- And users with that role have the correct accesses
|
|
- When she tries to remove all permissions from a role
|
|
- Then the system warns about potential loss of access
|
|
|
|
## Send a Message
|
|
**Persona:** Bob
|
|
**Scenario:** User sends a message in a conversation
|
|
- Given Bob is logged in
|
|
- And he is in an existing conversation with other users
|
|
- When he types a message
|
|
- And he clicks "Send"
|
|
- Then the message appears in the conversation for all participants
|
|
- When he sends an empty message
|
|
- Then the system prevents sending and shows a warning
|
|
- When he sends a message with an attachment
|
|
- Then the attachment is uploaded and visible to all participants
|
|
|
|
## Read Messages
|
|
**Persona:** Alice
|
|
**Scenario:** User reads messages in a conversation
|
|
- Given Alice is logged in
|
|
- And she has joined a conversation
|
|
- When another user sends a message
|
|
- Then the message appears in the conversation in real time
|
|
- When she scrolls up, older messages are loaded
|
|
- When she marks a message as read
|
|
- Then the sender is notified (if enabled)
|
|
|
|
## Create a Conversation
|
|
**Persona:** Bob
|
|
**Scenario:** User creates a conversation with one or more users
|
|
- Given Bob is logged in
|
|
- When he clicks "New Conversation"
|
|
- And he selects one or more users
|
|
- And he clicks "Create"
|
|
- Then a new conversation is created
|
|
- And the selected users are added to the conversation
|
|
- When he tries to create a conversation with himself only
|
|
- Then the system prevents it and shows a message
|
|
|
|
## Salon Creation
|
|
**Persona:** Bob
|
|
**Scenario:** User creates a new salon
|
|
- Given Bob is logged in
|
|
- When he navigates to the "Create Salon" page
|
|
- And he provides a salon name
|
|
- And he clicks "Create"
|
|
- Then a new salon is created
|
|
- And Bob is added as a member of the salon
|
|
- When he tries to create a salon with a name that already exists
|
|
- Then the system displays an error message
|
|
|
|
## Invite Users to a Salon
|
|
**Persona:** Bob, David
|
|
**Scenario:** User invites others to join a salon
|
|
- Given Bob is logged in
|
|
- And he is a member of an existing salon
|
|
- When he selects other users to invite (including David)
|
|
- And he clicks "Invite"
|
|
- Then the selected users receive an invitation
|
|
- And they can join the salon once they accept
|
|
- When David accepts the invitation
|
|
- Then he becomes a member of the salon
|
|
- When David declines the invitation
|
|
- Then Bob is notified of the refusal
|
|
|
|
|
|
|
|
# Technical specifications
|
|
|
|
- **.NET**: Main framework for backend, API, and business logic.
|
|
- **Angular**: Framework used for developing the interactive web frontend.
|
|
- **Docker**: Containerization of services to facilitate deployment and portability.
|
|
- **Logto**: Authentication and identity management solution to secure access.
|
|
- **SQLite**: Lightweight database, ideal for local storage or testing environments.
|
|
- **Hetzner**: Hosting provider for production deployment (servers, cloud). |