import { z } from 'zod'; import { ENTITY_TYPE } from '@/lib/constants'; import { uuid } from '@/lib/crypto'; import { getRandomChars } from '@/lib/generate'; import { parseRequest } from '@/lib/request'; import { json, unauthorized } from '@/lib/response'; import { anyObjectParam, filterParams, pagingParams } from '@/lib/schema'; import { canUpdateWebsite, canViewWebsite } from '@/permissions'; import { createShare, getSharesByEntityId } from '@/queries/prisma'; export async function GET( request: Request, { params }: { params: Promise<{ websiteId: string }> }, ) { const schema = z.object({ ...filterParams, ...pagingParams, }); const { auth, query, error } = await parseRequest(request, schema); if (error) { return error(); } const { websiteId } = await params; const { page, pageSize, search } = query; if (!(await canViewWebsite(auth, websiteId))) { return unauthorized(); } const data = await getSharesByEntityId(websiteId, { page, pageSize, search, }); return json(data); } export async function POST( request: Request, { params }: { params: Promise<{ websiteId: string }> }, ) { const schema = z.object({ parameters: anyObjectParam.optional(), }); const { auth, body, error } = await parseRequest(request, schema); if (error) { return error(); } const { websiteId } = await params; const { parameters = {} } = body; if (!(await canUpdateWebsite(auth, websiteId))) { return unauthorized(); } const slug = getRandomChars(16); const share = await createShare({ id: uuid(), entityId: websiteId, shareType: ENTITY_TYPE.website, slug, parameters, }); return json(share); }