UNPKG

@adventurelabs/scout-core

Version:

Core utilities and helpers for Adventure Labs Scout applications

101 lines (100 loc) 3.4 kB
"use server"; import { newServerClient } from "../supabase/server"; import { EnumWebResponse, IWebResponse, } from "../types/requests"; import { HerdModule, } from "../types/herd_module"; export async function get_herds(client) { const { data: herds } = await client.from("herds").select(); if (!herds) { return { status: EnumWebResponse.ERROR, msg: "No herds found", data: null, }; } else { let response = IWebResponse.success(herds); return response.to_compatible(); } } export async function get_herd_by_slug(slug) { const supabase = await newServerClient(); const { data: herds } = await supabase .from("herds") .select() .eq("slug", slug) .limit(1); if (!herds) { return { status: EnumWebResponse.ERROR, msg: "No herds found", data: null, }; } return IWebResponse.success(herds[0]); } export async function deleteHerd(herd_id) { const supabase = await newServerClient(); const { error } = await supabase.from("herds").delete().match({ id: 20 }); if (error) { return { status: EnumWebResponse.ERROR, msg: error.message, data: null, }; } else { return IWebResponse.success(true).to_compatible(); } } export async function createHerd(newHerd) { const supabase = await newServerClient(); const user = await supabase.auth.getUser(); const userId = user?.data?.user?.id; newHerd.created_by = userId; // strip id field from herd object const { data, error } = await supabase.from("herds").insert([newHerd]); if (error) { return { status: EnumWebResponse.ERROR, msg: error.message, data: null, }; } else { return IWebResponse.success(true).to_compatible(); } } export async function server_load_herd_modules() { const startTime = Date.now(); // load herds const client_supabase = await newServerClient(); let new_herds = await get_herds(client_supabase); if (new_herds.status != EnumWebResponse.SUCCESS || !new_herds.data) { return { status: EnumWebResponse.ERROR, msg: "No herds found", data: null, time_finished: Date.now(), time_sent: Date.now(), server_processing_time_ms: Date.now() - startTime, }; } let new_herd_modules = []; const herdModulePromises = new_herds.data.map((herd) => HerdModule.from_herd(herd, client_supabase)); new_herd_modules = await Promise.all(herdModulePromises); // now serialize the herd modules let serialized_herd_modules = new_herd_modules.map((herd_module) => herd_module.to_serializable()); const endTime = Date.now(); const totalLoadTime = endTime - startTime; console.log(`[server_load_herd_modules] Loaded ${new_herds.data.length} herds in ${totalLoadTime}ms (parallel processing)`); // Record the time when we're about to send the response const timeSent = Date.now(); return { status: EnumWebResponse.SUCCESS, msg: "Herd modules loaded successfully", data: serialized_herd_modules, time_finished: endTime, time_sent: timeSent, server_processing_time_ms: totalLoadTime, }; }