import { Request, Response } from 'express'; import { prisma, __path, log } from '../../../index.js'; // Get storageLocation. function get(req: Request, res: Response) { if (req.query.getAll === undefined) { // Check if required fields are present. if (!req.query.id) { res.status(400).json({ errorcode: 'VALIDATION_ERROR', error: 'One or more required fields are missing' }); return; } prisma.storageLocation .findUnique({ where: { id: parseInt(req.query.id.toString()) }, // Get storageUnit from relation. include: { storageUnit: true } }) .then((items) => { if (items) { res.status(200).json(JSON.stringify(items)); } else { res.status(410).json({ errorcode: 'NOT_EXISTING', error: 'storageLocation does not exist' }); } }) .catch((err) => { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); }); } else { prisma.storageLocation .findMany({ // Get storageUnit from relation. include: { storageUnit: true } }) .then((items) => { if (items) { res.status(200).json(JSON.stringify(items)); } else { res.status(410).json({ errorcode: 'NOT_EXISTING', error: 'storageLocation does not exist' }); } }) .catch((err) => { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); }); } } // Create storageLocation. function post(req: Request, res: Response) { // Check if required fields are present. if (!req.body.name) { res.status(400).json({ errorcode: 'VALIDATION_ERROR', error: 'One or more required fields are missing' }); return; } // Create storageLocation with existing storageUnit. prisma.storageLocation .create({ data: { name: req.body.name, storageUnitId: parseInt(req.body.storageUnitId) || undefined }, select: { id: true } }) .then((data) => { res.status(201).json({ status: 'created', id: data.id }); }) .catch((err) => { // Check if an entry already exists. if (err.code === 'P2002') { // P2002 -> "Unique constraint failed on the {constraint}" // https://www.prisma.io/docs/reference/api-reference/error-reference res.status(409).json({ errorcode: 'EXISTING', error: 'storageLocation already exists' }); } else if (err.code == 'P2003') { // P2003 -> "Foreign key constraint failed on the field: {field_name}" // https://www.prisma.io/docs/reference/api-reference/error-reference // FIXME: Is this errormessage right? res.status(404).json({ error: 'specified storageUnitId does not exist' }); } else { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); } }); } // Update storageLocation. -> Only existing contactInfo. async function patch(req: Request, res: Response) { // Check if required fields are present. if (!req.body.id || !req.body.name || !req.body.storageUnitId) { res.status(400).json({ errorcode: 'VALIDATION_ERROR', error: 'One or more required fields are missing' }); return; } // Check if the storageLocation id exists. If not return 410 Gone. try { const result = await prisma.storageLocation.findUnique({ where: { id: parseInt(req.body.id) } }); if (result === null) { res.status(404).json({ error: 'storageLocation does not exist.' }); return; } } catch (err) { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); } prisma.storageLocation .update({ where: { id: parseInt(req.body.id) }, data: { name: req.body.name, storageUnitId: parseInt(req.body.storageUnitId) || undefined } }) .then(() => { res.status(201).json({ status: 'updated' }); }) .catch((err) => { // Check if an entry already exists. if (err.code === 'P2002') { // P2002 -> "Unique constraint failed on the {constraint}" // https://www.prisma.io/docs/reference/api-reference/error-reference res.status(409).json({ errorcode: 'EXISTING', error: 'storageLocation already exists' }); } else if (err.code == 'P2003') { // P2003 -> "Foreign key constraint failed on the field: {field_name}" // https://www.prisma.io/docs/reference/api-reference/error-reference // FIXME: Is this errormessage right? res.status(404).json({ error: 'specified storageUnitId does not exist' }); } else { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); } }); } // Delete storageLocation. async function del(req: Request, res: Response) { // Check if required fields are present. if (!req.body.id) { res.status(400).json({ errorcode: 'VALIDATION_ERROR', error: 'One or more required fields are missing' }); return; } // Does the id exist? If not return 410 Gone. try { const result = await prisma.storageLocation.findUnique({ where: { id: parseInt(req.body.id) } }); if (result === null) { res.status(410).json({ errorcode: 'NOT_EXISTING', error: 'storageLocation does not exist' }); return; } } catch (err) { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); } prisma.storageLocation .delete({ where: { id: parseInt(req.body.id) } }) .then(() => { res.status(200).json({ errorcode: 'DELETED', error: 'Sucessfully deleted entry' }); }) .catch((err) => { log.db.error(err); res.status(500).json({ errorcode: 'DB_ERROR', error: err }); }); } export default { get, post, patch, del };