Files
reformix-hackaton/mvp/b2c/src/db/pricing-queries.ts
2026-05-30 19:41:04 +02:00

49 lines
1.4 KiB
TypeScript

import { eq } from 'drizzle-orm';
import { db } from './index';
import { pricingConfig, catalogItems } from './schema';
import type { PricingConfig, CatalogItem, ManoObraKey } from '@/budget/types';
import { getCurrentTenantId as getTenantId } from '@/lib/auth/current-user';
const MANO_OBRA_DEFAULT: Record<ManoObraKey, number> = {
demolicion: 0,
fontaneria: 0,
electricidad: 0,
mano_de_obra: 0,
};
export async function getPricingConfig(): Promise<PricingConfig> {
const tenantId = await getTenantId();
const [row] = await db
.select()
.from(pricingConfig)
.where(eq(pricingConfig.tenantId, tenantId))
.limit(1);
if (!row) {
return { alturaTechoDefault: 2.5, factorZona: {}, manoObra: { ...MANO_OBRA_DEFAULT } };
}
return {
alturaTechoDefault: row.alturaTechoDefault,
factorZona: row.factorZona,
manoObra: { ...MANO_OBRA_DEFAULT, ...(row.manoObra as Record<ManoObraKey, number>) },
};
}
export async function getCatalog(): Promise<CatalogItem[]> {
const tenantId = await getTenantId();
const rows = await db.select().from(catalogItems).where(eq(catalogItems.tenantId, tenantId));
return rows.map((r) => ({
id: r.id,
categoria: r.categoria,
nombre: r.nombre,
calidad: r.calidad,
precioUnit: r.precioUnit,
unidad: r.unidad,
descriptorRender: r.descriptorRender,
esDefault: r.esDefault,
sku: r.sku,
}));
}
export { getTenantId };