from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from database import get_db from models.membership import Membership from models.user import User from schemas.membership import MembershipResponse, MembershipCreate, MembershipUpdate from routers.auth import get_current_user, get_current_superadmin router = APIRouter() # 获取会员充值记录列表 @router.get("/", response_model=List[MembershipResponse]) async def get_membership_records( skip: int = 0, limit: int = 100, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): # 普通用户只能查看自己公司的记录 if not current_user.is_superadmin: memberships = db.query(Membership).filter( Membership.company_code == current_user.company_code ).offset(skip).limit(limit).all() else: # 超级管理员可以查看所有记录 memberships = db.query(Membership).offset(skip).limit(limit).all() return memberships # 通过公司编码获取会员充值记录 @router.get("/{company_code}", response_model=List[MembershipResponse]) async def get_membership_by_company( company_code: str, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): # 检查用户权限:超级管理员可以访问所有公司,普通用户只能访问自己公司 if not current_user.is_superadmin and current_user.company_code != company_code: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="You don't have permission to access this company's membership records" ) memberships = db.query(Membership).filter(Membership.company_code == company_code).all() return memberships # 创建会员充值记录(仅超级管理员可操作) @router.post("/", response_model=MembershipResponse) async def create_membership( membership: MembershipCreate, current_user: User = Depends(get_current_superadmin), db: Session = Depends(get_db) ): db_membership = Membership(**membership.model_dump()) db.add(db_membership) db.commit() db.refresh(db_membership) return db_membership # 更新会员充值记录(仅超级管理员可操作) @router.put("/{membership_id}", response_model=MembershipResponse) async def update_membership( membership_id: int, membership_update: MembershipUpdate, current_user: User = Depends(get_current_superadmin), db: Session = Depends(get_db) ): db_membership = db.query(Membership).filter(Membership.id == membership_id).first() if db_membership is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Membership record with id {membership_id} not found" ) # 更新会员充值记录 update_data = membership_update.model_dump(exclude_unset=True) for field, value in update_data.items(): setattr(db_membership, field, value) db.commit() db.refresh(db_membership) return db_membership # 删除会员充值记录(仅超级管理员可操作) @router.delete("/{membership_id}") async def delete_membership( membership_id: int, current_user: User = Depends(get_current_superadmin), db: Session = Depends(get_db) ): db_membership = db.query(Membership).filter(Membership.id == membership_id).first() if db_membership is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Membership record with id {membership_id} not found" ) db.delete(db_membership) db.commit() return {"message": f"Membership record with id {membership_id} deleted successfully"}