import {Controller, HTTPError, json} from '@extollo/lib' import {Inject, Injectable} from '@extollo/di' import {User} from '../../../../models/User.model' import {ServerSentRequest} from '../../../../models/ServerSentRequest.model' import {HTTPStatus} from "@extollo/util"; /** * Relay Controller */ @Injectable() export class Relay extends Controller { @Inject() protected readonly user!: User public async getRequestQueue() { const requests = await ServerSentRequest.query() .where('serviced', '=', false) .where('user_id', '=', this.user.key()) .orderByAscending((new ServerSentRequest()).keyName()) .get() .map(request => request.toObject()) return json(requests.toArray()) } public async serviceRequest() { const required = ['server_request_id', 'response_data'] for ( const field of required ) { if ( !this.request.input(field) ) { throw new HTTPError(HTTPStatus.http400, `Missing field: ${field}`) } } const request = await ServerSentRequest.query() .where('serviced', '=', false) .where((new ServerSentRequest()).keyName(), '=', this.request.input('server_request_id')) .first() if ( !request ) { throw new HTTPError(HTTPStatus.http404, 'Invalid request ID.') } request.serviced = true request.responseData = this.request.input('response_data') await request.save() } }