65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { createSupabaseServiceRoleClient } from "@/lib/supabase/service-role";
|
|
import type { AppUserSettings } from "@/types/app/user";
|
|
|
|
export async function getUserSettings(userId: string) {
|
|
const supabase = createSupabaseServiceRoleClient();
|
|
const { data, error } = await supabase
|
|
.from("wg_user_settings")
|
|
.select("user_id,preferences,download_preferences,updated_at")
|
|
.eq("user_id", userId)
|
|
.maybeSingle<AppUserSettings>();
|
|
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
|
|
if (data) {
|
|
return data;
|
|
}
|
|
|
|
const { data: created, error: createError } = await supabase
|
|
.from("wg_user_settings")
|
|
.insert({
|
|
user_id: userId,
|
|
preferences: {},
|
|
download_preferences: {},
|
|
})
|
|
.select("user_id,preferences,download_preferences,updated_at")
|
|
.single<AppUserSettings>();
|
|
|
|
if (createError) {
|
|
throw createError;
|
|
}
|
|
|
|
return created;
|
|
}
|
|
|
|
export async function updateUserSettings({
|
|
downloadPreferences,
|
|
preferences,
|
|
userId,
|
|
}: {
|
|
downloadPreferences?: Record<string, unknown>;
|
|
preferences?: Record<string, unknown>;
|
|
userId: string;
|
|
}) {
|
|
const current = await getUserSettings(userId);
|
|
const supabase = createSupabaseServiceRoleClient();
|
|
const { data, error } = await supabase
|
|
.from("wg_user_settings")
|
|
.update({
|
|
preferences: preferences ?? current.preferences,
|
|
download_preferences:
|
|
downloadPreferences ?? current.download_preferences,
|
|
})
|
|
.eq("user_id", userId)
|
|
.select("user_id,preferences,download_preferences,updated_at")
|
|
.single<AppUserSettings>();
|
|
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
|
|
return data;
|
|
}
|