import logging from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_db, get_current_user from app.models.user import User from app.schemas.invoice import InvoiceHeaderCreate, InvoiceHeaderOut, InvoiceHeaderUpdate from app.services.invoice_header import ( create_header, delete_header, get_user_headers, set_default_header, update_header, ) logger = logging.getLogger("videogen") router = APIRouter(prefix="/invoice-headers", tags=["invoice-headers"]) def _header_to_out(header) -> dict: return { "id": header.id, "user_id": header.user_id, "type": header.type, "name": header.name, "tax_no": header.tax_no, "register_address": header.register_address, "register_phone": header.register_phone, "bank_name": header.bank_name, "bank_account": header.bank_account, "email": header.email, "is_default": header.is_default, "created_at": header.created_at.isoformat() if header.created_at else None, "updated_at": header.updated_at.isoformat() if header.updated_at else None, } @router.post("", response_model=InvoiceHeaderOut) async def create_invoice_header( req: InvoiceHeaderCreate, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """创建发票抬头。""" header = await create_header(db, current_user.id, req) await db.commit() return _header_to_out(header) @router.get("") async def list_invoice_headers( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """获取当前用户的所有发票抬头。""" headers = await get_user_headers(db, current_user.id) return {"items": [_header_to_out(h) for h in headers]} @router.put("/{header_id}", response_model=InvoiceHeaderOut) async def update_invoice_header( header_id: str, req: InvoiceHeaderUpdate, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """更新发票抬头。""" header = await update_header(db, header_id, current_user.id, req) await db.commit() return _header_to_out(header) @router.delete("/{header_id}") async def delete_invoice_header( header_id: str, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """删除发票抬头。""" await delete_header(db, header_id, current_user.id) await db.commit() return {"success": True} @router.put("/{header_id}/set-default", response_model=InvoiceHeaderOut) async def set_default_invoice_header( header_id: str, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """设置默认发票抬头。""" header = await set_default_header(db, header_id, current_user.id) await db.commit() return _header_to_out(header)