3fefc550fe
- Django backend with DRF (clubs, wrestlers, trainers, exercises, templates, trainings, homework, locations, leistungstest) - Next.js 16 frontend with React, Shadcn UI, Tailwind - JWT authentication - Full CRUD for all entities - Calendar view for trainings - Homework management system - Leistungstest tracking
4.0 KiB
4.0 KiB
Homework System Integration - Design Spec
Overview
The backend has a complete homework system with exercises, assignments, and completion tracking. The frontend currently only supports basic CRUD. This spec covers integrating all backend features into the frontend.
Backend Models
- Homework - Template with title, description, due_date, exercises
- HomeworkExerciseItem - Links exercises to homework with reps/time
- HomeworkAssignment - Assigns homework to wrestlers
- HomeworkAssignmentItem - Tracks completion of each exercise
- HomeworkStatus - Overall completion status
Frontend Integration
1. Update Types (lib/api.ts)
Add missing types:
interface IHomeworkExerciseItem {
id: number
exercise: number
exercise_name: string
reps: number | null
time_minutes: number | null
order: number
}
interface IHomework {
id: number
title: string
description: string
club: number
club_name: string
due_date: string
is_active: boolean
exercise_items: IHomeworkExerciseItem[]
exercise_count: number
created_at: string
updated_at: string
}
interface IHomeworkAssignment {
id: number
homework: number
homework_title: string
wrestler: number
wrestler_name: string
club: number
club_name: string
due_date: string
notes: string
is_completed: boolean
completion_date: string | null
items: IHomeworkAssignmentItem[]
created_at: string
}
interface IHomeworkAssignmentItem {
id: number
exercise: number
exercise_name: string
is_completed: boolean
completion_date: string | null
}
2. Homework Page - Template Management
Exercise Selection:
- When creating/editing homework, allow selecting exercises from the exercise list
- Each exercise can have reps (for rep-based) or time_minutes (for time-based)
- Drag to reorder exercises
API Integration:
GET /homework/{id}/exercise-items/- Get exercises for homeworkPOST /homework/{id}/exercise-items/- Add exercise to homeworkDELETE /homework/{id}/exercise-items/{item_id}/- Remove exercise
3. Assignments Page - View Assigned Homework
Create a new tab/section for viewing assignments:
GET /homework/assignments/- List all assignments- Filter by: homework, wrestler, completion status
- Show completion progress (e.g., "3/5 exercises completed")
Assignment Detail:
- View all exercises in the assignment
- Mark individual exercises as complete
POST /homework/assignments/{id}/complete-item/- Mark exercise complete
4. Update Distribute Flow
Current: Select wrestlers, assign homework New:
- Select wrestlers (filtered by club + groups)
- Due date is set per assignment
- Creates HomeworkAssignment with all exercise items
UI Components
Homework Templates Tab
- List all homework templates
- Create/Edit with exercise selection
- Delete template
My Homework Tab (for wrestlers)
- View assigned homework
- Track completion per exercise
- Due dates
Assignment Management Tab (for trainers)
- View all assignments
- Filter by status (pending/completed/overdue)
- Track which wrestlers completed
Data Flow
- Trainer creates Homework template with exercises
- Trainer assigns homework to wrestlers (filtered by group)
- System creates HomeworkAssignment for each wrestler
- Wrestlers see assignments and mark exercises complete
- Trainers can track completion rates
Technical Approach
Frontend Pages:
/homework- Templates list/homework/assignments- Assignments list (new)/homework/[id]/edit- Edit template with exercises
Key Changes:
- Update IHomework type with exercise_items
- Add exercise selection UI to homework form
- Create assignments list view
- Add completion tracking
API Endpoints Used:
GET/POST /homework/- CRUD templatesGET/POST /homework/{id}/exercise-items/- Manage exercisesPOST /homework/{id}/assign/- Assign to wrestlersGET /homework/assignments/- List assignmentsPOST /homework/assignments/{id}/complete-item/- Mark complete