item create error fixed

This commit is contained in:
Gowtham M 2026-07-10 15:25:45 +05:30
parent 71bd4e8354
commit 28d38bc695
2 changed files with 26 additions and 4 deletions

View File

@ -8,6 +8,13 @@ const ITEM_SERIES_CODE = 'ITEM';
const SEARCH_FIELDS = ['item_code', 'item_name'];
const SOFT_DELETE_TABLES = new Set([
'item_categories',
'item_subcategories',
'uom',
'brands',
]);
const normalizeString = (value) => {
if (value === undefined || value === null) return value;
const str = String(value).trim();
@ -60,13 +67,26 @@ const normalizePayload = (payload, { isCreate = false } = {}) => {
const assertReference = async (table, id, label, { requireActive = true } = {}) => {
if (!id) return null;
const row = await prisma[table].findFirst({
where: { id: BigInt(id), deleted_at: null },
where: {
id: BigInt(id),
...(SOFT_DELETE_TABLES.has(table) ? { deleted_at: null } : {}),
},
});
if (!row) throw new ApiError(422, `Invalid ${label}`);
if (requireActive && row.is_active === false) throw new ApiError(422, `${label} is inactive`);
return row;
};
const assertGstRate = async (gstRateId) => {
if (!gstRateId) return null;
const row = await prisma.gst_rates.findFirst({
where: { id: BigInt(gstRateId) },
});
if (!row) throw new ApiError(422, 'Invalid gst_rate_id');
if (row.is_active === false) throw new ApiError(422, 'gst_rate_id is inactive');
return row;
};
const assertHsnCode = async (hsnCodeId) => {
if (!hsnCodeId) return null;
const row = await prisma.hsn_codes.findFirst({
@ -102,9 +122,7 @@ const validateItemPayload = async (payload, { isCreate = false } = {}) => {
}
if (payload.uom_id) await assertReference('uom', payload.uom_id, 'uom_id');
if (payload.hsn_code_id !== undefined) await assertHsnCode(payload.hsn_code_id);
if (payload.gst_rate_id) {
await assertReference('gst_rates', payload.gst_rate_id, 'gst_rate_id', { requireActive: false });
}
if (payload.gst_rate_id !== undefined) await assertGstRate(payload.gst_rate_id);
if (payload.brand_id) {
await assertReference('brands', payload.brand_id, 'brand_id', { requireActive: false });
}

View File

@ -90,6 +90,10 @@ const mapDbError = (err) => {
if (err instanceof ApiError) return err;
if (!err) return null;
if (err.name === 'PrismaClientValidationError') {
return new ApiError(500, 'Internal server error');
}
if (err.name === 'PrismaClientKnownRequestError' || err.code?.startsWith?.('P')) {
const mapped = mapPrismaKnownError(err);
if (mapped) return mapped;