deliveryman-api/app/api/endpoints/timeperiod.py
2025-03-03 21:29:53 +08:00

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="删除配送时段失败,请稍后重试")