# Contact Management System Fixes

## Issues Fixed

### 1. ✅ Dropdown Selection (Soutěž/Tým) Not Working
**Problem:** The category dropdown was using competition aliases instead of contact categories, causing selection to fail.

**Solution:**
- Updated `ContactsAdminPage.tsx` to fetch and use `ContactCategory` data instead of competition aliases
- Changed API call from `getCompetitionAliasesPublic()` to `getContactCategories()`
- Updated dropdown to map categories correctly with `cat.id` and `cat.name`
- Changed label from "Soutěž / Tým" to "Kategorie" for clarity

**Files Modified:**
- `frontend/src/pages/admin/ContactsAdminPage.tsx`

### 2. ✅ Image Preview Not Working
**Problem:** Image URLs were relative paths, not resolving to the backend server (port 8080).

**Solution:**
- Created new utility `imageUtils.ts` with `getImageUrl()` function
- This function converts relative image URLs to absolute URLs by prefixing the backend URL
- Applied to both admin preview and table display in ContactsAdminPage
- Applied to frontend display in ContactsSection

**Files Created:**
- `frontend/src/utils/imageUtils.ts`

**Files Modified:**
- `frontend/src/pages/admin/ContactsAdminPage.tsx` - Added image URL resolution for preview and table
- `frontend/src/components/home/ContactsSection.tsx` - Added image URL resolution for frontend display

### 3. ✅ Edit/Delete Returning 500 Error (Undefined ID)
**Problem:** Contact IDs were undefined when editing or deleting, resulting in API calls to `/admin/contacts/undefined`.

**Root Cause:** The `Contact` and `ContactCategory` models used `gorm.Model` which should provide the ID field, but the JSON serialization wasn't explicitly configured.

**Solution:**
- Replaced `gorm.Model` with explicit field definitions in both `Contact` and `ContactCategory` structs
- Added explicit `ID uint` field with `json:"id"` tag
- Added `CreatedAt`, `UpdatedAt`, and `DeletedAt` fields with proper JSON tags

**Files Modified:**
- `internal/models/models.go` - Updated Contact and ContactCategory structs

### 4. ✅ Image Not Showing on Homepage
**Problem:** Contact images weren't displaying on the frontpage because URLs weren't resolved to the backend.

**Solution:**
- Applied `getImageUrl()` helper to ContactsSection component
- Now images are properly displayed in both categorized and uncategorized contact sections

**Files Modified:**
- `frontend/src/components/home/ContactsSection.tsx`

## Testing Checklist

### Backend
- [x] Backend compiles without errors
- [ ] Contact CRUD operations work (Create, Read, Update, Delete)
- [ ] Contact categories load correctly
- [ ] API returns contact IDs in JSON response
- [ ] Image uploads return correct relative paths

### Frontend
- [ ] Frontend compiles without errors
- [ ] Category dropdown populates with contact categories
- [ ] Category selection works and persists
- [ ] Image upload works
- [ ] Image preview displays in admin modal
- [ ] Contact creation succeeds
- [ ] Contact table displays images correctly
- [ ] Contact edit opens modal with correct data
- [ ] Contact update succeeds
- [ ] Contact delete succeeds
- [ ] Homepage displays contacts with images
- [ ] Categories display correctly in table

## API Endpoints Used

### Admin Endpoints (require authentication)
- `GET /api/v1/admin/contacts` - List all contacts
- `POST /api/v1/admin/contacts` - Create contact
- `PUT /api/v1/admin/contacts/:id` - Update contact
- `DELETE /api/v1/admin/contacts/:id` - Delete contact
- `GET /api/v1/admin/contacts/categories` - List all categories
- `POST /api/v1/admin/contacts/categories` - Create category
- `PUT /api/v1/admin/contacts/categories/:id` - Update category
- `DELETE /api/v1/admin/contacts/categories/:id` - Delete category

### Public Endpoints
- `GET /api/v1/contacts` - Get public contacts (grouped by category)
- `GET /api/v1/contacts/categories` - Get public contact categories

## How to Test

1. **Restart the backend** to load the updated models:
   ```bash
   # Stop current backend if running
   # Then start:
   go run main.go
   ```

2. **Rebuild and start the frontend**:
   ```bash
   cd frontend
   npm run build
   npm start
   ```

3. **Test Contact Creation**:
   - Navigate to Admin > Správa kontaktů
   - Click "Přidat kontakt"
   - Fill in name (required)
   - Select a category from dropdown (should show categories, not competitions)
   - Upload an image
   - Verify image preview appears
   - Save contact
   - Verify contact appears in table with image

4. **Test Contact Edit**:
   - Click edit icon on any contact
   - Verify modal opens with correct data
   - Verify image preview shows
   - Modify fields
   - Save
   - Verify changes persist

5. **Test Contact Delete**:
   - Click delete icon on any contact
   - Confirm deletion
   - Verify contact is removed

6. **Test Frontend Display**:
   - Navigate to homepage
   - Scroll to Kontakt section
   - Verify contacts display with images
   - Verify categories are shown correctly

## Notes

- Image URLs are now automatically converted from relative to absolute URLs
- Contact and ContactCategory models now have explicit ID fields for reliable JSON serialization
- Category dropdown is now properly connected to the contact categories system
- All CRUD operations should now work correctly with proper ID handling
