A social knowledge tool for researchers built on ATProto
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}