63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from typing import List
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.schemas.character import CharacterCreate, CharacterResponse
|
|
from app.schemas.homework import HomeworkSelectableResponse
|
|
from app.crud.character import create_character, get_characters_by_user
|
|
from app.services.character_homework_service import get_homeworks_with_assignment_status, assign_homework_to_character, unassign_homework_from_character
|
|
from app.models.user import User
|
|
from app.models.character import Character
|
|
from app.core.deps import get_db, get_current_user
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("", response_model=CharacterResponse)
|
|
def register_character(
|
|
character_data: CharacterCreate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
return create_character(current_user.id, character_data, db)
|
|
|
|
|
|
@router.get("", response_model=List[CharacterResponse])
|
|
def list_my_characters(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
return get_characters_by_user(current_user.id, db)
|
|
|
|
|
|
@router.get("/{character_id}/homeworks/selectable", response_model=List[HomeworkSelectableResponse])
|
|
def get_selectable_homeworks(
|
|
character_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
character = db.query(Character).filter_by(id=character_id, user_id=current_user.id).first()
|
|
if not character:
|
|
raise HTTPException(status_code=404, detail="캐릭터를 찾을 수 없습니다.")
|
|
|
|
return get_homeworks_with_assignment_status(db, current_user.id, character_id)
|
|
|
|
@router.post("/{character_id}/homeworks/{homework_type_id}")
|
|
def assign_homework(
|
|
character_id: int,
|
|
homework_type_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
return assign_homework_to_character(db, current_user.id, character_id, homework_type_id)
|
|
|
|
|
|
@router.delete("/{character_id}/homeworks/{homework_type_id}")
|
|
def unassign_homework(
|
|
character_id: int,
|
|
homework_type_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
return unassign_homework_from_character(db, current_user.id, character_id, homework_type_id)
|