Старт
This commit is contained in:
58
backend/app/routes/favorites.py
Normal file
58
backend/app/routes/favorites.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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"}
|
||||
Reference in New Issue
Block a user