1
0
Fork 0
polaris-task-force/src/app/(frontend)/story/actions.ts

50 lines
1.8 KiB
TypeScript

"use server";
import config from "@payload-config";
import { getPayload } from "payload";
import type { StoryBeatState } from "@/payload-types";
import { isPayloadUser } from "@/utils/access-control/isPayloadUser";
import { markBeatRead, setBeatReaction, type StoryReaction } from "@/lib/story";
async function authenticate() {
const payloadConfig = await config;
const payload = await getPayload({ config: payloadConfig });
const { headers } = await import("next/headers");
const hdrs = await headers();
const { user } = await payload.auth({ headers: hdrs, canSetHeaders: false });
if (!isPayloadUser(user)) throw new Error("Unauthorized");
return { payload, user };
}
export async function markStoryBeatRead(
beatId: number,
): Promise<{ success: boolean; error?: string; data?: StoryBeatState }> {
try {
const { payload, user } = await authenticate();
const state = await markBeatRead(payload, { user, beatId });
return { success: true, data: state };
} catch (error) {
const message = error instanceof Error ? error.message : "Unknown error";
if (message === "Unauthorized") {
return { success: false, error: "You must be logged in." };
}
return { success: false, error: message };
}
}
export async function setStoryBeatReaction(
beatId: number,
reaction: StoryReaction | null,
): Promise<{ success: boolean; error?: string; data?: { reaction: StoryReaction | null } }> {
try {
const { payload, user } = await authenticate();
const result = await setBeatReaction(payload, { user, beatId, reaction });
return { success: true, data: result };
} catch (error) {
const message = error instanceof Error ? error.message : "Unknown error";
if (message === "Unauthorized") {
return { success: false, error: "You must be logged in." };
}
return { success: false, error: message };
}
}