This commit is contained in:
Tomáš Dvořák
2025-10-16 13:32:05 +02:00
commit 12cba639b9
663 changed files with 168914 additions and 0 deletions
+96
View File
@@ -0,0 +1,96 @@
# Gallery Admin Page Fix
## Problem
The gallery admin page was showing "Chyba při obnově galerie" (Error refreshing gallery) when clicking the "Obnovit z Zonerama" button. No albums were displayed even though data was visible on the frontpage.
## Root Cause
1. **Missing Backend Endpoint**: The admin page was calling `/api/v1/admin/gallery/refresh` which didn't exist in the backend
2. **Single Data Source**: The admin page only loaded from `zonerama_profile.json`, which had `albums: null`
3. **Cache Data Issues**: The Zonerama cache files contained empty/invalid data
## Changes Made
### Backend Changes
#### 1. Added `RefreshFromZonerama` Method (`internal/controllers/gallery_controller.go`)
- New endpoint handler that:
- Loads the Zonerama URL from settings database
- Validates it's a Zonerama URL
- Triggers `services.RefreshZoneramaNow()` in a goroutine (non-blocking)
- Regenerates flat gallery files after successful fetch
- Returns immediate response to avoid timeout
#### 2. Added Route (`internal/routes/routes.go`)
- Registered `POST /api/v1/admin/gallery/refresh` endpoint
- Maps to `galleryController.RefreshFromZonerama`
### Frontend Changes
#### 3. Enhanced Admin Page Resilience (`frontend/src/pages/admin/GalleryAdminPage.tsx`)
- Modified `fetchAlbums()` to load from **both** cache sources:
- `zonerama_profile.json` (primary source)
- `zonerama_albums.json` (fallback source)
- Filters out empty albums (albums without ID or title)
- Avoids duplicates when combining sources
- Matches the behavior of the frontpage `GallerySection.tsx`
## How It Works Now
1. **Admin clicks "Obnovit z Zonerama"**:
- Frontend calls `POST /api/v1/admin/gallery/refresh`
- Backend loads Zonerama URL from settings
- Backend triggers async refresh in background
- Returns success immediately
2. **Background Refresh Process**:
- Fetches profile from Zonerama API (album metadata)
- Fetches each individual album with photos
- Saves to `zonerama_albums.json`
- Updates `zonerama_profile.json`
- Regenerates `gallery.json` and `zonerama_flat.json`
3. **Admin Page Loads Albums**:
- Tries both `zonerama_profile.json` and `zonerama_albums.json`
- Combines and deduplicates results
- Filters out invalid/empty albums
- Displays combined album list
## Testing
1. **Build the backend**:
```bash
go build -o bin/fotbal-club.exe
```
✅ Compiles successfully
2. **Run the server and test**:
- Navigate to `/admin/galerie`
- Click "Obnovit z Zonerama"
- Should show success message
- Wait a few seconds and refresh page
- Albums should appear (if Zonerama API responds correctly)
## Configuration Required
Ensure the Zonerama URL is configured in Settings:
1. Go to Admin → Settings
2. Set "Gallery URL" to your Zonerama profile URL
- Example: `https://eu.zonerama.com/FKKofolaKrnov/1470757`
3. The URL must contain "zonerama.com"
## Known Issues
The current cache files (`zonerama_profile.json` and `zonerama_albums.json`) contain empty data, which suggests:
- The Zonerama external API might be experiencing issues
- The URL format might have changed
- Network connectivity issues
The "Refresh" button will trigger a fresh fetch from the Zonerama API, which should resolve this if the API is working correctly.
## Related Files
- `internal/controllers/gallery_controller.go` - Gallery endpoints
- `internal/routes/routes.go` - Route registration
- `internal/services/prefetch_service.go` - Zonerama fetch logic
- `frontend/src/pages/admin/GalleryAdminPage.tsx` - Admin UI
- `frontend/src/components/home/GallerySection.tsx` - Frontend display