mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-14 20:00:33 +00:00
feat: handle http exceptions (#456)
This commit is contained in:
120
packages/server/src/api/exceptions/ObjectionErrorException.ts
Normal file
120
packages/server/src/api/exceptions/ObjectionErrorException.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
import { Request, Response, NextFunction } from 'express';
|
||||
import {
|
||||
ValidationError,
|
||||
NotFoundError,
|
||||
DBError,
|
||||
UniqueViolationError,
|
||||
NotNullViolationError,
|
||||
ForeignKeyViolationError,
|
||||
CheckViolationError,
|
||||
DataError,
|
||||
} from 'objection';
|
||||
|
||||
/**
|
||||
* Handles the Objection error exception.
|
||||
* @param {Error} err
|
||||
* @param {Request} req
|
||||
* @param {Response} res
|
||||
* @param {NextFunction} next
|
||||
*/
|
||||
export function ObjectionErrorException(
|
||||
err: Error,
|
||||
req: Request,
|
||||
res: Response,
|
||||
next: NextFunction
|
||||
) {
|
||||
if (err instanceof ValidationError) {
|
||||
switch (err.type) {
|
||||
case 'ModelValidation':
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: err.type,
|
||||
data: err.data,
|
||||
});
|
||||
case 'RelationExpression':
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: 'RelationExpression',
|
||||
data: {},
|
||||
});
|
||||
|
||||
case 'UnallowedRelation':
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: err.type,
|
||||
data: {},
|
||||
});
|
||||
|
||||
case 'InvalidGraph':
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: err.type,
|
||||
data: {},
|
||||
});
|
||||
|
||||
default:
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: 'UnknownValidationError',
|
||||
data: {},
|
||||
});
|
||||
}
|
||||
} else if (err instanceof NotFoundError) {
|
||||
return res.status(404).send({
|
||||
message: err.message,
|
||||
type: 'NotFound',
|
||||
data: {},
|
||||
});
|
||||
} else if (err instanceof UniqueViolationError) {
|
||||
return res.status(409).send({
|
||||
message: err.message,
|
||||
type: 'UniqueViolation',
|
||||
data: {
|
||||
columns: err.columns,
|
||||
table: err.table,
|
||||
constraint: err.constraint,
|
||||
},
|
||||
});
|
||||
} else if (err instanceof NotNullViolationError) {
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: 'NotNullViolation',
|
||||
data: {
|
||||
column: err.column,
|
||||
table: err.table,
|
||||
},
|
||||
});
|
||||
} else if (err instanceof ForeignKeyViolationError) {
|
||||
return res.status(409).send({
|
||||
message: err.message,
|
||||
type: 'ForeignKeyViolation',
|
||||
data: {
|
||||
table: err.table,
|
||||
constraint: err.constraint,
|
||||
},
|
||||
});
|
||||
} else if (err instanceof CheckViolationError) {
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: 'CheckViolation',
|
||||
data: {
|
||||
table: err.table,
|
||||
constraint: err.constraint,
|
||||
},
|
||||
});
|
||||
} else if (err instanceof DataError) {
|
||||
return res.status(400).send({
|
||||
message: err.message,
|
||||
type: 'InvalidData',
|
||||
data: {},
|
||||
});
|
||||
} else if (err instanceof DBError) {
|
||||
return res.status(500).send({
|
||||
message: err.message,
|
||||
type: 'UnknownDatabaseError',
|
||||
data: {},
|
||||
});
|
||||
} else {
|
||||
next(err);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user