유니티 상에서 플레이어가 사망 시 fastapi로 전달하여 db에 데이터 추가

This commit is contained in:
김민구
2026-07-03 18:20:32 +09:00
parent 7f2e3101a7
commit 83bc9e3200
4 changed files with 80 additions and 14 deletions
+3 -2
View File
@@ -3,6 +3,7 @@ from sqlalchemy.orm import Session
from backend.repository.db_init import get_db
from backend.schemas.game_schema import (
AncestorDeathCreate,
DeathRecordRequest,
AncestorDeathResponse,
DialogueResponse,
SkillCreateRequest,
@@ -13,8 +14,8 @@ from backend.services import game_service
router = APIRouter(prefix="/api/game", tags=["Game"])
@router.post("/death", response_model=AncestorDeathResponse)
def record_death(req: AncestorDeathCreate, db: Session = Depends(get_db)):
return game_service.create_death_history(db=db, death_data=req)
def record_death(req: DeathRecordRequest, db: Session = Depends(get_db)):
return game_service.create_death_history(db=db, cause_of_death=req.cause_of_death)
@router.get("/npc-dialogue", response_model=DialogueResponse)
def get_npc_dialogue(current_generation: int = Query(..., description="현재 플레이어 세대"), db: Session = Depends(get_db)):
+3
View File
@@ -8,6 +8,9 @@ class AncestorDeathCreate(BaseModel):
cause_of_death: str = Field(..., description="사망 원인 (예: 가시 함정, 화염 슬라임 등)")
floor: int = Field(..., description="사망한 던전 층수")
class DeathRecordRequest(BaseModel):
cause_of_death: str = Field(..., description="사망 원인 (누구에게 죽었는지)")
class AncestorDeathResponse(BaseModel):
id: int
name: str
+25 -6
View File
@@ -1,20 +1,39 @@
import json
import re
import random
from sqlalchemy.orm import Session
from sqlalchemy import desc
from sqlalchemy import desc, func
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from backend.ai.llm import hugging_llm
from backend.repository.models import AncestorDeath
from backend.schemas.game_schema import AncestorDeathCreate, SkillCreateResponse
# 랜덤 이름 리스트 (자르반, 가렌 등 판타지 풍 이름)
RANDOM_NAMES = [
"자르반", "가렌", "럭스", "다리우스", "야스오", "티모", "아리", "이즈리얼",
"조이", "제이스", "카이사", "제드", "탈론", "리븐", "애쉬", "트린다미어",
"소나", "룰루", "유미", "레오나", "다이애나", "세주아니", "우디르", "신 짜오"
]
# 1. 선조 사망 기록 등록
def create_death_history(db: Session, death_data: AncestorDeathCreate):
def create_death_history(db: Session, cause_of_death: str):
# 세대 계산: DB에서 현재 등록된 최대 세대를 조회하여 다음 세대 번호를 계산합니다. (기록이 없다면 1세대)
max_gen = db.query(func.max(AncestorDeath.generation)).scalar()
generation = (max_gen + 1) if max_gen is not None else 1
# 랜덤 이름 선택 후 세대 접미사 추가 (예: 자르반 3세)
base_name = random.choice(RANDOM_NAMES)
name = f"{base_name} {generation}"
# 장소는 임시로 1층 설정
floor = 1
db_death = AncestorDeath(
name=death_data.name,
generation=death_data.generation,
cause_of_death=death_data.cause_of_death,
floor=death_data.floor
name=name,
generation=generation,
cause_of_death=cause_of_death,
floor=floor
)
db.add(db_death)
db.commit()