mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 02:32:57 +00:00
upload
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user