@@ -7,14 +7,18 @@ const { generateUUID } = require('cryptography-utilities');
7
7
const FILE_SIZE_LIMIT = 500000 ;
8
8
9
9
const MEDIA_TYPES = {
10
- base64 : 'b64' ,
11
- json : 'json'
10
+ base64 : 'b64'
12
11
} ;
13
12
14
13
const defaultMediaType = Object . keys ( MEDIA_TYPES ) [ 0 ] ;
15
14
16
15
const Database = dataURI => {
17
- let getCollection , updateCollection , backupCollection , storeMedia ;
16
+ let getCollection ;
17
+ let updateCollection ;
18
+ let deleteCollection ;
19
+ let backupCollection ;
20
+ let storeMedia ;
21
+ let searchMedia ;
18
22
19
23
backupCollection = async ( collectionName , page = 1 ) => {
20
24
const files = await fs . readdir ( dataURI ) ;
@@ -46,24 +50,27 @@ const Database = dataURI => {
46
50
return {
47
51
read : getCollection ,
48
52
write : updateCollection ,
53
+ delete : deleteCollection ,
49
54
backup : backupCollection ,
50
55
store : storeMedia ,
51
56
search : searchMedia
52
57
} ;
53
58
} ;
54
59
55
- getCollection = async ( collectionName , query , page = 1 , limit = 1000 ) => {
60
+ getCollection = async ( collectionName , query , page , limit = 1000 ) => {
56
61
const files = await fs . readdir ( dataURI ) ;
57
62
58
- const documents = files
59
- . filter ( file => (
60
- file
61
- . split ( '.' ) [ 0 ]
62
- . split ( '-' ) [ 0 ] === collectionName
63
- ) )
64
- . map ( file => (
65
- file . replace ( '.json' , '' )
66
- ) ) ;
63
+ const documents = page
64
+ ? [ files [ page ] ]
65
+ : files
66
+ . filter ( file => (
67
+ file
68
+ . split ( '.' ) [ 0 ]
69
+ . split ( '-' ) [ 0 ] === collectionName
70
+ ) )
71
+ . map ( file => (
72
+ file . replace ( '.json' , '' )
73
+ ) ) ;
67
74
68
75
let concatResult = [ ] ;
69
76
@@ -104,6 +111,60 @@ const Database = dataURI => {
104
111
data : concatResult . slice ( - limit ) ,
105
112
read : getCollection ,
106
113
write : updateCollection ,
114
+ delete : deleteCollection ,
115
+ backup : backupCollection ,
116
+ store : storeMedia ,
117
+ search : searchMedia
118
+ } ;
119
+ } ;
120
+
121
+ deleteCollection = async ( collectionName , query ) => {
122
+ const files = await fs . readdir ( dataURI ) ;
123
+
124
+ const documents = files
125
+ . filter ( file => (
126
+ file
127
+ . split ( '.' ) [ 0 ]
128
+ . split ( '-' ) [ 0 ] === collectionName
129
+ ) )
130
+ . map ( file => (
131
+ file . replace ( '.json' , '' )
132
+ ) ) ;
133
+
134
+ const fileName = documents . length > 1
135
+ ? documents . sort ( ) . pop ( )
136
+ : collectionName ;
137
+
138
+ const fileSrc = `${ dataURI } /${ fileName } .json` ;
139
+
140
+ const data = await fs . readFile ( fileSrc , 'utf8' ) ;
141
+
142
+ const collection = JSON . parse ( data ) ;
143
+
144
+ if ( query ) {
145
+ Object . values ( collection ) . forEach ( record => {
146
+ Object . keys ( record ) . forEach ( key => {
147
+ // eslint-disable-next-line no-magic-numbers
148
+ if ( key === Object . keys ( query ) [ 0 ] && record [ key ] === query [ key ] ) {
149
+ delete record [ key ] ;
150
+ }
151
+ } ) ;
152
+ } ) ;
153
+
154
+ await fs . writeFile (
155
+ fileSrc ,
156
+ JSON . stringify ( collection ) ,
157
+ 'utf8'
158
+ ) ;
159
+ } else {
160
+ await fs . unlink ( fileSrc ) ;
161
+ }
162
+
163
+ return {
164
+ data : { deletedAt : Date . now ( ) } ,
165
+ read : getCollection ,
166
+ write : updateCollection ,
167
+ delete : deleteCollection ,
107
168
backup : backupCollection ,
108
169
store : storeMedia ,
109
170
search : searchMedia
@@ -189,7 +250,10 @@ const Database = dataURI => {
189
250
data : result ,
190
251
read : getCollection ,
191
252
write : updateCollection ,
192
- backup : backupCollection
253
+ delete : deleteCollection ,
254
+ backup : backupCollection ,
255
+ store : storeMedia ,
256
+ search : searchMedia
193
257
} ;
194
258
} ;
195
259
@@ -199,7 +263,7 @@ const Database = dataURI => {
199
263
200
264
await fs . writeFile ( `${ dataURI } /${ extension } /${ fileId } .${ extension } ` , media , 'utf8' ) ;
201
265
202
- return `data:${ mediaType === 'json' ? 'json' : ' image' } /${ fileId } ` ;
266
+ return `data:image/${ fileId } ` ;
203
267
} ;
204
268
205
269
searchMedia = async ( mediaAddress , mediaType = defaultMediaType ) => {
@@ -211,6 +275,7 @@ const Database = dataURI => {
211
275
return {
212
276
read : getCollection ,
213
277
write : updateCollection ,
278
+ delete : deleteCollection ,
214
279
backup : backupCollection ,
215
280
store : storeMedia ,
216
281
search : searchMedia
0 commit comments