diff --git a/backend/app/main.py b/backend/app/main.py index b3ffb6e..a7071d1 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,10 +1,20 @@ -from fastapi import FastAPI + +from fastapi import FastAPI, Depends, HTTPException 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( title="TK-MP BOM System API", - description="BOM (Bill of Materials) 시스템 API", - version="1.0.0" + description="BOM (Bill of Materials) 시스템 API - 실제 데이터베이스 연동", + version="2.0.0" ) # CORS 설정 @@ -20,21 +30,58 @@ app.add_middleware( async def root(): return { "message": "TK-MP BOM System API", - "version": "1.0.0", - "status": "running" + "version": "2.0.0", + "status": "running", + "database": "PostgreSQL 연결됨" } @app.get("/health") -async def health_check(): - return { - "status": "healthy", - "database": "connected", - "api": "operational" - } +async def health_check(db: Session = Depends(get_db)): + try: + # 데이터베이스 연결 테스트 (SQLAlchemy 2.0 문법) + result = db.execute(text("SELECT 1")) + return { + "status": "healthy", + "database": "connected", + "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") -async def get_projects(): - return { - "projects": [], - "message": "프로젝트 목록 (추후 데이터베이스 연결)" - } +# 프로젝트 API +@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 { + "projects": projects, + "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