You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.5 KiB

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<ServerSentRequest>()
.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<ServerSentRequest>()
.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()
}
}