import uuid from typing import Any, Annotated, Optional from app.utils import validate_file_size_type, save_picture, del_picture from fastapi import APIRouter, HTTPException, UploadFile, File, Form from sqlmodel import func, select from app.api.deps import CurrentUser, SessionDep from app.models import ( ScheduleCreate, Schedule, ScheduleUpdate, Course, CoursePublicWithImages, ) router = APIRouter() @router.post("/", response_model=CoursePublicWithImages) async def create_schedule( *, session: SessionDep, current_user: CurrentUser, schedule_in: ScheduleCreate ) -> Any: schedule = Schedule.model_validate(schedule_in) session.add(schedule) session.commit() session.refresh(schedule) course = session.get(Course, schedule.course_id) return course @router.put("/{id}", response_model=CoursePublicWithImages) async def edit_schedule( *, session: SessionDep, current_user: CurrentUser, schedule_in: ScheduleUpdate, id: uuid.UUID, ) -> Any: schedule = session.get(Schedule, id) update_dict = schedule_in.model_dump(exclude_unset=True) schedule.sqlmodel_update(update_dict) session.add(schedule) session.commit() session.refresh(schedule) course = session.get(Course, schedule.course_id) return course @router.delete("/{id}", response_model=CoursePublicWithImages) async def delete_schedule( *, session: SessionDep, current_user: CurrentUser, id: uuid.UUID ) -> Any: schedule = session.get(Schedule, id) if not schedule: raise HTTPException(status_code=404, detail="schedule not found") session.delete(schedule) session.commit() course = session.get(Course, schedule.course_id) return course