Skip to content

Commit 9f5d701

Browse files
committed
feat(resources): implement resource creation and update functionality, add user resource retrieval
1 parent 459e104 commit 9f5d701

File tree

5 files changed

+462
-6
lines changed

5 files changed

+462
-6
lines changed

src/actions/auth.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,17 @@ export async function logout() {
66
const supabase = await createClient();
77
await supabase.auth.signOut();
88
}
9+
10+
export async function getAuthenticatedUser() {
11+
const supabase = await createClient();
12+
const {
13+
data: { user },
14+
error,
15+
} = await supabase.auth.getUser();
16+
17+
if (error || !user) {
18+
return null;
19+
}
20+
21+
return user;
22+
}

src/actions/resources.ts

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
"use server";
22

3-
import type { Resource } from "@/types";
3+
import type {
4+
CreateResourceInput,
5+
UpdateResourceInput,
6+
Resource,
7+
} from "@/types";
48

59
import { createClient } from "@/lib/supabase/server";
610

@@ -32,3 +36,48 @@ export const getResourceBySlug = async (
3236
if (error) throw new Error(error.message);
3337
return data;
3438
};
39+
40+
export const createResource = async (input: CreateResourceInput) => {
41+
const supabase = await createClient();
42+
const { data: userData, error: userError } = await supabase.auth.getUser();
43+
if (userError || !userData?.user) throw new Error("User not found");
44+
const { id: userId } = userData.user;
45+
const payload = { ...input, author: userId };
46+
47+
const { data, error } = await supabase
48+
.from("resources")
49+
.insert([payload])
50+
.select()
51+
.single();
52+
53+
if (error) throw new Error(`Error creating resource: ${error.message}`);
54+
return data;
55+
};
56+
57+
export const updateResource = async (
58+
id: string,
59+
input: UpdateResourceInput,
60+
) => {
61+
const supabase = await createClient();
62+
63+
const { data, error } = await supabase
64+
.from("resources")
65+
.update(input)
66+
.eq("id", id)
67+
.select()
68+
.single();
69+
70+
if (error) throw new Error(`Error updating resource: ${error.message}`);
71+
return data;
72+
};
73+
74+
export async function getUserResources(userId: string) {
75+
const supabase = await createClient();
76+
const { data, error } = await supabase
77+
.from("resources")
78+
.select(`*, category:categories (id, name)`)
79+
.eq("author", userId);
80+
81+
if (error) throw new Error(`Error fetching resources: ${error.message}`);
82+
return data;
83+
}

0 commit comments

Comments
 (0)