fix: SQLAlchemy 2.0 호환성 및 데이터베이스 연결 안정화

- SQLAlchemy 2.0 문법 적용 (text() 함수 사용)
- 실제 PostgreSQL 연결 테스트 성공
- 프로젝트 CRUD API 완전 작동 확인
- 에러 처리 및 예외 상황 개선
- 데이터베이스 헬스체크 기능 완료

Phase 2 데이터베이스 연동 100% 완료
This commit is contained in:
Hyungi Ahn
2025-07-14 12:20:11 +09:00
parent eaf31bf754
commit 2f9107ca55

View File

@@ -1,10 +1,20 @@
from fastapi import FastAPI
from fastapi import FastAPI, Depends, HTTPException
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from sqlalchemy.orm import Session
from sqlalchemy import text
from typing import List
from . import models, schemas
from .database import SessionLocal, engine, get_db
# 데이터베이스 테이블 생성 (이미 존재하면 무시)
models.Base.metadata.create_all(bind=engine)
app = FastAPI( app = FastAPI(
title="TK-MP BOM System API", title="TK-MP BOM System API",
description="BOM (Bill of Materials) 시스템 API", description="BOM (Bill of Materials) 시스템 API - 실제 데이터베이스 연동",
version="1.0.0" version="2.0.0"
) )
# CORS 설정 # CORS 설정
@@ -20,21 +30,58 @@ app.add_middleware(
async def root(): async def root():
return { return {
"message": "TK-MP BOM System API", "message": "TK-MP BOM System API",
"version": "1.0.0", "version": "2.0.0",
"status": "running" "status": "running",
"database": "PostgreSQL 연결됨"
} }
@app.get("/health") @app.get("/health")
async def health_check(): async def health_check(db: Session = Depends(get_db)):
try:
# 데이터베이스 연결 테스트 (SQLAlchemy 2.0 문법)
result = db.execute(text("SELECT 1"))
return { return {
"status": "healthy", "status": "healthy",
"database": "connected", "database": "connected",
"api": "operational" "api": "operational",
"version": "2.0.0",
"db_test": "SUCCESS"
}
except Exception as e:
return {
"status": "error",
"database": "disconnected",
"error": str(e)
} }
@app.get("/api/projects") # 프로젝트 API
async def get_projects(): @app.get("/api/projects", response_model=schemas.ProjectResponse)
async def get_projects(db: Session = Depends(get_db)):
try:
projects = db.query(models.Project).all()
return { return {
"projects": [], "projects": projects,
"message": "프로젝트 목록 (추후 데이터베이스 연결)" "total": len(projects),
"message": f"{len(projects)}개 프로젝트 조회됨"
} }
except Exception as e:
raise HTTPException(status_code=500, detail=f"데이터베이스 오류: {str(e)}")
@app.post("/api/projects", response_model=schemas.Project)
async def create_project(project: schemas.ProjectCreate, db: Session = Depends(get_db)):
try:
db_project = models.Project(**project.dict())
db.add(db_project)
db.commit()
db.refresh(db_project)
return db_project
except Exception as e:
db.rollback()
raise HTTPException(status_code=500, detail=f"프로젝트 생성 오류: {str(e)}")
@app.get("/api/projects/{project_id}", response_model=schemas.Project)
async def get_project(project_id: int, db: Session = Depends(get_db)):
project = db.query(models.Project).filter(models.Project.id == project_id).first()
if project is None:
raise HTTPException(status_code=404, detail="프로젝트를 찾을 수 없습니다")
return project