import type { CompanyProfileDto, CompanyProfileInput } from "@mrp/shared"; import { logAuditEvent } from "../../lib/audit.js"; import { prisma } from "../../lib/prisma.js"; type CompanyProfileRecord = Awaited>; function mapCompanyProfile(profile: CompanyProfileRecord): CompanyProfileDto { return { id: profile.id, companyName: profile.companyName, legalName: profile.legalName, email: profile.email, phone: profile.phone, website: profile.website, taxId: profile.taxId, addressLine1: profile.addressLine1, addressLine2: profile.addressLine2, city: profile.city, state: profile.state, postalCode: profile.postalCode, country: profile.country, theme: { primaryColor: profile.primaryColor, accentColor: profile.accentColor, surfaceColor: profile.surfaceColor, fontFamily: profile.fontFamily, logoFileId: profile.logoFileId, }, logoUrl: profile.logoFileId ? `/api/v1/files/${profile.logoFileId}/content` : null, updatedAt: profile.updatedAt.toISOString(), }; } export async function getActiveCompanyProfile() { return mapCompanyProfile( await prisma.companyProfile.findFirstOrThrow({ where: { isActive: true }, }) ); } export async function updateActiveCompanyProfile(payload: CompanyProfileInput, actorId?: string | null) { const current = await prisma.companyProfile.findFirstOrThrow({ where: { isActive: true }, }); const profile = await prisma.companyProfile.update({ where: { id: current.id }, data: { companyName: payload.companyName, legalName: payload.legalName, email: payload.email, phone: payload.phone, website: payload.website, taxId: payload.taxId, addressLine1: payload.addressLine1, addressLine2: payload.addressLine2, city: payload.city, state: payload.state, postalCode: payload.postalCode, country: payload.country, primaryColor: payload.theme.primaryColor, accentColor: payload.theme.accentColor, surfaceColor: payload.theme.surfaceColor, fontFamily: payload.theme.fontFamily, logoFileId: payload.theme.logoFileId, }, }); await logAuditEvent({ actorId, entityType: "company-profile", entityId: profile.id, action: "updated", summary: `Updated company profile for ${profile.companyName}.`, metadata: { companyName: profile.companyName, legalName: profile.legalName, logoFileId: profile.logoFileId, }, }); return mapCompanyProfile(profile); }