@adventurelabs/scout-core
Version:
Core utilities and helpers for Adventure Labs Scout applications
81 lines (80 loc) • 2.79 kB
JavaScript
"use server";
import { newServerClient } from "../supabase/server";
import { IWebResponse } from "../types/requests";
export async function get_devices_by_herd(herd_id, client) {
// call get_devices_for_herd with rpc
const { data, error } = await client.rpc("get_devices_for_herd", {
herd_id_caller: herd_id,
});
if (!data) {
return IWebResponse.error("No devices found").to_compatible();
}
else {
let response = IWebResponse.success(data);
return response.to_compatible();
}
}
export async function serverUpdateDevice(updatedDevice) {
// delete api keys, latitide, and longitude
const device_formatted = { ...updatedDevice };
delete device_formatted.api_keys_scout;
const device_latitude = device_formatted.latitude;
const device_longitude = device_formatted.longitude;
delete device_formatted.latitude;
delete device_formatted.longitude;
delete device_formatted.recent_events;
const supabase = await newServerClient();
const { data, error } = await supabase
.from("devices")
.update(device_formatted)
.match({ id: device_formatted.id })
.select("*");
if (error) {
return IWebResponse.error(error.message).to_compatible();
}
else {
const updatedDevice = {
...data[0],
latitude: device_latitude,
longitude: device_longitude,
};
return IWebResponse.success(updatedDevice).to_compatible();
}
}
export async function serverCreateDevice(newDevice) {
const supabase = await newServerClient();
const user = await supabase.auth.getUser();
const userId = user?.data?.user?.id;
if (!userId) {
return IWebResponse.error("User not found").to_compatible();
}
newDevice.created_by = userId;
// strip id field from herd object
const { data, error } = await supabase
.from("devices")
.insert([newDevice])
.select("*");
if (error) {
// TODO: ALLOW PROPERTY INSTANTION OF CPMPATIBLE WEB RESPONSE
return IWebResponse.error(error.message).to_compatible();
}
else {
const newDevice = { ...data[0], latitude: 0, longitude: 0 };
return IWebResponse.success(newDevice).to_compatible();
}
}
export async function serverDeleteDeviceById(device_id) {
const supabase = await newServerClient();
const { data, error } = await supabase
.from("devices")
.delete()
.match({ id: device_id })
.select("*");
if (error) {
return IWebResponse.error(error.message).to_compatible();
}
else {
const deletedDevice = { ...data[0], latitude: 0, longitude: 0 };
return IWebResponse.success(deletedDevice).to_compatible();
}
}