@adventurelabs/scout-core
Version:
Core utilities and helpers for Adventure Labs Scout applications
74 lines (73 loc) • 2.86 kB
JavaScript
"use server";
import { newServerClient } from "../supabase/server";
import { EnumWebResponse, IWebResponse, } from "../types/requests";
// Get session by ID with coordinates
export async function server_get_session_by_id(sessionId, client) {
const supabase = client || (await newServerClient());
const { data, error } = await supabase.rpc("get_session_by_id", {
session_id_caller: sessionId,
});
if (error) {
console.warn("Error fetching session by id:", error.message);
return {
status: EnumWebResponse.ERROR,
msg: error.message,
data: null,
};
}
// The RPC returns an array, but we want a single session or null
const session = data && data.length > 0 ? data[0] : null;
return IWebResponse.success(session).to_compatible();
}
// Get session usage over time by herd
export async function server_get_session_usage_over_time_by_herd(herd_id, client) {
const supabase = client || (await newServerClient());
const { data, error } = await supabase.rpc("get_session_usage_over_time", {
start_date_caller: undefined,
end_date_caller: undefined,
device_id_caller: undefined,
herd_id_caller: herd_id,
});
if (error) {
return IWebResponse.error(error.message).to_compatible();
}
if (!data) {
return IWebResponse.error("No session usage data returned").to_compatible();
}
return IWebResponse.success(data).to_compatible();
}
// Get session usage over time by device
export async function server_get_session_usage_over_time_by_device(device_id, client) {
const supabase = client || (await newServerClient());
const { data, error } = await supabase.rpc("get_session_usage_over_time", {
start_date_caller: undefined,
end_date_caller: undefined,
device_id_caller: device_id,
herd_id_caller: undefined,
});
if (error) {
return IWebResponse.error(error.message).to_compatible();
}
if (!data) {
return IWebResponse.error("No session usage data returned").to_compatible();
}
return IWebResponse.success(data).to_compatible();
}
// Get events with tags by session id using RPC function
export async function server_get_events_and_tags_by_session_id(sessionId, limit = 50, offset = 0) {
const supabase = await newServerClient();
const { data, error } = await supabase.rpc("get_events_and_tags_for_session", {
session_id_caller: sessionId,
limit_caller: limit,
offset_caller: offset,
});
if (error) {
console.warn("Error fetching events and tags by session id:", error.message);
return {
status: EnumWebResponse.ERROR,
msg: error.message,
data: [],
};
}
return IWebResponse.success(data || []).to_compatible();
}