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