Files
Toju/toju-app/src/app/domains/authentication/README.md
Myx bc2fa7de22 fix: multiple bug fixes
isolated users, db backup, weird disconnect issues for long voice sessions,
2026-04-26 22:54:13 +02:00

3.1 KiB

Authentication Domain

Handles user authentication (login and registration) against the configured server endpoint. Provides the login, register, and user-bar UI components.

Module map

authentication/
├── application/
│   └── services/
│       └── authentication.service.ts    HTTP login/register against the active server endpoint
│
├── domain/
│   └── models/
│       └── authentication.model.ts      LoginResponse interface
│
├── feature/
│   ├── login/                       Login form component
│   ├── register/                    Registration form component
│   └── user-bar/                    Displays current user or login/register links
│
└── index.ts                         Barrel exports

Service overview

AuthenticationService resolves the API base URL from ServerDirectoryFacade, then makes POST requests for login and registration. It does not hold session state itself; after a successful login the calling component dispatches UsersActions.authenticateUser, and the users effects prepare the local persistence boundary before exposing the new user in the NgRx store.

graph TD
    Login[LoginComponent]
    Register[RegisterComponent]
    UserBar[UserBarComponent]
    Auth[AuthenticationService]
    SD[ServerDirectoryFacade]
    Store[NgRx Store]

    Login --> Auth
    Register --> Auth
    UserBar --> Store
    Auth --> SD
    Login --> Store

    click Auth "application/services/authentication.service.ts" "HTTP login/register" _blank
    click Login "feature/login/" "Login form" _blank
    click Register "feature/register/" "Registration form" _blank
    click UserBar "feature/user-bar/" "Current user display" _blank
    click SD "../server-directory/application/server-directory.facade.ts" "Resolves API URL" _blank

Login flow

sequenceDiagram
    participant User
    participant Login as LoginComponent
    participant Auth as AuthenticationService
    participant SD as ServerDirectoryFacade
    participant API as Server API
    participant Store as NgRx Store
    participant Effects as UsersEffects

    User->>Login: Submit credentials
    Login->>Auth: login(username, password)
    Auth->>SD: getApiBaseUrl()
    SD-->>Auth: https://server/api
    Auth->>API: POST /api/auth/login
    API-->>Auth: { userId, displayName }
    Auth-->>Login: success
    Login->>Store: UsersActions.authenticateUser
    Store->>Effects: prepare persisted user scope
    Effects->>Store: reset stale room/user/message state
    Effects->>Store: UsersActions.setCurrentUser

Registration flow

Registration follows the same pattern but posts to /api/auth/register with an additional displayName field. On success the user is treated as logged in and the same authenticated-user transition runs, switching the browser persistence layer to that user's local scope before the app reloads rooms and user state.

User bar

UserBarComponent reads the current user from the NgRx store. When logged in it shows the user's display name; when not logged in it shows links to the login and register views.