# orm.py
def done(self) -> "ToDo":
self.is_done = True
return self
def undone(self) -> "ToDo":
self.is_done = False
return self
- 인스턴스 메소드로 정의
- 이렇게 인스턴스 메소드를 정의해서 데이터를 업데이트 관리하는 이유는 유지보수가 훨씬 편하기 때문이다.
- 예를 들어 만약 is_done을 True로 업데이트할 때 이메일을 발송한다고 하면 여기에 sendEmail 같은 식으로 코드를 구현하게 되면은 이 updateDone을 호출할 때마다 이 코드가 자연적으로 호출이 돼서 좀 더 코드 반복 없이 작업을 할 수 있게 된다.
- 근데 만약 isDone을 true로 하는 업데이트 관련 코드가 밖에 있다면 여러 군데애 파편화되어 있어 반복되는 작업이 많아진다.
# repository.py
def update_todo(session: Session, todo:ToDo) -> ToDo:
session.add(instance=todo)
session.commit()
session.refresh(instance=todo)
return todo
- create 부분이랑 코드가 같다.
- 왜? 마찬가지로 업데이트된 todo 객체를 받아서 session에 추가를 해주고 session에 커밋을 하게 되면 이 때 데이터가 저장이 된다.
- 여기선 refresh가 필수는 아니지만 최신 데이터를 DB에 잘 저장된 데이터를 가져오는지 확인 차 넣어준다.
# main.py
@app.patch("/todos/{todo_id}", status_code=200)
def update_todo_handler(
todo_id : int,
is_done: bool = Body(..., embed=True),
session: Session = Depends(get_db),
):
# todo id를 조회해서 단일 todo를 조회
todo: ToDo | None = get_todo_by_todo_id(session=session, todo_id=todo_id)
# todo가 있다면
if todo:
# 밑의 일반 if문이랑 같은 의미 -> 삼항연산자
# Patch 요청으로 is_done을 true를 보내면 True로 false를 보내면 False로 응답
# 여기까지 하면 DB에 반영이 되진않는다.
todo.done() if is_done else todo.undone()
# if is_done is True:
# todo.done()
# else:
# todo.undone()
todo: ToDo = update_todo(session=session, todo=todo)
return ToDoSchema.model_validate(todo)
# 만약 todo가 없다면
raise HTTPException(status_code=404, detail="Todo Not Fount")
- ToDo id path를 통해서 먼저 접근하고자 하는 데이터가 유효한지 체크
=> ToDo가 존재하는지 확인 - ToDo가 존재하면 update
- ToDo가 존재하는 경우에 is_done 값 요청이 true면 done()를 통해 true로 update false면 undone()을 통해 false로 update
- 없다면 404 발생
swagger 확인




'FastAPI > 데이터베이스' 카테고리의 다른 글
| ORM 적용 - DELETE API (0) | 2026.06.26 |
|---|---|
| ORM 적용 - POST API (0) | 2026.06.24 |
| 파이참 - Refactoring (0) | 2026.06.16 |
| ORM 적용 - GET 단일 조회 API (0) | 2026.06.16 |
| ORM 적용 - HTTP Response 처리 (1) | 2026.06.14 |