diff --git a/src/protocol/route.ts b/src/protocol/route.ts index f35c92f9..152ef8ea 100644 --- a/src/protocol/route.ts +++ b/src/protocol/route.ts @@ -27,6 +27,7 @@ import {SCFeedbackRequest, SCFeedbackResponse, SCFeedbackRoute} from './routes/f import {SCSearchRequest, SCSearchResponse, SCSearchRoute} from './routes/search'; import {SCMultiSearchRequest, SCMultiSearchResponse, SCMultiSearchRoute} from './routes/search-multi'; import {SCThingUpdateRequest, SCThingUpdateResponse, SCThingUpdateRoute} from './routes/thing-update'; +import {SCRatingRequest, SCRatingResponse, SCRatingRoute} from './routes/rating'; /** * Possible Verbs for HTTP requests @@ -166,6 +167,7 @@ export type SCRequests = | SCBulkAddRequest | SCBulkDoneRequest | SCFeedbackRequest + | SCRatingRequest | SCIndexRequest | SCMultiSearchRequest | SCSearchRequest @@ -180,6 +182,7 @@ export type SCResponses = | SCBulkAddResponse | SCBulkDoneResponse | SCFeedbackResponse + | SCRatingResponse | SCIndexResponse | SCMultiSearchResponse | SCSearchResponse @@ -198,6 +201,8 @@ export type SCAssociatedResponse = REQUEST extends SCBookAvailabilityRe ? SCBulkDoneResponse : REQUEST extends SCFeedbackRequest ? SCFeedbackResponse + : REQUEST extends SCRatingRequest + ? SCRatingResponse : REQUEST extends SCIndexRequest ? SCIndexResponse : REQUEST extends SCMultiSearchRequest @@ -221,6 +226,8 @@ export type SCAssociatedRequest = RESPONSE extends SCBookAvailabilityR ? SCBulkDoneRequest : RESPONSE extends SCFeedbackResponse ? SCFeedbackRequest + : RESPONSE extends SCRatingResponse + ? SCRatingRequest : RESPONSE extends SCIndexResponse ? SCIndexRequest : RESPONSE extends SCMultiSearchResponse @@ -244,6 +251,8 @@ export type SCAssignedRequest = ROUTE extends SCB ? SCBulkDoneRequest : ROUTE extends SCFeedbackRoute ? SCFeedbackRequest + : ROUTE extends SCRatingRoute + ? SCRatingRequest : ROUTE extends SCIndexRoute ? SCIndexRequest : ROUTE extends SCMultiSearchRoute @@ -267,6 +276,8 @@ export type SCAssignedResponse = ROUTE extends SC ? SCBulkDoneResponse : ROUTE extends SCFeedbackRoute ? SCFeedbackResponse + : ROUTE extends SCRatingRoute + ? SCRatingResponse : ROUTE extends SCIndexRoute ? SCIndexResponse : ROUTE extends SCMultiSearchRoute diff --git a/src/protocol/routes/rating.ts b/src/protocol/routes/rating.ts new file mode 100644 index 00000000..14309a32 --- /dev/null +++ b/src/protocol/routes/rating.ts @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2019-2023 Open StApps + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ +import {StatusCodes} from 'http-status-codes'; +import {SCInternalServerErrorResponse} from '../errors/internal-server-error'; +import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed'; +import {SCRequestBodyTooLargeErrorResponse} from '../errors/request-body-too-large'; +import {SCSyntaxErrorResponse} from '../errors/syntax-error'; +import {SCUnsupportedMediaTypeErrorResponse} from '../errors/unsupported-media-type'; +import {SCAbstractRoute, SCRouteHttpVerbs} from '../route'; +import {SCThing} from '../../things/abstract/thing'; +import {SCUserGroupSetting} from '../../things/setting'; +import {SCValidationErrorResponse} from '../errors/validation'; + +/** + * User rating from the app + * Plugin needs to define its own rating request to hit the target rating system. + * That request should extend this one and contain timestamp and other needed data. + * + * @validatable + */ +export interface SCRatingRequest { + /** + * Number of rating stars + */ + rating: 1 | 2 | 3 | 4 | 5; + + /** + * User's group in the app + */ + userGroup: SCUserGroupSetting['value']; + + /** + * UID of the thing that is rated + */ + uid: SCThing['uid']; +} + +/** + * A response to a rating request + * + * @validatable + */ +export interface SCRatingResponse {} + +/** + * Route for rating submission + */ +export class SCRatingRoute extends SCAbstractRoute { + constructor() { + super(); + this.errorNames = [ + SCInternalServerErrorResponse, + SCMethodNotAllowedErrorResponse, + SCRequestBodyTooLargeErrorResponse, + SCSyntaxErrorResponse, + SCUnsupportedMediaTypeErrorResponse, + SCValidationErrorResponse, + ]; + this.method = SCRouteHttpVerbs.POST; + this.requestBodyName = 'SCRatingRequest'; + this.responseBodyName = 'SCRatingResponse'; + this.statusCodeSuccess = StatusCodes.OK; + this.urlPath = '/rating'; + } +}