diff --git a/documentation.md b/documentation.md index 8e5bc13..3c26c30 100644 --- a/documentation.md +++ b/documentation.md @@ -1,63 +1 @@ -# 📖 Application Documentation - -## Architecture Overview - -The application follows a standard **Model-View-Controller (MVC)** architecture powered by Spring Boot. - -### Core Components - -#### 1. Controllers (`com.example.PhotoGallery.Controller`) -- **`PhotoHomeController`**: Manages the main gallery view, infinite scrolling pagination, and search functionality. -- **`PhotoViewController`**: Handles individual photo details, editing metadata, tagging, and favoriting. - -#### 2. Services (`com.example.PhotoGallery.Services`) -- **`PhotoService`**: The central business logic unit. - - **Scanning**: Iterates through the configured directory. - - **Compression**: Generates thumbnails for UI performance. - - **Database Sync**: Writes metadata to the DB, handling duplicates via `DataIntegrityViolationException`. -- **`ExtractImageMetadata`**: Parses EXIF data (Camera model, ISO, Aperture, etc.) from raw images. -- **`ImageCompression`**: Handles the resizing logic for thumbnails. - -#### 3. Data Access (`com.example.PhotoGallery.Repos`) -- **`PhotoRepo`**: Spring Data JPA repository for CRUD operations and custom queries (e.g., `findAllExpect`, `getRandomPhotos`). - ---- - -## 🔄 Key Workflows - -### Image Ingestion Process -The ingestion process is triggered via the `/scanLibrary` endpoint and runs asynchronously to prevent blocking the UI. - -1. **Trigger**: User clicks "Scan Library" or API call to `/scanLibrary`. -2. **Coordination**: `ImageIngestionCoordinator` ensures the task isn't already running. -3. **Execution** (`PhotoService.writeImagesFromDirToDB`): - - Lists all files in `originalFilesPath`. - - Checks if the file already exists in the DB. - - **If New**: - 1. Compresses image to `thumbnailsPath`. - 2. Extracts metadata (Resolution, MIME type, EXIF). - 3. Saves `Photo` entity to the database. - -### Infinite Scroll -The home page uses a "Load More" mechanism: -1. The frontend tracks the current page number. -2. When scrolling near the bottom, a request is sent to `/loadMoreImages`. -3. `PhotoHomeController` fetches the next `Page` and returns a Thymeleaf fragment (`home :: images`). -4. The fragment is appended to the DOM. - ---- - -## 🗄️ Database Schema (Photo Entity) - -| Field | Description | -|-------|-------------| -| `id` | Primary Key | -| `filePath` | Relative path to the original image | -| `thumbnailPath` | Relative path to the compressed thumbnail | -| `title` | Display title (defaults to filename) | -| `tags` | List of string tags | -| `favourite` | Boolean flag for favorites | -| `height/width` | Image dimensions | -| `file_size` | Size in MB | -| `mimeType` | e.g., image/jpeg | -| `copyRight` | EXIF copyright data | \ No newline at end of file +Documenation goes here \ No newline at end of file