Files
track-LICA/backend/app/api/v1/endpoints/holidays.py
duxingchen 3286a11bc7 chore: fork from IRIS track 供 LICA 部门独立运行
- 复制来源: /home/yueli/track @ 192c8ee (feature/ai-audit-update)
- 组织隔离目标: LICA
- 端口规划: 前端 8030 / 后端 8031 / 数据库 8032
- 已排除 deploy.sh、deploy_full.sh、docker-compose.prod.yml(IRIS 生产发布脚本)
- 已排除工作区未提交改动,取干净的 192c8ee 状态
2026-09-21 15:56:52 +08:00

61 lines
1.9 KiB
Python

"""节假日管理 — 工作日时长计算所需的放假日期配置"""
from datetime import date
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.models.holiday import Holiday
from app.services.auth_service import get_current_user
router = APIRouter(prefix="/holidays", tags=["节假日管理"])
class HolidayCreate(BaseModel):
day: date = Field(..., description="放假日期")
name: str | None = Field(None, max_length=100, description="放假说明")
@router.get("/")
async def list_holidays(
db: AsyncSession = Depends(get_db),
):
"""获取全部放假日期(按日期正序)"""
result = await db.execute(select(Holiday).order_by(Holiday.day.asc()))
return [
{"id": h.id, "date": h.day.isoformat(), "name": h.name}
for h in result.scalars().all()
]
@router.post("/", status_code=201)
async def create_holiday(
data: HolidayCreate,
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
):
"""添加一个放假日期"""
exists = await db.scalar(select(Holiday).where(Holiday.day == data.day))
if exists:
raise HTTPException(status_code=400, detail=f"{data.day} 已在节假日列表中")
h = Holiday(day=data.day, name=data.name)
db.add(h)
await db.commit()
await db.refresh(h)
return {"id": h.id, "date": h.day.isoformat(), "name": h.name}
@router.delete("/{holiday_id}", status_code=204)
async def delete_holiday(
holiday_id: int,
db: AsyncSession = Depends(get_db),
current_user: dict = Depends(get_current_user),
):
"""删除一个放假日期"""
h = await db.get(Holiday, holiday_id)
if not h:
raise HTTPException(status_code=404, detail="节假日不存在")
await db.delete(h)
await db.commit()