from fastapi import APIRouter, HTTPException, status from typing import List, Optional from fastapi import FastAPI, HTTPException, Depends, Body, Path from fastapi.responses import JSONResponse from .utils.helperfx import get_mikrotik, MikrotikAPI from .schema import ( UserCreate, RegisterResponse, LogoutResponse, UserStatsResponse, ActiveUsersResponse, UserStatusResponse, ) mikrotik_router = APIRouter(tags=["Mikrotik"]) # New route to remove a user's active session @mikrotik_router.post("/users/{phone}/remove-session") async def remove_active_session( phone: str = Path(..., description="User phone number"), mikrotik: MikrotikAPI = Depends(get_mikrotik), ): """Remove an active session for a hotspot user""" response = mikrotik.remove_active_session(phone) if not response["success"]: return JSONResponse( status_code=400, content=response, ) return JSONResponse(content={"message": f"User {phone} session removed"}) @mikrotik_router.post("/users/register", response_model=RegisterResponse) async def register_user( user: UserCreate = Body(...), mikrotik: MikrotikAPI = Depends(get_mikrotik) ): """Register a new hotspot user""" response = mikrotik.add_hotspot_user( phone=user.phoneNumber, password=user.password, profile=user.profile ) print(response) if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response.__dict__ @mikrotik_router.post("/users/logout/{phone}", response_model=LogoutResponse) async def logout_user( phone: str = Path(..., description="User phone number"), mikrotik: MikrotikAPI = Depends(get_mikrotik), ): """Logout a hotspot user""" response = mikrotik.logout_hotspot_user(phone) if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response.__dict__ @mikrotik_router.post("/users/{phone}/disable", response_model=UserStatusResponse) async def disable_user( phone: str = Path(..., description="User phone number"), mikrotik: MikrotikAPI = Depends(get_mikrotik), ): """Disable a hotspot user""" response = mikrotik.set_user_status(phone, disabled=True) print(response) if not response.code == 200: return JSONResponse( status_code=400, content=response, ) return response.__dict__ @mikrotik_router.post("/users/{phone}/enable", response_model=UserStatusResponse) async def enable_user( phone: str = Path(..., description="User phone number"), mikrotik: MikrotikAPI = Depends(get_mikrotik), ): """Enable a hotspot user""" response = mikrotik.set_user_status(phone, disabled=False) if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response.__dict__ @mikrotik_router.get("/users/active", response_model=ActiveUsersResponse) async def get_active_users(mikrotik: MikrotikAPI = Depends(get_mikrotik)): """Get list of active hotspot users""" response = mikrotik.get_active_users() print(response) if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response @mikrotik_router.get("/users/stats", response_model=UserStatsResponse) async def get_users_stats( phone: Optional[str] = None, mikrotik: MikrotikAPI = Depends(get_mikrotik) ): """Get user statistics""" response = mikrotik.get_user_stats(phone) if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response.__dict__ @mikrotik_router.get("/users") async def get_users_list(mikrotik: MikrotikAPI = Depends(get_mikrotik)): """Get list of all hotspot users""" response = mikrotik.get_users_list() if not response.code == 200: return JSONResponse( status_code=400, content=response.__dict__, ) return response