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="2.0.0" ) # CORS 설정 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/") async def root(): return { "message": "TK-MP BOM System API", "version": "2.0.0", "status": "running", "database": "PostgreSQL 연결됨" } @app.get("/health") 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) } # 프로젝트 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