/[sudobot]/trunk/src/api/controllers/HistoryController.ts
ViewVC logotype

Contents of /trunk/src/api/controllers/HistoryController.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 464 - (show annotations)
Mon Jul 29 17:30:22 2024 UTC (8 months, 1 week ago) by rakin
File MIME type: application/typescript
File size: 1758 byte(s)
feat(api): add history controller
1 import Punishment from "../../models/Punishment";
2 import Controller from "../Controller";
3 import RequireAuth from "../middleware/RequireAuth";
4 import ValidatorError from "../middleware/ValidatorError";
5 import Request from "../Request";
6
7 export default class HistoryController extends Controller {
8 globalMiddleware(): Function[] {
9 return [RequireAuth, ValidatorError];
10 }
11
12 async index(request: Request) {
13 if (!request.user?.guilds.includes(request.params.id)) {
14 return this.response({ error: "You don't have permission to access history of this guild." }, 403);
15 }
16
17 const queryLimit = parseInt((request.query.limit as string) ?? '0');
18 const limit = request.query.limit ? (queryLimit < 1 || queryLimit > 20 ? 20 : queryLimit) : 20;
19 const maxPages = Math.ceil((await Punishment.count({ guild_id: request.params.id })) / limit);
20 const page = request.query.page ? parseInt(request.query.page as string) : 1;
21
22 if (maxPages < page) {
23 return this.response({ error: "That page does not exist" }, 404);
24 }
25
26 const offset = (page - 1) * limit;
27
28 const data = (await Punishment.find({ guild_id: request.params.id }).skip(offset).limit(limit));
29 const newData = [];
30
31 for await (const row of data) {
32 let user = { id: row.user_id };
33
34 try {
35 user = this.client.users.cache.get(row.user_id) || await this.client.users.fetch(row.user_id);
36 }
37 catch (e) {
38 console.log(e);
39 }
40
41 const newRow = {
42 ...(row.toJSON()),
43 user
44 };
45
46 newData.push(newRow);
47 }
48
49 return newData;
50 }
51 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26