from fastapi import APIRouter, HTTPException, status from .Schema import ( CreatePortalRequest, UpdatePortalRequest, PortalResponse, BaseResponse, ) from .Model import Portal portal_router = APIRouter(tags=["Portals"]) # Constants for portal names ANDROID = "Android" MIKROTIK = "MikroTik" # Get Portal by Name (Android or MikroTik) @portal_router.get( "/portals/{portal_name}", response_model=PortalResponse, status_code=status.HTTP_200_OK, ) async def get_portal_by_name(portal_name: str): portal = await Portal.get_or_none(name=portal_name) if not portal: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"Portal '{portal_name}' not found.", ) return PortalResponse.from_orm(portal) # Assign or Update Android Portal @portal_router.put( "/portals/android", response_model=BaseResponse, status_code=status.HTTP_200_OK ) async def update_android_portal(request: UpdatePortalRequest): try: portal, created = await Portal.get_or_create(name=ANDROID) except: portal, created = await Portal.get_or_create( name=ANDROID, description="Android-Link", url="https://example.com" ) portal_data = request.dict(exclude_unset=True) for key, value in portal_data.items(): setattr(portal, key, value) await portal.save() message = ( "Android portal created successfully" if created else "Android portal updated successfully" ) return BaseResponse(code=200, message=message, payload={"portal_name": ANDROID}) # Assign or Update MikroTik Portal @portal_router.put( "/portals/mikrotik", response_model=BaseResponse, status_code=status.HTTP_200_OK ) async def update_mikrotik_portal(request: UpdatePortalRequest): try: portal, created = await Portal.get_or_create(name=MIKROTIK) except: portal, created = await Portal.get_or_create( name=MIKROTIK, description="Android-Link", url="https://example.com" ) portal_data = request.dict(exclude_unset=True) for key, value in portal_data.items(): setattr(portal, key, value) await portal.save() message = ( "MikroTik portal created successfully" if created else "MikroTik portal updated successfully" ) return BaseResponse(code=200, message=message, payload={"portal_name": MIKROTIK})