@adventurelabs/scout-core
Version:
Core utilities and helpers for Adventure Labs Scout applications
84 lines (83 loc) • 2.74 kB
JavaScript
"use server";
import { newServerClient } from "../supabase/server";
import { IWebResponse, EnumWebResponse, } from "../types/requests";
export async function server_get_user_roles(herd_id) {
const supabase = await newServerClient();
// fetch user role for herd
const { data, error } = await supabase
.from("users_roles_per_herd")
.select("*")
.eq("herd_id", herd_id);
if (!data) {
return {
status: EnumWebResponse.ERROR,
msg: `No user role found for herd ${herd_id}`,
data: null,
};
}
// TODO: DETERMINE WHEN TO PASS ERROR
let response = IWebResponse.success(data);
return response.to_compatible();
}
export async function server_get_user() {
const supabase = await newServerClient();
const { data } = await supabase.auth.getUser();
const new_user = data.user;
return IWebResponse.success(new_user).to_compatible();
}
export async function server_get_users_with_herd_access(herd_id, supabaseClient) {
const supabase = supabaseClient || (await newServerClient());
const { data, error } = await supabase
.from("users_roles_per_herd")
.select(`
role,
users (
id,
username
)
`)
.eq("herd_id", herd_id);
if (error) {
return {
status: EnumWebResponse.ERROR,
msg: error.message,
data: null,
};
}
else {
// Transform the data to match IUserAndRole interface
const transformedData = data.map((item) => ({
user: item.users,
role: item.role,
}));
return IWebResponse.success(transformedData).to_compatible();
}
}
export async function server_upsert_user_with_role(herd_id, username, role) {
const supabase = await newServerClient();
// first try to get user by username
const { data: user, error: user_error } = await supabase
.from("users")
.select("*")
.eq("username", username)
.single();
if (user_error) {
return IWebResponse.error("Unable to fetch user with provided username").to_compatible();
}
if (!user) {
return IWebResponse.error("User not found").to_compatible();
}
const newRoleForDb = {
user_id: user.id,
herd_id: herd_id,
role: role,
};
// upddate or insert user role
const { data, error } = await supabase
.from("users_roles_per_herd")
.upsert(newRoleForDb);
if (error) {
return IWebResponse.error("Unable to update or add user with provided username. Ensure you have sufficient permissions.").to_compatible();
}
return IWebResponse.success(data).to_compatible();
}