from fastapi import APIRouter, Depends, Response from sqlalchemy.orm import Session from app.common.db.session import get_db from app.common.responses.api_response import success_response from app.common.security.deps import get_current_admin, require_admin_permission from app.modules.admins.schema import AdminLoginRequest, ManualAdjustRequest from app.modules.admins.service import AdminsService auth_router = APIRouter(prefix="/api/v1/admin/auth", tags=["admin-auth"]) router = APIRouter(prefix="/api/v1/admin", tags=["admin"]) @auth_router.post("/login") def admin_login( payload: AdminLoginRequest, response: Response, db: Session = Depends(get_db), ): return {"code": 0, "message": "ok", "data": AdminsService(db).login(payload, response)} @auth_router.post("/logout") def admin_logout(response: Response, db: Session = Depends(get_db)): AdminsService(db).logout(response) return {"code": 0, "message": "ok", "data": {"success": True}} @auth_router.get("/me") def admin_me(admin=Depends(get_current_admin)): return success_response(AdminsService.serialize_admin(admin)) @router.get("/dashboard") def dashboard( _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response(AdminsService(db).dashboard()) @router.get("/users") def list_users( _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response(AdminsService(db).list_users()) @router.get("/users/{user_id}") def get_user_detail( user_id: int, _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response(AdminsService(db).get_user_detail(user_id)) @router.post("/users/{user_id}/wallet-adjust") def manual_adjust_wallet( user_id: int, payload: ManualAdjustRequest, _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response( AdminsService(db).manual_adjust_wallet(user_id, payload.amount_points, payload.reason) ) @router.get("/users/{user_id}/invite-relations") def user_invite_relations( user_id: int, _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response(AdminsService(db).user_invite_relations(user_id)) @router.get("/invite-relations") def list_invite_relations( _=Depends(require_admin_permission()), db: Session = Depends(get_db), ): return success_response(AdminsService(db).list_invite_relations())