Files
pyisu/backend/app/routes/favorites.py
2026-03-13 14:39:43 +08:00

59 lines
2.1 KiB
Python

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"}