diff --git a/app/api/character.py b/app/api/character.py index b8305e4..5c43b9a 100644 --- a/app/api/character.py +++ b/app/api/character.py @@ -2,7 +2,7 @@ from typing import List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session -from app.schemas.character import CharacterCreate, CharacterResponse, CharacterUpdateRequest +from app.schemas.character import CharacterCreate, CharacterResponse, CharacterUpdateRequest, CharacterDetailResponse 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 @@ -92,4 +92,19 @@ def delete_character( db.delete(character) db.commit() - return {"message": "캐릭터가 삭제되었습니다."} \ No newline at end of file + return {"message": "캐릭터가 삭제되었습니다."} + +@router.get("/{character_id}", response_model=CharacterDetailResponse) +def get_character( + character_id: int, + db: Session = Depends(get_db), + current_user: User = Depends(get_current_user) +): + current_user = db.merge(current_user) + + character = db.query(Character).filter(Character.id == character_id).first() + + if not character or character.user_id != current_user.id: + raise HTTPException(status_code=403, detail="권한이 없습니다.") + + return character \ No newline at end of file diff --git a/app/api/homework.py b/app/api/homework.py index 22914ac..854da57 100644 --- a/app/api/homework.py +++ b/app/api/homework.py @@ -6,7 +6,7 @@ from typing import List from app.core.deps import get_db, get_current_user from app.models.homework import HomeworkType from app.models.user import User -from app.schemas.homework import HomeworkTypeCreate, HomeworkTypeResponse, HomeworkTypeUpdateRequest +from app.schemas.homework import HomeworkTypeCreate, HomeworkTypeResponse, HomeworkTypeUpdateRequest, HomeworkTypeDetailResponse from app.crud.homework import create_homework_type, get_homework_types_by_user router = APIRouter() @@ -75,4 +75,19 @@ def delete_homework_type( db.delete(homework_type) db.commit() - return {"message": "숙제가 삭제되었습니다."} \ No newline at end of file + return {"message": "숙제가 삭제되었습니다."} + +@router.get("/{homework_type_id}", response_model=HomeworkTypeDetailResponse) +def get_homework_type( + homework_type_id: int, + db: Session = Depends(get_db), + current_user: User = Depends(get_current_user) +): + current_user = db.merge(current_user) + + homework_type = db.query(HomeworkType).filter(HomeworkType.id == homework_type_id).first() + + if not homework_type or homework_type.user_id != current_user.id: + raise HTTPException(status_code=403, detail="권한이 없습니다.") + + return homework_type diff --git a/app/schemas/character.py b/app/schemas/character.py index f2eee4d..ed01d87 100644 --- a/app/schemas/character.py +++ b/app/schemas/character.py @@ -27,4 +27,17 @@ class CharacterResponse(BaseModel): class CharacterUpdateRequest(BaseModel): name: constr(min_length=1) server: constr(min_length=1) - power: conint(ge=0) # 0 이상 정수 \ No newline at end of file + power: conint(ge=0) # 0 이상 정수 + +class CharacterDetailResponse(BaseModel): + id: int + name: str + server: str + combat_power: int + user_id: int + created_at: datetime + updated_at: datetime + + model_config = { + "from_attributes": True + } diff --git a/app/schemas/homework.py b/app/schemas/homework.py index 376627f..f9741d1 100644 --- a/app/schemas/homework.py +++ b/app/schemas/homework.py @@ -34,4 +34,18 @@ class HomeworkTypeUpdateRequest(BaseModel): name: constr(min_length=1) description: str | None = None repeat_type: constr(min_length=1) - repeat_count: conint(ge=1) \ No newline at end of file + repeat_count: conint(ge=1) + +class HomeworkTypeDetailResponse(BaseModel): + id: int + user_id: int + title: str + description: str | None + reset_type: str + reset_time: time + clear_count: int + created_at: datetime + + model_config = { + "from_attributes": True + } \ No newline at end of file