diff --git a/src/routes/resources/main.ts b/src/routes/resources/main.ts index 966cea0..4039ede 100644 --- a/src/routes/resources/main.ts +++ b/src/routes/resources/main.ts @@ -427,44 +427,52 @@ export default async function resourceRoutes(server: FastifyInstance) { // Create server.post("/resource/:resource", async (req, reply) => { - if (!req.user?.tenant_id) { - return reply.code(400).send({error: "No tenant selected"}); + try { + if (!req.user?.tenant_id) { + return reply.code(400).send({error: "No tenant selected"}); + } + + const {resource} = req.params as { resource: string }; + const body = req.body as Record; + + const table = resourceConfig[resource].table + + let createData = { + ...body, + tenant: req.user.tenant_id, + archived: false, // Standardwert + } + + console.log(resourceConfig[resource].numberRangeHolder) + + if (resourceConfig[resource].numberRangeHolder && !body[resourceConfig[resource]]) { + const result = await useNextNumberRangeNumber(server, req.user.tenant_id, resource) + console.log(result) + createData[resourceConfig[resource].numberRangeHolder] = result.usedNumber + } + + const [created] = await server.db + .insert(table) + .values(createData) + .returning() + + + /*await insertHistoryItem(server, { + entity: resource, + entityId: data.id, + action: "created", + created_by: req.user.user_id, + tenant_id: req.user.tenant_id, + oldVal: null, + newVal: data, + text: `${dataType.labelSingle} erstellt`, + });*/ + + return created; + } catch (error) { + console.log(error) + reply.status(500) } - - const {resource} = req.params as { resource: string }; - const body = req.body as Record; - - const table = resourceConfig[resource].table - - let createData = { - ...body, - tenant: req.user.tenant_id, - archived: false, // Standardwert - } - - if (resourceConfig[resource].numberRangeHolder && !body[resourceConfig[resource]]) { - const result = await useNextNumberRangeNumber(server, req.user.tenant_id, resource) - createData[resourceConfig[resource]] = result.usedNumber - } - - const [created] = await server.db - .insert(table) - .values(createData) - .returning() - - - /*await insertHistoryItem(server, { - entity: resource, - entityId: data.id, - action: "created", - created_by: req.user.user_id, - tenant_id: req.user.tenant_id, - oldVal: null, - newVal: data, - text: `${dataType.labelSingle} erstellt`, - });*/ - - return created; }); // UPDATE (inkl. Soft-Delete/Archive) diff --git a/src/utils/functions.ts b/src/utils/functions.ts index 3190a87..3b6dc7d 100644 --- a/src/utils/functions.ts +++ b/src/utils/functions.ts @@ -7,28 +7,58 @@ import {FastifyInstance} from "fastify"; // import Sharp from 'sharp' // import fs from 'fs' -export const useNextNumberRangeNumber = async (server:FastifyInstance, tenantId:number,numberRange)=> { - const {data:tenant} = await server.supabase.from("tenants").select().eq("id",tenantId).single() +import { tenants } from "../../db/schema" +import { eq } from "drizzle-orm" - const numberRanges = tenant.numberRanges +export const useNextNumberRangeNumber = async ( + server: FastifyInstance, + tenantId: number, + numberRange: string +) => { + // 1️⃣ Tenant laden + const [tenant] = await server.db + .select() + .from(tenants) + .where(eq(tenants.id, tenantId)) - const usedNumber = (numberRanges[numberRange].prefix ? numberRanges[numberRange].prefix : "") + numberRanges[numberRange].nextNumber + (numberRanges[numberRange].suffix ? numberRanges[numberRange].suffix : "") + if (!tenant) { + throw new Error(`Tenant ${tenantId} not found`) + } - let newNumberRange = numberRanges + const numberRanges = tenant.numberRanges || {} - newNumberRange[numberRange].nextNumber += 1 + if (!numberRanges[numberRange]) { + throw new Error(`Number range '${numberRange}' not found`) + } - const {error} = await server.supabase.from("tenants").update({numberRanges: newNumberRange}).eq("id",tenantId) + const current = numberRanges[numberRange] - if(error) { - console.log(error) - } else { - return { - usedNumber + // 2️⃣ Used Number generieren + const usedNumber = + (current.prefix || "") + + current.nextNumber + + (current.suffix || "") + + // 3️⃣ nextNumber erhöhen + const updatedRanges = { + // @ts-ignore + ...numberRanges, + [numberRange]: { + ...current, + nextNumber: current.nextNumber + 1 } } + + // 4️⃣ Tenant aktualisieren + await server.db + .update(tenants) + .set({ numberRanges: updatedRanges }) + .where(eq(tenants.id, tenantId)) + + return { usedNumber } } + /* export async function encodeBase64ToNiimbot(base64Png, printDirection = 'top') { // 1️⃣ PNG dekodieren