Skip to content

Commit

Permalink
Update devices routes to use BFF only
Browse files Browse the repository at this point in the history
Update API schema and BFF schema to allow UI to only use BFF for devices.
  • Loading branch information
UpstreamData committed Aug 27, 2024
1 parent 40301db commit 28b2913
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 5 deletions.
16 changes: 16 additions & 0 deletions goosebit/ui/bff/devices/requests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from __future__ import annotations

from pydantic import BaseModel


class DevicesDeleteRequest(BaseModel):
devices: list[str]


class DevicesPatchRequest(BaseModel):
devices: list[str]
software: str | None = None
name: str | None = None
pinned: bool | None = None
feed: str | None = None
force_update: bool | None = None
40 changes: 39 additions & 1 deletion goosebit/ui/bff/devices/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
from tortoise.expressions import Q

from goosebit.auth import validate_user_permissions
from goosebit.models import Device, UpdateModeEnum, UpdateStateEnum
from goosebit.models import Device, Software, UpdateModeEnum, UpdateStateEnum
from goosebit.permissions import Permissions
from goosebit.updater.manager import delete_devices, get_update_manager

from ..responses import StatusResponse
from .requests import DevicesDeleteRequest, DevicesPatchRequest
from .responses import BFFDeviceResponse

router = APIRouter(prefix="/devices")
Expand All @@ -32,3 +35,38 @@ def search_filter(search_value):
total_records = await Device.all().count()

return await BFFDeviceResponse.convert(request, query, search_filter, total_records)


@router.patch(
"",
dependencies=[Security(validate_user_permissions, scopes=[Permissions.DEVICE.WRITE])],
)
async def devices_patch(_: Request, config: DevicesPatchRequest) -> StatusResponse:
for uuid in config.devices:
updater = await get_update_manager(uuid)
if config.software is not None:
if config.software == "rollout":
await updater.update_update(UpdateModeEnum.ROLLOUT, None)
elif config.software == "latest":
await updater.update_update(UpdateModeEnum.LATEST, None)
else:
software = await Software.get_or_none(id=config.software)
await updater.update_update(UpdateModeEnum.ASSIGNED, software)
if config.pinned is not None:
await updater.update_update(UpdateModeEnum.PINNED, None)
if config.name is not None:
await updater.update_name(config.name)
if config.feed is not None:
await updater.update_feed(config.feed)
if config.force_update is not None:
await updater.update_force_update(config.force_update)
return StatusResponse(success=True)


@router.delete(
"",
dependencies=[Security(validate_user_permissions, scopes=[Permissions.DEVICE.DELETE])],
)
async def devices_delete(_: Request, config: DevicesDeleteRequest) -> StatusResponse:
await delete_devices(config.devices)
return StatusResponse(success=True)
8 changes: 4 additions & 4 deletions goosebit/ui/static/js/devices.js
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ async function updateDeviceConfig() {
const software = document.getElementById("selected-sw").value;

try {
await patch_request("/api/v1/devices", { devices, name, feed, software });
await patch_request("/ui/bff/devices", { devices, name, feed, software });
} catch (error) {
console.error("Update device config failed:", error);
}
Expand All @@ -265,7 +265,7 @@ async function updateDeviceConfig() {

async function forceUpdateDevices(devices) {
try {
await patch_request("/api/v1/devices", { devices, force_update: true });
await patch_request("/ui/bff/devices", { devices, force_update: true });
} catch (error) {
console.error("Update force update state failed:", error);
}
Expand All @@ -275,7 +275,7 @@ async function forceUpdateDevices(devices) {

async function deleteDevices(devices) {
try {
await delete_request("/api/v1/devices", { devices });
await delete_request("/ui/bff/devices", { devices });
} catch (error) {
console.error("Delete device failed:", error);
}
Expand All @@ -285,7 +285,7 @@ async function deleteDevices(devices) {

async function pinDevices(devices) {
try {
await patch_request("/api/v1/devices", { devices, pinned: true });
await patch_request("/ui/bff/devices", { devices, pinned: true });
} catch (error) {
console.error("Error:", error);
}
Expand Down

0 comments on commit 28b2913

Please sign in to comment.