File size: 2,431 Bytes
9e798a1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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})