1
0
Fork 0
polaris-task-force/src/components/frontend/intelligence/create.ts

72 lines
1.6 KiB
TypeScript

"use server";
import config from "@payload-config";
import { getPayload } from "payload";
import { isPayloadUser } from "@/utils/access-control/isPayloadUser";
interface CreateCampaignData {
name: string;
summary: string;
status: "concept" | "inProgress" | "completed";
startDate?: string;
endDate?: string;
description?: string;
}
async function authenticate() {
const payload = await getPayload({ config });
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 createCampaign(data: CreateCampaignData) {
try {
const { payload, user } = await authenticate();
// Filter out undefined dates
const campaignData: Record<string, any> = {
name: data.name,
summary: data.summary,
status: data.status,
owner: user.id,
};
// Only add date fields if they have values
if (data.startDate) {
campaignData.startDate = data.startDate;
}
if (data.endDate) {
campaignData.endDate = data.endDate;
}
if (data.description) {
campaignData.description = data.description;
}
const campaign = await payload.create({
collection: "campaigns",
data: campaignData as any,
depth: 1,
});
return {
success: true,
data: campaign,
};
} catch (error) {
return {
success: false,
error: error instanceof Error ? error.message : "Failed to create campaign",
};
}
}