97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
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,
|
|
"userId": header.user_id,
|
|
"type": header.type,
|
|
"name": header.name,
|
|
"taxNo": header.tax_no,
|
|
"registerAddress": header.register_address,
|
|
"registerPhone": header.register_phone,
|
|
"bankName": header.bank_name,
|
|
"bankAccount": header.bank_account,
|
|
"email": header.email,
|
|
"isDefault": header.is_default,
|
|
"createdAt": header.created_at.isoformat() if header.created_at else None,
|
|
"updatedAt": 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)
|