Skip to content

Commit a203906

Browse files
committed
feat(api): Execute field deletion at each extra record
1 parent 2c3c5af commit a203906

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/web/controllers/api.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import { findRecordByBody, findRecordByQuery, validateToken } from '../middlewar
44
import { WebHelpers } from '../helpers';
55
import { RecordExtendedRequest } from '../../types/web';
66
import { Database, RecordExtra } from '../../database/generic';
7+
import { Logger } from '../../logging';
78

89
const apiStuff = [checkApiToken, findRecordByQuery, validateToken];
910
const dbImpl = Database.getDbImpl();
11+
const log = Logger.get();
1012

1113
/// Here is the format
1214
/// getMETHODNAME - GET /api/METHODNAME
@@ -20,6 +22,9 @@ export class ApiController {
2022
router.get('/extra', [checkApiToken, findRecordByQuery], this.getExtraData);
2123
router.patch('/extra', [checkApiToken, findRecordByQuery], this.patchExtraData);
2224
router.post('/delete', [checkApiToken, findRecordByBody], this.postDelete);
25+
26+
router.delete('/each/extra', [checkApiToken], this.deleteEachExtraData);
27+
2328
router.get('/link', this.getLink);
2429
return router;
2530
}
@@ -74,6 +79,7 @@ export class ApiController {
7479
}
7580

7681
res.status(200).contentType('application/json').send(record.extra.json); // manually set content-type because our `json` field is a json str already
82+
log.debug(`Returned extra data for ${record.discord_uid}`, JSON.parse(record.extra.json));
7783
}
7884

7985
public static async patchExtraData(req: RecordExtendedRequest, res: Response) {
@@ -91,6 +97,35 @@ export class ApiController {
9197
record.extra.json = merged;
9298

9399
await record.extra.save();
100+
101+
res.status(200).send();
102+
log.debug(`Set extra data for ${record.discord_uid}`, JSON.parse(record.extra.json));
103+
}
104+
105+
public static async deleteEachExtraData(req: Request, res: Response) {
106+
const fields = req.body['fields'] as string[] | undefined;
107+
if (!fields) {
108+
res.status(400).json({error: "Fields is not supplied"});
109+
return;
110+
}
111+
112+
const allRecords = await RecordExtra.findAll(dbImpl);
113+
114+
for (const record of allRecords) {
115+
try {
116+
const jsonData = JSON.parse(record.json);
117+
118+
fields.forEach(field => {
119+
delete jsonData[field];
120+
});
121+
122+
record.json = JSON.stringify(jsonData);
123+
await record.save();
124+
} catch (error) {
125+
console.error("Failed to process record:", error);
126+
}
127+
}
128+
94129
res.status(200).send();
95130
}
96131

0 commit comments

Comments
 (0)