Skip to content

Commit 0847111

Browse files
committed
hard delete
1 parent 59af1ec commit 0847111

File tree

6 files changed

+1851
-4727
lines changed

6 files changed

+1851
-4727
lines changed

.dss/data/json/.gitkeep

Whitespace-only changes.

.nvmrc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
20.17

index.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@ const dss = require('./lib')(DATA_URI);
99
module.exports = http({
1010
GET: {},
1111
POST: {
12-
read: async ({ collectionName, query, page }) => (
13-
dss.read(collectionName, query, page)
12+
read: async ({ collectionName, query, page, limit }) => (
13+
dss.read(collectionName, query, page, limit)
1414
),
1515
write: async ({ collectionName, query, payload }) => (
1616
dss.write(collectionName, query, payload)
1717
),
18+
delete: async ({ collectionName, query }) => (
19+
dss.delete(collectionName, query)
20+
),
1821
backup: async ({ collectionName }) => (
1922
dss.backup(collectionName)
2023
),

lib/index.js

+80-15
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@ const { generateUUID } = require('cryptography-utilities');
77
const FILE_SIZE_LIMIT = 500000;
88

99
const MEDIA_TYPES = {
10-
base64: 'b64',
11-
json: 'json'
10+
base64: 'b64'
1211
};
1312

1413
const defaultMediaType = Object.keys(MEDIA_TYPES)[0];
1514

1615
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;
1822

1923
backupCollection = async (collectionName, page = 1) => {
2024
const files = await fs.readdir(dataURI);
@@ -46,24 +50,27 @@ const Database = dataURI => {
4650
return {
4751
read: getCollection,
4852
write: updateCollection,
53+
delete: deleteCollection,
4954
backup: backupCollection,
5055
store: storeMedia,
5156
search: searchMedia
5257
};
5358
};
5459

55-
getCollection = async (collectionName, query, page = 1, limit = 1000) => {
60+
getCollection = async (collectionName, query, page, limit = 1000) => {
5661
const files = await fs.readdir(dataURI);
5762

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+
));
6774

6875
let concatResult = [];
6976

@@ -104,6 +111,60 @@ const Database = dataURI => {
104111
data: concatResult.slice(-limit),
105112
read: getCollection,
106113
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,
107168
backup: backupCollection,
108169
store: storeMedia,
109170
search: searchMedia
@@ -189,7 +250,10 @@ const Database = dataURI => {
189250
data: result,
190251
read: getCollection,
191252
write: updateCollection,
192-
backup: backupCollection
253+
delete: deleteCollection,
254+
backup: backupCollection,
255+
store: storeMedia,
256+
search: searchMedia
193257
};
194258
};
195259

@@ -199,7 +263,7 @@ const Database = dataURI => {
199263

200264
await fs.writeFile(`${dataURI}/${extension}/${fileId}.${extension}`, media, 'utf8');
201265

202-
return `data:${mediaType === 'json' ? 'json' : 'image'}/${fileId}`;
266+
return `data:image/${fileId}`;
203267
};
204268

205269
searchMedia = async (mediaAddress, mediaType = defaultMediaType) => {
@@ -211,6 +275,7 @@ const Database = dataURI => {
211275
return {
212276
read: getCollection,
213277
write: updateCollection,
278+
delete: deleteCollection,
214279
backup: backupCollection,
215280
store: storeMedia,
216281
search: searchMedia

0 commit comments

Comments
 (0)