刘涛 8c0a5f489d Initial commit: hulai admin API backend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 22:01:23 +08:00

66 行
2.6 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from app.database import get_db
from app.auth import get_current_user
from app.models.calendar import CalendarMonth
from app.schemas.calendar import CalendarMonthSchema, CalendarMonthResponse
router = APIRouter(prefix="/api/calendar", tags=["行程日历"], dependencies=[Depends(get_current_user)])
MONTH_NAMES = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
@router.get("/", response_model=list[CalendarMonthResponse])
def list_calendar(
year: int = Query(..., description="年份,如 2025"),
db: Session = Depends(get_db),
):
items = db.query(CalendarMonth).filter(CalendarMonth.year == year).order_by(CalendarMonth.month).all()
# 如果该年份还没有数据,自动初始化12个月份
if not items:
for m in range(1, 13):
month_record = CalendarMonth(
year=year,
month=m,
title=MONTH_NAMES[m - 1],
highlights=[],
events=[],
is_available=False,
)
db.add(month_record)
db.commit()
items = db.query(CalendarMonth).filter(CalendarMonth.year == year).order_by(CalendarMonth.month).all()
return [CalendarMonthResponse.model_validate(item) for item in items]
@router.put("/{year}/{month}", response_model=CalendarMonthResponse)
def update_calendar_month(year: int, month: int, req: CalendarMonthSchema, db: Session = Depends(get_db)):
item = db.query(CalendarMonth).filter(CalendarMonth.year == year, CalendarMonth.month == month).first()
if not item:
raise HTTPException(status_code=404, detail="日历月份不存在")
for key, val in req.model_dump().items():
setattr(item, key, val)
db.commit()
db.refresh(item)
return CalendarMonthResponse.model_validate(item)
@router.post("/init")
def init_calendar_year(year: int = Query(..., description="要初始化的年份"), db: Session = Depends(get_db)):
existing = db.query(CalendarMonth).filter(CalendarMonth.year == year).count()
if existing > 0:
return {"message": f"{year}年日历已存在,共{existing}条记录"}
for m in range(1, 13):
db.add(CalendarMonth(
year=year,
month=m,
title=MONTH_NAMES[m - 1],
highlights=[],
events=[],
is_available=False,
))
db.commit()
return {"message": f"{year}年12个月份初始化成功"}