2026년 7월 21일 화요일

app/domain/answer/router.py



# app/domain/answer/router.py

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session

# 1. 공통 모듈 (절대 경로)
from app.database import get_session

# 3. 현재 도메인 내부 모듈 가져오기 (상대 경로)
from app.domains.answer import crud, schemas

# 2. 다른 도메인 가져오기 (as 키워드로 충돌 방지! 🌟)
from app.domains.question import crud as question_crud

router = APIRouter(prefix="/answers", tags=["answers"])
api = APIRouter(prefix="/api/answers", tags=["answers/api"])


# 🛠️ URL에서 /create를 빼고, 상태 코드는 실제 상황에 맞게 조정합니다.
@router.post(
  "/{question_id}",
  status_code=status.HTTP_201_CREATED,
  response_model=schemas.Answer,
)
def create(
  question_id: int,
  answer_in: schemas.Create,
  session: Session = Depends(get_session),
):
  # ① 충돌 없이 question_crud를 사용하여 질문이 진짜 존재하는지 검증합니다.
  db_question = question_crud.get(session=session, question_id=question_id)
  if not db_question:
    raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="질문을 찾을 수 없습니다.")

  # ② 충돌 없이 answer_crud를 사용하여 답변을 생성합니다.
  return crud.create(session=session, question_id=question_id, answer_in=answer_in)


database.py

import os from contextlib import contextmanager # contextmanager 임포트 from typing import Generator from dotenv...