99 lines
7.8 KiB
Markdown
99 lines
7.8 KiB
Markdown
---
|
|
type: Reference
|
|
title: Source Code Map & Navigation Directory
|
|
description: Practical navigation guide mapping source files across projects to system domains, viewmodels, services, and responsibilities.
|
|
tags: [source-map, navigation, directory, projects, maui, mvvm]
|
|
openwiki:
|
|
roles: [repository]
|
|
change_kinds: [public-api]
|
|
source_paths: [SlipItIn/MauiProgram.cs, SlipItIn.Server/Program.cs, SlipItIn.AppHost/AppHost.cs]
|
|
symbols: [MauiProgram, Program, AppHost]
|
|
validation_commands: ["dotnet build SlipItIn.slnx"]
|
|
---
|
|
|
|
# Source Code Map & Navigation Directory
|
|
|
|
This directory maps every major project, folder, and source file in the SlipItIn repository to its system domain and technical responsibility.
|
|
|
|
This navigation map [indexes backend architecture files described in](/openwiki/architecture/overview.md) the system architecture, [indexes domain model files defined in](/openwiki/domain/game-mechanics.md) the domain mechanics guide, [indexes workflow implementation files detailed in](/openwiki/workflows/slip-and-challenge.md) the workflow guide, and [indexes operational configuration files documented in](/openwiki/operations/runbook.md) the operations runbook.
|
|
|
|
---
|
|
|
|
## 1. Solution Projects (`SlipItIn.slnx`)
|
|
|
|
```
|
|
SlipItIn.slnx
|
|
├── SlipItIn.AppHost/ # Aspire distributed orchestrator
|
|
├── SlipItIn.Server/ # Web API & SignalR real-time server
|
|
├── SlipItIn.Shared/ # Shared models, DTOs & enums
|
|
├── SlipItIn.ServiceDefaults/ # Aspire OpenTelemetry & health checks
|
|
├── SlipItIn/ # .NET MAUI multi-platform client (MVVM)
|
|
└── Agents/ # Architecture & planning briefs
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Directory & Source File Map
|
|
|
|
### `.NET Aspire Orchestration` (`SlipItIn.AppHost`)
|
|
- **`AppHost.cs`**: Orchestrates application dependencies. Configures PostgreSQL (`AddPostgres("pgsql")`), references `SlipItIn.Server`, and links the MAUI client.
|
|
- **`appsettings.json`**: Aspire orchestrator configuration.
|
|
|
|
### `Service Defaults & Telemetry` (`SlipItIn.ServiceDefaults`)
|
|
- **`Extensions.cs`**: Implements `AddServiceDefaults()` and `ConfigureOpenTelemetry()`. Configures OpenTelemetry logging, metrics, tracing filters (excluding `/health` and `/alive`), service discovery, and HTTP resilience handlers.
|
|
|
|
### `Backend Web API & SignalR Server` (`SlipItIn.Server`)
|
|
- **`Program.cs`**: Entrypoint for ASP.NET Core server. Registers EF Core `IDbContextFactory`, JWT authentication middleware, SignalR query parameter token parsing, Npgsql PostgreSQL data source, OpenAPI, CORS policies, and automatic EF migrations.
|
|
- **`Controllers/AuthController.cs`**: REST API controller providing `/api/auth/register`, `/api/auth/login`, and `/api/auth/me`. Handles BCrypt password hashing and JWT token generation.
|
|
- **`Hubs/GameHub.cs`**: SignalR hub mapped to `/hubs/game`. Performs JWT claim extraction (`GetAuthenticatedUserId`), player/host authorization checks (`ValidatePlayerAccessAsync`, `ValidateHostAccessAsync`), connection ID tracking, and real-time event broadcasting.
|
|
- **`Services/IGameService.cs`**: Contract interface defining backend game operations.
|
|
- **`Services/GameService.cs`**: Core engine implementation. Handles game creation, player joining, card dealing from active phrases, slip submission, challenge creation, penalty resolution, and state serialization (`GetGameStateAsync`, `GetPlayerHandAsync`). Adds `hostPlayer` directly to `game.Players` before `context.Games.Add(game)` for EF Core navigation safety.
|
|
- **`Data/SlipItInDbContext.cs`**: Entity Framework Core DbContext mapping `Users`, `Games`, `Players`, `Phrases`, `PlayerCards`, `GameRounds`, and `SlipChallenges` to PostgreSQL tables.
|
|
- **`Migrations/`**: Auto-generated EF Core migration snapshots (`20260723193505_InitialCreate.cs`).
|
|
- **`appsettings.json` & `appsettings.Development.json`**: JWT secret keys, issuer/audience defaults, and database connection strings.
|
|
|
|
### `Shared Domain & DTOs` (`SlipItIn.Shared`)
|
|
- **`Models/User.cs`**: Entity storing user credentials, BCrypt password hashes, and user state.
|
|
- **`Models/Game.cs`**: Entity storing lobby codes, status (`GameStatus`), host ID, and duration parameters.
|
|
- **`Models/Player.cs`**: Entity tracking player scores, ready status, and SignalR connection IDs.
|
|
- **`Models/Phrase.cs`**: Entity storing phrase text and creator metadata.
|
|
- **`Models/GameRound.cs`**: Entity tracking round numbers and status (`RoundStatus`).
|
|
- **`Models/PlayerCard.cs`**: Entity linking phrases to players for specific rounds (`IsUsed` flag).
|
|
- **`Models/SlipChallenge.cs`**: Entity recording accusations, challenging/target player IDs, and challenge status (`ChallengeStatus`).
|
|
- **`DTOs/AuthDtos.cs`**: DTOs for authentication (`RegisterRequestDto`, `LoginRequestDto`, `AuthResponseDto`).
|
|
- **`DTOs/GameStateDto.cs`**: DTOs for public state (`GameStateDto`, `PlayerInfoDto`), private hand state (`PlayerHandDto`, `PlayerCardDto`), and challenge alerts (`SlipChallengeDto`).
|
|
|
|
### `Cross-Platform MAUI Client` (`SlipItIn`)
|
|
- **`MauiProgram.cs`**: Client app builder. Configures dependency injection for ViewModels and Services, fonts, debug logging, and sets up `ServiceHelper.Services`.
|
|
- **`App.xaml` & `App.xaml.cs`**: Root MAUI application class.
|
|
- **`AppShell.xaml` & `AppShell.xaml.cs`**: Shell navigation container routing between `LoginPage`, `RegisterPage`, `LobbyPage`, and `GameBoardPage`.
|
|
- **`Infrastructure/ServiceHelper.cs`**: Static service locator bridge for runtime DI resolution.
|
|
- **`Services/`**:
|
|
- `SignalRService.cs` (`ISignalRService`): WebSocket SignalR client, hub method invoker, and auto-reconnect engine.
|
|
- `GameStateService.cs` (`IGameStateService`): Central game state holder, messenger bridge (`WeakReferenceMessenger`), and offline action queue manager.
|
|
- `LocalStorageService.cs` (`ILocalStorageService`): Dual-layer local persistence (`SecureStorage` for tokens, `Preferences` for game state/offline queue).
|
|
- `AuthSessionService.cs` (`IAuthSessionService`): Authenticated user session state manager.
|
|
- `ApiService.cs` (`IApiService`): REST HTTP client for authentication endpoints.
|
|
- `AppConfigurationService.cs` (`IAppConfigurationService`): Configuration provider for API base URL and SignalR Hub URL.
|
|
- **`ViewModels/`**:
|
|
- `BaseViewModel.cs`: Abstract base ViewModel providing `IsBusy`, `StatusMessage`, and error handling helper `RunSafeAsync`.
|
|
- `LoginViewModel.cs`: Handles email/password authentication and navigation to `LobbyPage`.
|
|
- `RegisterViewModel.cs`: Handles user registration.
|
|
- `LobbyViewModel.cs`: Manages lobby creation, joining, player readiness, and game start. Implements `IRecipient` interfaces for real-time messages.
|
|
- `GameBoardViewModel.cs`: Manages game board state, player cards, slip submission, challenging, challenge resolution, and offline queueing.
|
|
- **`Views/`**:
|
|
- `LoginPage.xaml` / `.cs`: XAML login UI view.
|
|
- `RegisterPage.xaml` / `.cs`: XAML registration UI view.
|
|
- `LobbyPage.xaml` / `.cs`: XAML lobby UI view displaying lobby code and player list.
|
|
- `GameBoardPage.xaml` / `.cs`: XAML game board UI view displaying cards and player list.
|
|
- `ChallengeNotificationOverlay.xaml` / `.cs`: Reusable overlay view for challenge alerts.
|
|
- **`Messages/`**:
|
|
- `LobbyCreatedMessage.cs`, `GameStateChangedMessage.cs`, `GameStartedMessage.cs`, `PlayerHandChangedMessage.cs`, `ChallengeReceivedMessage.cs`, `ErrorOccurredMessage.cs`, `ConnectionStateChangedMessage.cs`: Strongly-typed `CommunityToolkit.Mvvm.Messaging` payloads.
|
|
- **`Models/`**:
|
|
- `QueuedGameAction.cs`: Data model for offline game action queueing.
|
|
- **`Platforms/`**: Platform-specific entry points for Android, iOS, MacCatalyst, and Windows.
|
|
|
|
### `Documentation & Specifications` (`Agents/`)
|
|
- **`Agents/Architecture.md`**: Specification document defining backend security and client MVVM/stability patterns.
|
|
- **`Agents/ProjectPlan.md`**: Project plan breakdown covering development phases.
|