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

Annotation of /trunk/src/api/controllers/ConfigController.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 352 - (hide annotations)
Mon Jul 29 17:29:44 2024 UTC (8 months, 3 weeks ago) by rakin
File MIME type: application/typescript
File size: 2191 byte(s)
feat(api): add update action in configcontroller
1 rakin 352 import { dot, object } from "dot-object";
2     import { body } from "express-validator";
3     import KeyValuePair from "../../types/KeyValuePair";
4 rakin 326 import Controller from "../Controller";
5 rakin 349 import RequireAuth from "../middleware/RequireAuth";
6     import Request from "../Request";
7 rakin 326
8     export default class ConfigController extends Controller {
9 rakin 349 globalMiddleware(): Function[] {
10     return [RequireAuth];
11     }
12    
13 rakin 352 middleware(): KeyValuePair<Function[]> {
14     return {
15     update: [
16     body(["config"]).isObject()
17     ]
18     };
19     }
20    
21 rakin 326 public async index(request: Request) {
22 rakin 349 const { id } = request.params;
23    
24     if (!request.user?.guilds.includes(id)) {
25     return this.response({ error: "You don't have permission to access configuration of this guild." }, 403);
26     }
27    
28     if (id === "global" || !this.client.config.props[id]) {
29     return this.response({ error: "No configuration found for the given guild ID" }, 404);
30     }
31    
32     return this.client.config.props[id];
33 rakin 326 }
34    
35     public async update(request: Request) {
36 rakin 352 const { id } = request.params;
37     const { config } = request.body;
38     const currentConfigDotObject = dot(this.client.config.props[id]);
39     const newConfigDotObject = {...currentConfigDotObject};
40    
41     console.log("Input: ", currentConfigDotObject);
42    
43     for (const configKey in config) {
44     if (!(configKey in currentConfigDotObject)) {
45     return { error: `The key '${configKey}' is not allowed` };
46     }
47    
48     if (typeof config[configKey] !== typeof currentConfigDotObject[configKey] || (config[configKey] !== currentConfigDotObject[configKey])) {
49     return { error: `The key '${configKey}' has incompatible value type '${config[configKey] === null ? 'null' : typeof config[configKey]}'` };
50     }
51    
52     newConfigDotObject[configKey] = config[configKey];
53     }
54    
55     console.log("Output: ", newConfigDotObject);
56     this.client.config.props[id] = object(newConfigDotObject);
57     return { message: "Configuration updated", previous: currentConfigDotObject, new: newConfigDotObject };
58 rakin 326 }
59     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26