@@ -4,9 +4,11 @@ import { findRecordByBody, findRecordByQuery, validateToken } from '../middlewar
44import { WebHelpers } from '../helpers' ;
55import { RecordExtendedRequest } from '../../types/web' ;
66import { Database , RecordExtra } from '../../database/generic' ;
7+ import { Logger } from '../../logging' ;
78
89const apiStuff = [ checkApiToken , findRecordByQuery , validateToken ] ;
910const 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