from fastapi import APIRouter, Depends, HTTPException, Form from sqlalchemy.orm import Session from typing import Optional from database import get_db import models from auth import require_admin router = APIRouter(prefix="/api/manufacturers", tags=["manufacturers"]) def _fmt(m: models.Manufacturer) -> dict: return { "id": m.id, "name": m.name, "representative_name": m.representative_name, "business_number": m.business_number, "phone": m.phone, "address": m.address, "is_active": m.is_active, "created_at": m.created_at.isoformat() if m.created_at else None, } @router.get("/public") def list_public(db: Session = Depends(get_db)): """인증 없이 활성 제조사 목록 반환 (회원가입 화면용)""" rows = db.query(models.Manufacturer).filter_by(is_active=True).order_by(models.Manufacturer.name).all() return [{"id": m.id, "name": m.name} for m in rows] @router.get("") def list_manufacturers(db: Session = Depends(get_db), _=Depends(require_admin)): rows = db.query(models.Manufacturer).order_by(models.Manufacturer.name).all() return [_fmt(m) for m in rows] @router.post("") def create_manufacturer( name: str = Form(...), representative_name: str = Form(""), business_number: str = Form(""), phone: str = Form(""), address: str = Form(""), db: Session = Depends(get_db), _=Depends(require_admin) ): if db.query(models.Manufacturer).filter_by(name=name).first(): raise HTTPException(400, "이미 등록된 회사명입니다.") m = models.Manufacturer( name=name, representative_name=representative_name or None, business_number=business_number or None, phone=phone or None, address=address or None, ) db.add(m); db.commit(); db.refresh(m) return _fmt(m) @router.put("/{mfr_id}") def update_manufacturer( mfr_id: int, name: str = Form(...), representative_name: str = Form(""), business_number: str = Form(""), phone: str = Form(""), address: str = Form(""), is_active: str = Form("true"), db: Session = Depends(get_db), _=Depends(require_admin) ): m = db.query(models.Manufacturer).filter_by(id=mfr_id).first() if not m: raise HTTPException(404) dup = db.query(models.Manufacturer).filter( models.Manufacturer.name == name, models.Manufacturer.id != mfr_id ).first() if dup: raise HTTPException(400, "이미 사용 중인 회사명입니다.") m.name = name m.representative_name = representative_name or None m.business_number = business_number or None m.phone = phone or None m.address = address or None m.is_active = is_active == "true" db.commit() return _fmt(m) @router.delete("/{mfr_id}") def delete_manufacturer(mfr_id: int, db: Session = Depends(get_db), _=Depends(require_admin)): m = db.query(models.Manufacturer).filter_by(id=mfr_id).first() if not m: raise HTTPException(404) db.delete(m); db.commit() return {"ok": True}