59 lines
2.1 KiB
Python
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"}
|