고급 웹프로그래밍
FastAPI(planner 코드리뷰 src.routes.users)
rabbit-jun
2025. 5. 2. 14:57
코드리뷰
from fastapi import APIRouter, HTTPException, status
from src.models.users import User, UserSignIn
from src.database.connection import Database
user_router=APIRouter(
prefix= "/users",
tags = ["Users"]
)
user_db = Database(User) # User(Beamie의 Document를 상속한 MongoDB 모델 클래스)를 인자로 받는다, 전역에서 DB 객체 생성
@user_router.post("/signup")
async def sign_new_user(user: User):
"""회원가입""" # 이런식으로 작성하면 함수에 마우스를 올렸을 때 설명이 보임
user_exist = await user_db.model.find_one(User.email == user.email) # 검색조건과 일치하는 문서 하나 반환
if user_exist:
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="이미 존재하는 이메일 입니다.")
await user_db.save(user)
return {"message": "회원가입 성공"}
@user_router.post("/signin")
async def sign_user_in(credentials: UserSignIn):
"""로그인 API
이메일,비밀번호
"""
user = await user_db.model.find_one(User.email == credentials.email)
if not user:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="이메일을 찾을 수 없습니다")
if user.password != credentials.password:
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="pw가 틀립니다")
return {"message": "로그인 성공"} # 지금은 학습용이라 이렇게 메시지를 띄우지만 실제로는 토큰을 반환해서 프론트가 토큰을 받으면 다음페이지로 넘어가게 만든다
용어 설명
- HTTPException: HTTP 상태 코드와 함꼐 에러 메시지를 전달하기 위한 FastAPIT 내장 예외 클래스
- status: HTTP 상태 코드(ex. 404, 401, 200, ...)를 사람이 읽기 쉬운 이름으로 적음,
status.
를 쓰면 자동완성 목록이 뜸 - finde_one(): Beanie에서 모든 모델이 Document를 상속하고 나면 사용할 수 있는 매서드로 인자로 검색조건을 넘겨주면 해당 조건에 맞는 문서를 MongoDB에서 하나만 찾아서 반환
반응형