2
0
mirror of https://github.com/frappe/books.git synced 2024-12-24 11:55:46 +00:00
books/fyo/utils/errors.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

110 lines
2.7 KiB
TypeScript
Raw Normal View History

2022-03-21 05:47:26 +00:00
export class BaseError extends Error {
more: Record<string, unknown> = {};
2022-03-21 05:47:26 +00:00
message: string;
statusCode: number;
shouldStore: boolean;
2022-03-21 05:47:26 +00:00
constructor(
statusCode: number,
message: string,
shouldStore: boolean = true
) {
2022-03-21 05:47:26 +00:00
super(message);
this.name = 'BaseError';
this.statusCode = statusCode;
this.message = message;
this.shouldStore = shouldStore;
2022-03-21 05:47:26 +00:00
}
}
export class ValidationError extends BaseError {
constructor(message: string, shouldStore: boolean = false) {
super(417, message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'ValidationError';
}
}
export class NotFoundError extends BaseError {
constructor(message: string, shouldStore: boolean = true) {
super(404, message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'NotFoundError';
}
}
export class ForbiddenError extends BaseError {
constructor(message: string, shouldStore: boolean = true) {
super(403, message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'ForbiddenError';
}
}
export class DuplicateEntryError extends ValidationError {
2022-07-30 06:53:56 +00:00
constructor(message: string, shouldStore: boolean = false) {
super(message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'DuplicateEntryError';
}
}
export class LinkValidationError extends ValidationError {
2022-07-30 06:53:56 +00:00
constructor(message: string, shouldStore: boolean = false) {
super(message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'LinkValidationError';
}
}
export class MandatoryError extends ValidationError {
2022-07-30 06:53:56 +00:00
constructor(message: string, shouldStore: boolean = false) {
super(message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'MandatoryError';
}
}
export class DatabaseError extends BaseError {
constructor(message: string, shouldStore: boolean = true) {
super(500, message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'DatabaseError';
}
}
export class CannotCommitError extends DatabaseError {
constructor(message: string, shouldStore: boolean = true) {
super(message, shouldStore);
2022-03-21 05:47:26 +00:00
this.name = 'CannotCommitError';
}
}
2022-05-20 10:06:38 +00:00
export class NotImplemented extends BaseError {
constructor(message: string = '', shouldStore: boolean = false) {
super(501, message, shouldStore);
2022-05-20 10:06:38 +00:00
this.name = 'NotImplemented';
}
}
2022-03-21 05:47:26 +00:00
export class ValueError extends ValidationError {}
2022-04-25 06:33:31 +00:00
export class ConflictError extends ValidationError {}
2022-03-21 05:47:26 +00:00
export class InvalidFieldError extends ValidationError {}
export function getDbError(err: Error) {
if (!err.message) {
return DatabaseError;
}
if (err.message.includes('SQLITE_ERROR: no such table')) {
return NotFoundError;
}
if (err.message.includes('FOREIGN KEY')) {
return LinkValidationError;
}
if (err.message.includes('SQLITE_ERROR: cannot commit')) {
return CannotCommitError;
}
if (err.message.includes('UNIQUE constraint failed:')) {
return DuplicateEntryError;
}
return DatabaseError;
}