|
import { PostgrestSingleResponse } from "@supabase/supabase-js"; |
|
import toast from "react-hot-toast"; |
|
import { FileFormat } from "src/enums/file.enum"; |
|
import { supabase } from "src/lib/api/supabase"; |
|
import { File } from "src/store/useFile"; |
|
import useUser from "src/store/useUser"; |
|
|
|
type CloudSave = { |
|
id?: string; |
|
contents: string; |
|
format: FileFormat; |
|
}; |
|
|
|
export const documentSvc = { |
|
upsert: async (args: CloudSave): Promise<PostgrestSingleResponse<string>> => { |
|
const { id: p_id = "", contents: p_content, format: p_format = FileFormat.JSON } = args; |
|
return await supabase.rpc("upsert_document", { |
|
p_content, |
|
p_format, |
|
p_id, |
|
}); |
|
}, |
|
getById: async (doc_id: string): Promise<PostgrestSingleResponse<File[]>> => { |
|
return await supabase.rpc("get_document_by_id", { doc_id }); |
|
}, |
|
getAll: async (): Promise<File[]> => { |
|
const userEmail = useUser.getState().user?.email; |
|
if (!userEmail) return []; |
|
|
|
const { data, error } = await supabase |
|
.from("document") |
|
.select() |
|
.eq("owner_email", userEmail) |
|
.order("created_at", { ascending: false }); |
|
|
|
if (error) { |
|
toast.error(error.message); |
|
return []; |
|
} |
|
|
|
return data; |
|
}, |
|
update: async (id: string, data: object) => { |
|
return await supabase.from("document").update(data).eq("id", id).select("private"); |
|
}, |
|
delete: async (id: string) => { |
|
await supabase.from("document").delete().eq("id", id); |
|
}, |
|
}; |
|
|