import pathlib import uuid from uuid import UUID from fastapi import Depends, APIRouter import db.postgres as pg from config.minIO import get_upload_token from config.security import get_user_id_from_token from models.BaseResponse import BaseResponse from models.LotteryCreateReq import LotteryCreateReq from models.LotteryUpdateReq import LotteryUpdateReq amRouter = APIRouter() @amRouter.get("/ExGetList") def AmExGetList(user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} data = pg.get_all_exchange_records() return BaseResponse(data=data) @amRouter.get("/ExReset") def AMExReset(user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} data = pg.reset_all_exchange_status() return BaseResponse(data=data, message="已重新打乱顺序") @amRouter.put("/ExResetTargetStatus") def AMExResetTargetStatus( target_user_id: str, user_id: UUID = Depends(get_user_id_from_token) ): if not user_id: return {"error": "userId is required"} data = pg.reset_user_status(target_user_id) return BaseResponse(data=data) @amRouter.get("/Lottery/getUploadUrl") def getUploadUrl( filename: str | None = None, user_id: UUID = Depends(get_user_id_from_token), ): if not user_id: return {"error": "userId is required"} # 生成唯一文件名,避免覆盖 ext = pathlib.Path(filename).suffix if filename else "" # 获取文件后缀 object_name = f"{uuid.uuid4()}{ext}" # 拼接到 UUID 后面 return BaseResponse( data={ "uploadUrl": get_upload_token("image-annual-lottery", object_name), "id": object_name, } ) @amRouter.get("/Lottery/List") def AMGetLotteryList(user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} data = pg.get_all_lottery() return BaseResponse(data=data) @amRouter.post("/Lottery/Add") def AMAddLottery( data: LotteryCreateReq, user_id: UUID = Depends(get_user_id_from_token), ): if not user_id: return {"error": "userId is required"} new_data = pg.add_lottery( name=data.name, sort=data.sort, oss=data.oss, is_opened=data.is_opened, remark=data.remark, ) return BaseResponse(data=new_data) @amRouter.put("/Lottery/Update") def AMUpdateLottery( data: LotteryUpdateReq, user_id: UUID = Depends(get_user_id_from_token), ): if not user_id: return {"error": "userId is required"} updated = pg.update_lottery( id=data.id, name=data.name, sort=data.sort, oss=data.oss, is_opened=data.is_opened, remark=data.remark, ) return BaseResponse(data=updated) @amRouter.delete("/Lottery/Delete") def AMDeleteLottery(id: str, user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} data = pg.delete_lottery(id) return BaseResponse(data=data) @amRouter.patch("/Lottery/open/{item_id}") def open_lottery_item(item_id: UUID): updated = pg.reset_lottery_item(item_id) return BaseResponse(data=updated) @amRouter.patch("/Lottery/resetAll") def reset_all_lottery(): count = pg.reset_all_lottery_db() return BaseResponse(data=count)