1- from fastapi import HTTPException
2- from uuid import UUID
3- from app .schemas .character import CharacterCreate , CharacterResponse , CharacterUpdate
4- from app .models .user import Character
51from sqlalchemy import select , delete
62from sqlalchemy .ext .asyncio import AsyncSession
7- from typing import List , Optional
3+ from app .schemas .character import CharacterCreate , CharacterUpdate
4+ from app .models .user import Character
5+ from uuid import UUID
6+ from typing import Optional , List
87
98
109async def create_character (
1110 db : AsyncSession , character_data : CharacterCreate
12- ) -> CharacterResponse :
13- if await read_character_by_character_name (db , character_data .characterName ):
14- raise HTTPException (status_code = 400 , detail = "이미 존재하는 캐릭터 이름입니다." )
15-
11+ ) -> Character :
1612 db_character = Character (
17- character_name = character_data .characterName ,
13+ character_name = character_data .character_name ,
1814 level = character_data .level ,
19- image_link = character_data .imageLink ,
15+ image_link = character_data .image_link ,
2016 )
2117
2218 db .add (db_character )
@@ -26,36 +22,39 @@ async def create_character(
2622 return db_character
2723
2824
29- async def read_characters (db : AsyncSession ) -> List [CharacterResponse ]:
25+ async def read_characters (db : AsyncSession ) -> List [Character ]:
3026 result = await db .execute (select (Character ))
31- return result .scalars ().all ()
27+ characters = result .scalars ().all ()
28+ return characters
3229
3330
3431async def read_character_by_id (
3532 db : AsyncSession , character_id : UUID
36- ) -> Optional [CharacterResponse ]:
33+ ) -> Optional [Character ]:
3734 result = await db .execute (select (Character ).where (Character .id == character_id ))
38- return result .scalars ().first ()
35+ character = result .scalars ().first ()
36+ return character
3937
4038
41- async def read_character_by_character_name (
39+ async def read_character_by_name (
4240 db : AsyncSession , character_name : str
43- ) -> Optional [CharacterResponse ]:
41+ ) -> Optional [Character ]:
4442 result = await db .execute (
4543 select (Character ).where (Character .character_name == character_name )
4644 )
47- return result .scalars ().first ()
45+ character = result .scalars ().first ()
46+ return character
4847
4948
5049async def update_character (
5150 db : AsyncSession , character_id : UUID , character_data : CharacterUpdate
52- ) -> Optional [CharacterResponse ]:
53- db_character = await read_character_by_id (db , character_id )
51+ ) -> Optional [Character ]:
52+ result = await db .execute (select (Character ).where (Character .id == character_id ))
53+ db_character = result .scalars ().first ()
5454 if not db_character :
55- raise HTTPException ( status_code = 404 , detail = "캐릭터를 찾을 수 없습니다." )
55+ return None
5656
5757 update_data = character_data .model_dump ()
58-
5958 for key , value in update_data .items ():
6059 setattr (db_character , key , value )
6160
@@ -66,13 +65,11 @@ async def update_character(
6665
6766
6867async def delete_character (db : AsyncSession , character_id : UUID ) -> bool :
69- db_character = await read_character_by_id (db , character_id )
70- if not db_character :
71- raise HTTPException (status_code = 404 , detail = "캐릭터를 찾을 수 없습니다." )
72-
73- delete_statement = delete (Character ).where (Character .id == character_id )
74-
75- await db .execute (delete_statement )
76- await db .commit ()
77-
68+ try :
69+ delete_statement = delete (Character ).where (Character .id == character_id )
70+ await db .execute (delete_statement )
71+ await db .commit ()
72+ except Exception as e :
73+ await db .rollback ()
74+ raise e
7875 return True
0 commit comments