# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Architecture Overview DeepDrftHome is a .NET 9 solution consisting of multiple projects that implement a dual-database media management system: ### Core Projects - **DeepDrftWeb**: Blazor Server/WebAssembly hybrid web application using MudBlazor UI framework - **DeepDrftWeb.Client**: Blazor WebAssembly client components - **DeepDrftContent**: Web API project providing content management endpoints with API key authentication - **DeepDrftModels**: Shared data models and entities - **DeepDrftTests**: NUnit test project with comprehensive FileDatabase tests - **NetBlocks**: External dependency located at `C:\lib\NetBlocks\` ### Database Architecture The application uses a **dual-database approach**: 1. **SQL Database (SQLite)**: Stores metadata and track information via Entity Framework - Located: `../Database/deepdrft.db` - Entity: `TrackEntity` with fields for MediaPath, TrackName, Artist, Album, Genre, etc. - Context: `DeepDrftContext` with SQLite provider 2. **FileDatabase**: Custom file-based storage system for binary media content - Located: `../Database/Vaults` (configurable via `filedatabase.json`) - Manages **MediaVaults** with different types: Media, Image, Audio - Supports structured binary storage with metadata (duration, bitrate, aspect ratio) ### FileDatabase System Details The FileDatabase is the core innovation of this project: - **Vault-based Organization**: Content organized into typed vaults (MediaVaultType: Media, Image, Audio) - **Index System**: Uses JSON-based indexing with DirectoryIndex and VaultIndex structures - **Media Types**: - `AudioBinary`: Buffer + Duration + Bitrate + Extension - `ImageBinary`: Buffer + AspectRatio + Extension - `MediaBinary`: Base buffer + Extension + MIME type support - **Factory Pattern**: `MediaVaultFactory` creates appropriate vault types - **Async Operations**: All database operations are async with error swallowing ## Development Commands ### Build and Test ```bash # Build entire solution dotnet build DeepDrftHome.sln # Run all tests dotnet test DeepDrftTests/ # Run specific test class dotnet test DeepDrftTests/ --filter "FileDatabaseTests" # Build specific project dotnet build DeepDrftWeb/ dotnet build DeepDrftContent/ ``` ### Running Applications ```bash # Run main web application dotnet run --project DeepDrftWeb # Run content API dotnet run --project DeepDrftContent ``` ### Entity Framework (SQL Database) ```bash # Add migration dotnet ef migrations add MigrationName --project DeepDrftWeb # Update database dotnet ef database update --project DeepDrftWeb ``` ## Key Configuration Files - `DeepDrftWeb/appsettings.json`: SQL connection string, logging configuration - `DeepDrftContent/environment/filedatabase.json`: FileDatabase vault path configuration - `DeepDrftContent/environment/apikey.json`: API authentication (not in repo) ## Important Patterns ### FileDatabase Usage ```csharp // Initialize FileDatabase var fileDatabase = await FileDatabase.FromAsync(rootPath); // Register audio content await fileDatabase.RegisterResourceAsync("tracks", trackId, audioBinary); // Load audio content var audio = await fileDatabase.LoadResourceAsync("tracks", trackId); ``` ### Dependency Injection - FileDatabase service registration occurs in startup configuration - SQL context registered via `AddDbContext` - Repository pattern with `TrackRepository` and `TrackService` ### Testing Strategy - Comprehensive FileDatabase integration tests with temporary directories - Uses NUnit framework with async test patterns - Test isolation via unique temp directories per test - Covers vault creation, media storage, and retrieval scenarios ## Project Dependencies External dependencies include Entity Framework Core (SQLite), MudBlazor, and the custom NetBlocks library. The FileDatabase system is entirely custom-built and forms the backbone of the media storage architecture.