A social knowledge tool for researchers built on ATProto
at development 2.5 kB view raw
1import * as express from 'express'; 2 3export abstract class BaseController { 4 protected abstract executeImpl( 5 req: express.Request, 6 res: express.Response, 7 ): Promise<void | any>; 8 9 public async execute( 10 req: express.Request, 11 res: express.Response, 12 ): Promise<void> { 13 try { 14 await this.executeImpl(req, res); 15 } catch (err) { 16 console.log(`[BaseController]: Uncaught controller error`); 17 console.log(err); 18 this.fail(res, 'An unexpected error occurred'); 19 } 20 } 21 22 public static jsonResponse( 23 res: express.Response, 24 code: number, 25 message: string, 26 ) { 27 return res.status(code).json({ message }); 28 } 29 30 public ok<T>(res: express.Response, dto?: T) { 31 if (dto) { 32 res.type('application/json'); 33 return res.status(200).json(dto); 34 } else { 35 return res.sendStatus(200); 36 } 37 } 38 39 public created(res: express.Response) { 40 return res.sendStatus(201); 41 } 42 43 public clientError(res: express.Response, message?: string) { 44 return BaseController.jsonResponse( 45 res, 46 400, 47 message ? message : 'Unauthorized', 48 ); 49 } 50 51 public unauthorized(res: express.Response, message?: string) { 52 return BaseController.jsonResponse( 53 res, 54 401, 55 message ? message : 'Unauthorized', 56 ); 57 } 58 59 public paymentRequired(res: express.Response, message?: string) { 60 return BaseController.jsonResponse( 61 res, 62 402, 63 message ? message : 'Payment required', 64 ); 65 } 66 67 public forbidden(res: express.Response, message?: string) { 68 return BaseController.jsonResponse( 69 res, 70 403, 71 message ? message : 'Forbidden', 72 ); 73 } 74 75 public notFound(res: express.Response, message?: string) { 76 return BaseController.jsonResponse( 77 res, 78 404, 79 message ? message : 'Not found', 80 ); 81 } 82 83 public conflict(res: express.Response, message?: string) { 84 return BaseController.jsonResponse( 85 res, 86 409, 87 message ? message : 'Conflict', 88 ); 89 } 90 91 public tooMany(res: express.Response, message?: string) { 92 return BaseController.jsonResponse( 93 res, 94 429, 95 message ? message : 'Too many requests', 96 ); 97 } 98 99 public todo(res: express.Response) { 100 return BaseController.jsonResponse(res, 400, 'TODO'); 101 } 102 103 public fail(res: express.Response, error: Error | string) { 104 console.log(error); 105 return res.status(500).json({ 106 message: error.toString(), 107 }); 108 } 109}