|
@ -18,45 +18,48 @@ export enum Status { |
|
|
Forbidden = 403, |
|
|
Forbidden = 403, |
|
|
NotFound = 404, |
|
|
NotFound = 404, |
|
|
Conflict = 409, |
|
|
Conflict = 409, |
|
|
|
|
|
Gone = 410, |
|
|
PayloadTooLarge = 413, |
|
|
PayloadTooLarge = 413, |
|
|
UnprocessableEntity = 422 |
|
|
|
|
|
|
|
|
UnprocessableEntity = 422, |
|
|
|
|
|
InternalServerError = 500 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Create a response |
|
|
* Create a response |
|
|
*/ |
|
|
*/ |
|
|
function createResponse<T = any>(status: Status, result?: T): IResponse<T> { |
|
|
|
|
|
|
|
|
function statusMessage(status: Status): string { |
|
|
switch(status) { |
|
|
switch(status) { |
|
|
case Status.Ok: |
|
|
case Status.Ok: |
|
|
return { result, status: "OK" }; |
|
|
|
|
|
|
|
|
return "OK" |
|
|
case Status.BadRequest: |
|
|
case Status.BadRequest: |
|
|
return { result, status: "Bad Request" }; |
|
|
|
|
|
|
|
|
return "Bad Request"; |
|
|
case Status.Unauthorized: |
|
|
case Status.Unauthorized: |
|
|
return { result, status: "Unauthorized" } |
|
|
|
|
|
|
|
|
return "Unauthorized"; |
|
|
case Status.Forbidden: |
|
|
case Status.Forbidden: |
|
|
return { result, status: "Forbidden" } |
|
|
|
|
|
|
|
|
return "Forbidden"; |
|
|
case Status.NotFound: |
|
|
case Status.NotFound: |
|
|
return { result, status: "Not Found" } |
|
|
|
|
|
|
|
|
return "Not Found"; |
|
|
case Status.Conflict: |
|
|
case Status.Conflict: |
|
|
return { result, status: "Conflict" } |
|
|
|
|
|
case Status.Conflict: |
|
|
|
|
|
return { result, status: "Payload Too Large" } |
|
|
|
|
|
|
|
|
return "Conflict"; |
|
|
|
|
|
case Status.Gone: |
|
|
|
|
|
return "Gone"; |
|
|
|
|
|
case Status.PayloadTooLarge: |
|
|
|
|
|
return "Payload Too Large"; |
|
|
case Status.UnprocessableEntity: |
|
|
case Status.UnprocessableEntity: |
|
|
return { result, status: "Unprocessable Entity" } |
|
|
|
|
|
|
|
|
return "Unprocessable Entity"; |
|
|
|
|
|
case Status.InternalServerError: |
|
|
|
|
|
return "Internal Server Error"; |
|
|
} |
|
|
} |
|
|
throw new Error(`Unknown response code: ${status}`); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* Respond to a request |
|
|
* Respond to a request |
|
|
*/ |
|
|
*/ |
|
|
export function respond<T = any>(reply: FastifyReply, status: Status, result?: T) { |
|
|
export function respond<T = any>(reply: FastifyReply, status: Status, result?: T) { |
|
|
try { |
|
|
|
|
|
let response = createResponse(status, result); |
|
|
|
|
|
reply.status(status); |
|
|
|
|
|
reply.send(response); |
|
|
|
|
|
} catch(e) { |
|
|
|
|
|
reply.status(500); |
|
|
|
|
|
reply.send({ status: "Internal Server Error" }); |
|
|
|
|
|
|
|
|
let response: IResponse<any> = { status: statusMessage(status) }; |
|
|
|
|
|
if (result !== undefined) { |
|
|
|
|
|
response.result = result; |
|
|
} |
|
|
} |
|
|
|
|
|
reply.status(status); |
|
|
|
|
|
reply.send(response); |
|
|
} |
|
|
} |