Files
MyClub/DOCS/GALLERY_SYSTEM_IMPLEMENTATION.md
T
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

5.4 KiB

Gallery System Implementation

Overview

Comprehensive album-based gallery system with Zonerama integration, displaying albums with photo previews, detailed album pages, and interactive photo modals.

Features Implemented

File: frontend/src/components/home/PhotosSection.tsx

  • Displays 5 most recent albums from Zonerama
  • Each album shows:
    • Cover image (first photo from album)
    • Album title
    • Date
    • Photo count
  • Links to individual album detail pages
  • "Zobrazit vše" button linking to full gallery page
  • Zonerama copyright attribution notice

File: frontend/src/pages/GalleryPage.tsx

  • Shows all available albums in a responsive grid (1/2/3 columns)
  • Albums sorted by most recent first (based on API response order)
  • Each album card displays:
    • Cover image or placeholder
    • Album title
    • Date and photo count
    • View count badge (if available)
  • Click on album navigates to album detail page
  • Zonerama attribution banner at top
  • Loading, error, and empty states

3. Album Detail Page

File: frontend/src/pages/AlbumDetailPage.tsx

  • Displays all photos from a specific album
  • Breadcrumb navigation (Home → Galerie → Album)
  • Album header with:
    • Album title
    • Date, photo count, view count
    • "Zobrazit na Zonerama" button (external link)
  • Responsive photo grid (2/3/4/5 columns based on screen size)
  • Zonerama attribution notice
  • Click on any photo opens modal preview

4. Photo Modal

File: frontend/src/components/gallery/PhotoModal.tsx

Interactive modal for photo viewing with:

  • Full-size photo display - Shows image at max 80vh height
  • Copy button - Copies image to clipboard (with fallback to URL copy)
  • Download button - Downloads image to user's device
  • View Original button - Opens photo on Zonerama website
  • Album title display
  • Zonerama copyright notice
  • Dark backdrop with blur effect
  • Responsive design

5. Backend Updates

File: internal/controllers/gallery_controller.go

Fixed: Album fetching to properly parse Zonerama API response structure:

  • Zonerama API returns {"input_link": "...", "albums": [...]}
  • Updated FetchAlbum to handle wrapped response correctly
  • Extracts first album from albums array

6. Routing

File: frontend/src/App.tsx

Added route for album detail pages:

/galerie/album/:id

API Endpoints Used

Public Endpoints

  • GET /api/v1/gallery/albums - Get all albums
  • GET /api/v1/gallery/albums/:id - Get single album with photos

Admin Endpoints (existing)

  • GET /api/v1/admin/gallery/profile - Get Zonerama profile metadata
  • POST /api/v1/admin/gallery/albums/fetch - Fetch single album from Zonerama
  • DELETE /api/v1/admin/gallery/albums/:id - Delete album

Data Flow

  1. Prefetch Service (internal/services/prefetch_service.go)

    • Periodically fetches albums from Zonerama API
    • Stores in cache/prefetch/zonerama_albums.json
    • Also maintains cache/prefetch/zonerama_profile.json for metadata
  2. Gallery Controller serves cached albums to frontend

    • Albums ordered by most recent first (based on fetch order)
    • Includes full photo data for each album
  3. Frontend Components

    • HomePage shows 5 most recent albums
    • GalleryPage shows all albums
    • AlbumDetailPage displays individual album photos
    • PhotoModal provides interactive photo viewing

Zonerama Attribution

Copyright notices added to:

  • PhotoModal: Footer with Zonerama link
  • AlbumDetailPage: Info banner above photo grid
  • GalleryPage: Info banner in header
  • PhotosSection (Homepage): Small banner above album grid

Format: "📸 Všechny fotografie jsou z platformy Zonerama"

User Experience Flow

  1. User visits homepage → sees 5 recent albums
  2. Clicks "Zobrazit vše" → navigates to full gallery
  3. Clicks on album → views all photos in album
  4. Clicks on photo → opens modal with copy/download/view original options
  5. Can navigate back via breadcrumbs or browser back button

Responsive Design

  • Mobile (base): 1 column albums, 2 column photos
  • Tablet (md): 2 column albums, 3 column photos
  • Desktop (lg): 3 column albums, 4 column photos
  • Large Desktop (xl): 5 column photos in album detail

Future Enhancements (Optional)

  • Pagination for large album collections
  • Image lazy loading optimization
  • Lightbox navigation (prev/next photo in modal)
  • Album search/filter functionality
  • Share functionality for photos/albums
  • Photo metadata display (if available from Zonerama)

Testing Checklist

  • Homepage displays 5 most recent albums
  • Gallery page shows all albums
  • Album detail page loads correctly with photos
  • Photo modal opens on photo click
  • Copy button works (image or URL fallback)
  • Download button downloads photo
  • View original link opens Zonerama page
  • All Zonerama attributions visible
  • Responsive layout works on mobile/tablet/desktop
  • Loading and error states display correctly
  • Empty states show appropriate messages
  • Navigation and breadcrumbs work correctly

Files Modified/Created

Created:

  • frontend/src/components/gallery/PhotoModal.tsx
  • frontend/src/pages/AlbumDetailPage.tsx
  • GALLERY_SYSTEM_IMPLEMENTATION.md

Modified:

  • frontend/src/pages/GalleryPage.tsx
  • frontend/src/components/home/PhotosSection.tsx
  • frontend/src/App.tsx
  • internal/controllers/gallery_controller.go