import { type } from "arktype"; import { readDropValidatedBody, throwingArktype } from "~~/server/arktype"; import aclManager from "~~/server/internal/acls"; import * as jdenticon from "jdenticon"; import { ObjectTransactionalHandler } from "~~/server/internal/objects/transactional"; import prisma from "~~/server/internal/db/database"; import { MetadataSource } from "~~/prisma/client/enums"; const CompanyCreate = type({ name: "string", description: "string", website: "string", }).configure(throwingArktype); export default defineEventHandler(async (h3) => { const allowed = await aclManager.allowSystemACL(h3, ["company:create"]); if (!allowed) throw createError({ statusCode: 403 }); const body = await readDropValidatedBody(h3, CompanyCreate); const obj = new ObjectTransactionalHandler(); const [register, pull, _] = obj.new({}, ["internal:read"]); const icon = jdenticon.toPng(body.name, 512); const logoId = register(icon); const banner = jdenticon.toPng(body.description, 1024); const bannerId = register(banner); const company = await prisma.company.create({ data: { metadataSource: MetadataSource.Manual, metadataId: crypto.randomUUID(), metadataOriginalQuery: "", mName: body.name, mShortDescription: body.description, mDescription: "", mLogoObjectId: logoId, mBannerObjectId: bannerId, mWebsite: body.website, }, }); await pull(); return company; });