from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from .. import crud, schemas, auth from ..database import get_db from ..auth import get_current_user router = APIRouter(prefix="/favorites", tags=["favorites"]) @router.get("/", response_model=List[schemas.FavoriteResponse]) def get_my_favorites( db: Session = Depends(get_db), current_user: schemas.UserResponse = Depends(get_current_user) ): favorites = crud.get_favorite_courses(db, user_id=current_user.id) # Convert SQLAlchemy models to Pydantic models return [schemas.FavoriteResponse.model_validate(favorite) for favorite in favorites] @router.post("/", response_model=schemas.FavoriteResponse) def add_to_favorites( favorite: schemas.FavoriteCreate, db: Session = Depends(get_db), current_user: schemas.UserResponse = Depends(get_current_user) ): # Check if course exists course = crud.get_course_by_id(db, favorite.course_id) if not course: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Course not found" ) # Add to favorites db_favorite = crud.add_favorite_course(db, user_id=current_user.id, course_id=favorite.course_id) return schemas.FavoriteResponse.model_validate(db_favorite) @router.delete("/{course_id}", response_model=schemas.SuccessResponse) def remove_from_favorites( course_id: int, db: Session = Depends(get_db), current_user: schemas.UserResponse = Depends(get_current_user) ): # Check if course exists course = crud.get_course_by_id(db, course_id) if not course: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Course not found" ) success = crud.remove_favorite_course(db, user_id=current_user.id, course_id=course_id) if not success: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Course not in favorites" ) return {"success": True, "message": "Course removed from favorites"}