diff --git a/src/core/Route.ts b/src/core/Route.ts index cf182737..b31934c7 100644 --- a/src/core/Route.ts +++ b/src/core/Route.ts @@ -15,6 +15,7 @@ /** * Possible HTTP verbs for routes */ +import {SCErrorResponse} from './protocol/errors/ErrorResponse'; import {SCBookAvailabilityRequest} from './protocol/routes/bookAvailability/BookAvailabilityRequest'; import {SCBookAvailabilityResponse} from './protocol/routes/bookAvailability/BookAvailabilityResponse'; import {SCBulkRequest} from './protocol/routes/bulk/BulkRequest'; @@ -35,7 +36,19 @@ import {SCThingUpdateRequest} from './protocol/routes/TYPE/UID/ThingUpdateReques import {SCThingUpdateResponse} from './protocol/routes/TYPE/UID/ThingUpdateResponse'; import {SCMap} from './types/Map'; -export type SCRouteHttpVerbs = 'GET' | 'POST' | 'PUT'; +/** + * Possible Verbs for HTTP requests + */ +export enum SCRouteHttpVerbs { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', +} + +/** + * The constructor of an error response + */ +export type SCErrorResponseConstructor = new (...args: any) => SCErrorResponse; /** * A description of a route @@ -44,7 +57,7 @@ export interface SCRoute { /** * A map of names of possible errors that can be returned by the route with their appropriate status codes */ - errorNames: string[]; + errorNames: SCErrorResponseConstructor[]; /** * HTTP verb to use to request the route @@ -81,10 +94,8 @@ export interface SCRoute { * An abstract route */ export abstract class SCAbstractRoute implements SCRoute { - errorNames = [ - 'SCErrorResponse', - ]; - method: SCRouteHttpVerbs = 'GET'; + errorNames: SCErrorResponseConstructor[] = []; + method: SCRouteHttpVerbs = SCRouteHttpVerbs.GET; obligatoryParameters?: SCMap; requestBodyName = 'any'; responseBodyName = 'any'; diff --git a/src/core/protocol/routes/INDEX/IndexRequest.ts b/src/core/protocol/routes/INDEX/IndexRequest.ts index 05a502e5..66bf7ef8 100644 --- a/src/core/protocol/routes/INDEX/IndexRequest.ts +++ b/src/core/protocol/routes/INDEX/IndexRequest.ts @@ -12,7 +12,14 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; /** * Index request @@ -29,13 +36,13 @@ export class SCIndexRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCIndexRequest'; this.responseBodyName = 'SCIndexResponse'; this.statusCodeSuccess = 200; diff --git a/src/core/protocol/routes/TYPE/UID/ThingUpdateRequest.ts b/src/core/protocol/routes/TYPE/UID/ThingUpdateRequest.ts index 9e004f16..f4b733f6 100644 --- a/src/core/protocol/routes/TYPE/UID/ThingUpdateRequest.ts +++ b/src/core/protocol/routes/TYPE/UID/ThingUpdateRequest.ts @@ -13,7 +13,14 @@ * this program. If not, see . */ import {SCThings} from '../../../../Classes'; -import {SCAbstractRoute} from '../../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../../Route'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../../errors/ErrorResponse'; /** * Request to update an existing thing @@ -29,14 +36,14 @@ export class SCThingUpdateRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCNotFoundErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'PUT'; + this.method = SCRouteHttpVerbs.PUT; this.obligatoryParameters = { TYPE: 'SCThingTypes', UID: 'SCUuid', diff --git a/src/core/protocol/routes/bookAvailability/BookAvailabilityRequest.ts b/src/core/protocol/routes/bookAvailability/BookAvailabilityRequest.ts index e456715f..907c5d48 100644 --- a/src/core/protocol/routes/bookAvailability/BookAvailabilityRequest.ts +++ b/src/core/protocol/routes/bookAvailability/BookAvailabilityRequest.ts @@ -12,8 +12,16 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; import {SCUuid} from '../../../types/UUID'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; /** * Request to check the availability of books @@ -60,14 +68,14 @@ export class SCBookAvailabilityRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCNotFoundErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCBookAvailabilityRequest'; this.responseBodyName = 'SCBookAvailabilityResponse'; this.statusCodeSuccess = 200; diff --git a/src/core/protocol/routes/bulk/BulkRequest.ts b/src/core/protocol/routes/bulk/BulkRequest.ts index 48446e27..45d60117 100644 --- a/src/core/protocol/routes/bulk/BulkRequest.ts +++ b/src/core/protocol/routes/bulk/BulkRequest.ts @@ -12,9 +12,16 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; import {SCThingType} from '../../../Thing'; import {SCISO8601Date} from '../../../types/Time'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; /** * A bulk request @@ -60,13 +67,13 @@ export class SCBulkRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCBulkRequest'; this.responseBodyName = 'SCBulkResponse'; this.statusCodeSuccess = 200; diff --git a/src/core/protocol/routes/bulk/UID/BulkAddRequest.ts b/src/core/protocol/routes/bulk/UID/BulkAddRequest.ts index ba8e50c8..a3ac6021 100644 --- a/src/core/protocol/routes/bulk/UID/BulkAddRequest.ts +++ b/src/core/protocol/routes/bulk/UID/BulkAddRequest.ts @@ -13,7 +13,15 @@ * this program. If not, see . */ import {SCThings} from '../../../../Classes'; -import {SCAbstractRoute} from '../../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../../Route'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../../errors/ErrorResponse'; /** * Request to add a thing to a bulk @@ -28,14 +36,14 @@ export class SCBulkAddRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCNotFoundErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.obligatoryParameters = { UID: 'SCUuid', }; diff --git a/src/core/protocol/routes/bulk/UID/BulkDoneRequest.ts b/src/core/protocol/routes/bulk/UID/BulkDoneRequest.ts index 00456ece..cbb7d36c 100644 --- a/src/core/protocol/routes/bulk/UID/BulkDoneRequest.ts +++ b/src/core/protocol/routes/bulk/UID/BulkDoneRequest.ts @@ -12,7 +12,15 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../../Route'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../../errors/ErrorResponse'; /** * Request to change the bulk state to done (close the bulk process) @@ -28,14 +36,14 @@ export class SCBulkDoneRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCNotFoundErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCNotFoundErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.obligatoryParameters = { UID: 'SCUuid', }; diff --git a/src/core/protocol/routes/feedback/FeedbackRequest.ts b/src/core/protocol/routes/feedback/FeedbackRequest.ts index 238833ad..eb2e1274 100644 --- a/src/core/protocol/routes/feedback/FeedbackRequest.ts +++ b/src/core/protocol/routes/feedback/FeedbackRequest.ts @@ -12,8 +12,15 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; import {SCMessage} from '../../../things/Message'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; /** * User feedback @@ -34,13 +41,13 @@ export class SCFeedbackRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCFeedbackRequest'; this.responseBodyName = 'SCFeedbackResponse'; this.statusCodeSuccess = 204; diff --git a/src/core/protocol/routes/search/MultiSearchRequest.ts b/src/core/protocol/routes/search/MultiSearchRequest.ts index 91b942fd..96b49e32 100644 --- a/src/core/protocol/routes/search/MultiSearchRequest.ts +++ b/src/core/protocol/routes/search/MultiSearchRequest.ts @@ -12,7 +12,15 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCTooManyRequestsErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; import {SCSearchQuery} from './SearchRequest'; /** @@ -35,14 +43,14 @@ export class SCMultiSearchRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCSyntaxError', - 'SCTooManyRequestsErrorResponse', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCTooManyRequestsErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCMultiSearchRequest'; this.responseBodyName = 'SCMultiSearchResponse'; this.statusCodeSuccess = 200; diff --git a/src/core/protocol/routes/search/SearchRequest.ts b/src/core/protocol/routes/search/SearchRequest.ts index 01117273..a33645f5 100644 --- a/src/core/protocol/routes/search/SearchRequest.ts +++ b/src/core/protocol/routes/search/SearchRequest.ts @@ -12,9 +12,16 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -import {SCAbstractRoute} from '../../../Route'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../../../Route'; import {SCSearchFilter} from '../../../types/filters/Abstract'; import {SCSearchSort} from '../../../types/sorts/Abstract'; +import { + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, +} from '../../errors/ErrorResponse'; /** * A search request @@ -61,13 +68,13 @@ export class SCSearchRoute extends SCAbstractRoute { constructor() { super(); this.errorNames = [ - 'SCInternalServerErrorResponse', - 'SCMethodNotAllowedErrorResponse', - 'SCSyntaxError', - 'SCUnsupportedMediaTypeErrorResponse', - 'SCValidationErrorResponse', + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, ]; - this.method = 'POST'; + this.method = SCRouteHttpVerbs.POST; this.requestBodyName = 'SCSearchRequest'; this.responseBodyName = 'SCSearchResponse'; this.statusCodeSuccess = 200;