dev day #65,5

This commit is contained in:
Tomas Dvorak
2025-10-20 10:40:55 +02:00
parent 9ccca365b3
commit 68e69e00cc
41 changed files with 981 additions and 1376 deletions
+154
View File
@@ -0,0 +1,154 @@
# Blog Match Link Fix - Verification Checklist
## Issue Summary
**Problem**: When creating a blog article and selecting a match from the "Propojit se zápasem" section, the match ID was not being saved to the database.
**User Evidence**: Console log showed:
```javascript
Saving article with payload: {
"title": "U17: Rýmařov...",
"category_name": "KALMAN TRADE Krajský přebor mladší dorost",
// ... other fields ...
// ❌ NO match_id field in payload
}
```
## Fix Applied
### Technical Changes
1. **Moved match linking from async callback to synchronous flow**
- Previous: Match linking happened in `createMut.onSuccess` callback (after article creation)
- New: Match linking happens in `onSubmit` function (immediately after article creation completes)
- Benefit: Prevents race conditions and React error interruptions
2. **Added comprehensive error handling**
- Separate try-catch blocks for article save and match linking
- Clear user feedback for each operation
- Logging at each step for debugging
3. **Fixed React error #310**
- Added loading state to `MatchLinkBadge` component
- Prevents rendering errors during query refetch
## Verification Steps
### 1. Check Console Logs
After applying the fix, when creating an article with a match link, you should see:
```
Match link state before submit: {
tempMatchLink: "12345",
matchIdInput: "12345",
linkedMatchId: "",
isNewArticle: true
}
Linking new article 42 with match 12345
Match link created for new article
```
### 2. Check Toast Messages
- ✅ Success: "Článek vytvořen a propojen se zápasem" (with Match ID)
- ⚠️ Partial Success: "Článek vytvořen, ale propojení se zápasem selhalo"
### 3. Check Database
Query to verify match link was saved:
```sql
SELECT * FROM article_match_links WHERE article_id = [NEW_ARTICLE_ID];
```
Should return:
- `article_id`: The ID of the newly created article
- `external_match_id`: The FACR match ID (e.g., "12345")
- `title`: The article title
### 4. Check Article List UI
- Badge should show: "Zápas: [Home Team] [Score] [Away Team]" in green (if match has score) or yellow (if no score yet)
- Should NOT show: "Nepropojeno" in gray
### 5. Check API Response
The article creation response should include match_link:
```json
{
"id": 42,
"title": "U17: Rýmařov...",
"match_link": {
"article_id": 42,
"external_match_id": "12345",
"title": "U17: Rýmařov..."
}
}
```
## Test Scenarios
### Scenario A: New Article with Match
1. Open Admin → Články → Nový článek
2. Fill in title: "Test článek"
3. Select category: "KALMAN TRADE Krajský přebor mladší dorost"
4. Click on a match in the match picker
5. Click "Uložit"
6. **Expected**: Green toast with match ID
7. **Verify**: List shows match badge with team names
### Scenario B: New Article without Match
1. Create article without selecting match
2. **Expected**: Standard success toast
3. **Verify**: List shows "Nepropojeno" badge
### Scenario C: Edit Existing Article, Add Match
1. Open existing article
2. Select a match
3. Click "Uložit"
4. **Expected**: Success toast with match info
5. **Verify**: Badge updates immediately
### Scenario D: Edit Existing Article, Change Match
1. Open article that already has a match
2. Select different match
3. Click "Uložit"
4. **Expected**: Success toast
5. **Verify**: Badge shows new match
### Scenario E: Backend Error Handling
1. Stop backend server
2. Try to create article with match
3. **Expected**: Article created locally, warning toast about match linking failure
4. Restart backend
5. **Verify**: Can manually link match by editing article
## Code Changes Summary
### Files Modified
1. `/frontend/src/pages/admin/ArticlesAdminPage.tsx`
- Lines 40-43: Added loading state to MatchLinkBadge
- Lines 655-673: Simplified createMut.onSuccess
- Lines 686-702: Simplified updateMut.onSuccess
- Lines 928-987: Refactored onSubmit with inline match linking
### Files Created
1. `/DOCS/BLOG_MATCH_LINK_FIX.md` - Detailed fix documentation
2. `/DOCS/BLOG_MATCH_LINK_VERIFICATION.md` - This file
## Rollback Plan
If issues occur, revert the ArticlesAdminPage.tsx changes:
```bash
git checkout HEAD -- frontend/src/pages/admin/ArticlesAdminPage.tsx
```
## Performance Impact
- No performance degradation
- Actually improved: One less async operation in mutation callback
- Better user experience: Immediate feedback on match linking status
## Browser Compatibility
- No new browser APIs used
- Compatible with all modern browsers (Chrome, Firefox, Safari, Edge)
- React Query handles all async state management
## Known Limitations
- Match linking requires article to be saved first (can't preview match before save)
- If backend is down, match link won't be saved (fails gracefully)
- Maximum 100 matches shown in picker (performance optimization)
## Related Documentation
- `DOCS/BLOG_CREATION_FIXED.md` - Previous blog creation fixes
- `DOCS/FACR_INTEGRATION.md` - FACR match data integration
- `DOCS/ADMIN_QUICK_REFERENCE.md` - Admin panel overview