UNPKG

nitropage

Version:

A free and open source, extensible visual page builder based on SolidStart.

75 lines (66 loc) 1.87 kB
import { getPublicMedia } from "#data/media"; import { getUser } from "#lib/auth/server"; import { decorateMedia, deleteMedia as deleteMedia_, flushMediaCache, uploadMedia as uploadMedia_, } from "#lib/server/media"; import { useDatabase } from "#lib/server/prisma"; import { throwOnDemo } from "#lib/server/util"; import { action, json, query, reload } from "@solidjs/router"; export const getMediaLibrary = query( async ({ projectId }: { projectId: string }) => { "use server"; await getUser({ assert: {} }); const db = useDatabase(); return ( await db.nitroMedia.findMany({ where: { projectId, }, }) ).map(decorateMedia); }, "np-mediaLibrary", ); export const deleteMedia = action(async ({ id }: { id: string }) => { "use server"; await getUser({ assert: { csrf: true } }); throwOnDemo(); await deleteMedia_(id); return reload({ revalidate: getMediaLibrary.key }); }); export const uploadMedia = action(async (form: FormData) => { "use server"; await getUser({ assert: { csrf: true } }); throwOnDemo(); const files = await uploadMedia_(); return json(files, { revalidate: getMediaLibrary.key }); }); export const updateMedia = action( async (media: { id: string; color: string; description: string; focalPointX: number; focalPointY: number; }) => { "use server"; await getUser({ assert: { csrf: true } }); const db = useDatabase(); const newMedia = await db.nitroMedia.update({ data: { color: media.color, focalPointX: media.focalPointX, focalPointY: media.focalPointY, description: media.description, }, where: { id: media.id, }, }); await flushMediaCache(newMedia); return reload({ revalidate: [getMediaLibrary.key, getPublicMedia.key] }); }, );