|
from fastapi import APIRouter, HTTPException, status |
|
from .Schema import ( |
|
CreatePortalRequest, |
|
UpdatePortalRequest, |
|
PortalResponse, |
|
BaseResponse, |
|
) |
|
from .Model import Portal |
|
|
|
portal_router = APIRouter(tags=["Portals"]) |
|
|
|
|
|
ANDROID = "Android" |
|
MIKROTIK = "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) |
|
|
|
|
|
|
|
@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}) |
|
|
|
|
|
|
|
@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}) |
|
|