@adventurelabs/scout-core
Version:
Core utilities and helpers for Adventure Labs Scout applications
101 lines (100 loc) • 3.4 kB
JavaScript
"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,
};
}