144 lines
5.1 KiB
Python
144 lines
5.1 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from app.models.database import get_db
|
|
from app.models.user import UserDB, UserRole
|
|
from app.api.deps import get_current_user, get_admin_user
|
|
from app.core.response import success_response, error_response, ResponseModel
|
|
from app.models.timeperiod import (
|
|
TimePeriodDB,
|
|
TimePeriodCreate,
|
|
TimePeriodUpdate,
|
|
TimePeriodInfo
|
|
)
|
|
from typing import List, Optional
|
|
import logging
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("", response_model=ResponseModel)
|
|
async def create_time_period(
|
|
time_period: TimePeriodCreate,
|
|
db: Session = Depends(get_db),
|
|
admin: UserDB = Depends(get_admin_user)
|
|
):
|
|
"""创建配送时段"""
|
|
try:
|
|
# 检查时间段是否合理
|
|
if time_period.from_time >= time_period.to_time:
|
|
return error_response(code=400, message="开始时间必须早于结束时间")
|
|
|
|
# 创建新的时间段
|
|
db_time_period = TimePeriodDB(
|
|
name=time_period.name,
|
|
from_time=time_period.from_time,
|
|
to_time=time_period.to_time,
|
|
)
|
|
|
|
db.add(db_time_period)
|
|
db.commit()
|
|
db.refresh(db_time_period)
|
|
|
|
return success_response(message="配送时段创建成功", data=TimePeriodInfo.model_validate(db_time_period))
|
|
|
|
except Exception as e:
|
|
db.rollback()
|
|
logging.exception(f"创建配送时段失败: {str(e)}")
|
|
return error_response(code=500, message="创建配送时段失败,请稍后重试")
|
|
|
|
@router.get("", response_model=ResponseModel)
|
|
async def get_time_periods(
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""获取配送时段列表"""
|
|
try:
|
|
query = db.query(TimePeriodDB)
|
|
|
|
# 按开始时间排序
|
|
query = query.order_by(TimePeriodDB.from_time.asc())
|
|
|
|
time_periods = query.all()
|
|
|
|
return success_response(data=[TimePeriodInfo.model_validate(tp) for tp in time_periods])
|
|
|
|
except Exception as e:
|
|
logging.exception(f"获取配送时段列表失败: {str(e)}")
|
|
return error_response(code=500, message="获取配送时段列表失败,请稍后重试")
|
|
|
|
@router.get("/{time_period_id}", response_model=ResponseModel)
|
|
async def get_time_period(
|
|
time_period_id: int,
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""获取配送时段详情"""
|
|
try:
|
|
time_period = db.query(TimePeriodDB).filter(TimePeriodDB.id == time_period_id).first()
|
|
|
|
if not time_period:
|
|
return error_response(code=404, message="配送时段不存在")
|
|
|
|
return success_response(data=TimePeriodInfo.model_validate(time_period))
|
|
|
|
except Exception as e:
|
|
logging.exception(f"获取配送时段详情失败: {str(e)}")
|
|
return error_response(code=500, message="获取配送时段详情失败,请稍后重试")
|
|
|
|
@router.put("/{time_period_id}", response_model=ResponseModel)
|
|
async def update_time_period(
|
|
time_period_id: int,
|
|
time_period: TimePeriodUpdate,
|
|
db: Session = Depends(get_db),
|
|
admin: UserDB = Depends(get_admin_user)
|
|
):
|
|
"""更新配送时段"""
|
|
try:
|
|
db_time_period = db.query(TimePeriodDB).filter(TimePeriodDB.id == time_period_id).first()
|
|
|
|
if not db_time_period:
|
|
return error_response(code=404, message="配送时段不存在")
|
|
|
|
# 更新字段
|
|
if time_period.name is not None:
|
|
db_time_period.name = time_period.name
|
|
|
|
if time_period.from_time is not None:
|
|
db_time_period.from_time = time_period.from_time
|
|
|
|
if time_period.to_time is not None:
|
|
db_time_period.to_time = time_period.to_time
|
|
|
|
# 检查时间段是否合理
|
|
if db_time_period.from_time >= db_time_period.to_time:
|
|
return error_response(code=400, message="开始时间必须早于结束时间")
|
|
|
|
db.commit()
|
|
db.refresh(db_time_period)
|
|
|
|
return success_response(message="配送时段更新成功", data=TimePeriodInfo.model_validate(db_time_period))
|
|
|
|
except Exception as e:
|
|
db.rollback()
|
|
logging.exception(f"更新配送时段失败: {str(e)}")
|
|
return error_response(code=500, message="更新配送时段失败,请稍后重试")
|
|
|
|
@router.delete("/{time_period_id}", response_model=ResponseModel)
|
|
async def delete_time_period(
|
|
time_period_id: int,
|
|
db: Session = Depends(get_db),
|
|
admin: UserDB = Depends(get_admin_user)
|
|
):
|
|
"""删除配送时段"""
|
|
try:
|
|
db_time_period = db.query(TimePeriodDB).filter(TimePeriodDB.id == time_period_id).first()
|
|
|
|
if not db_time_period:
|
|
return error_response(code=404, message="配送时段不存在")
|
|
|
|
db.delete(db_time_period)
|
|
db.commit()
|
|
|
|
return success_response(message="配送时段删除成功")
|
|
|
|
except Exception as e:
|
|
db.rollback()
|
|
logging.exception(f"删除配送时段失败: {str(e)}")
|
|
return error_response(code=500, message="删除配送时段失败,请稍后重试") |