-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
110 lines (91 loc) · 2.4 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const queries = (base) => {
const parseDataObject = (data) => {
const cols = [];
const count = [];
const vals = [];
for (const [key, value] of Object.entries(data)) {
cols.push(key);
count.push(`?`);
vals.push(value);
}
return {
cols,
count,
vals,
};
};
const main = {
findOne: async (id = null, key = "id") => {
if (!id) {
return null;
}
const result = await base.db
.prepare(`SELECT * FROM ${base.table} WHERE ${key} = ?`)
.bind(id)
.all();
// normalizing output to the main application
result.results = result.results[0];
return result;
},
findAll: async (query = null) => {
if (!query) {
return await base.db.prepare(`SELECT * FROM ${base.table}`).all();
}
return null;
},
insert: async (data) => {
const { cols, count, vals } = parseDataObject(data);
const statement = `INSERT INTO ${base.table} (${cols.join(
","
)}) VALUES (${count.join(",")})`;
const result = await base.db
.prepare(statement)
.bind(...vals)
.all();
console.log(result);
const createdItem = await main.findOne(result.meta.last_row_id);
return createdItem;
},
create: async (data) => {
return await main.insert(data);
},
update: async (data, key = "id", id = null) => {
if (!id && data[key]) {
id = data[key];
}
if (!id) {
return null;
}
delete data[key];
if ("uuid" in data) {
delete data.uuid;
}
const { cols, vals } = parseDataObject(data);
const statement = `UPDATE ${base.table} SET ${cols.join(
" = ?, "
)} = ? WHERE ${key} = ?`;
vals.push(id);
const result = await base.db
.prepare(statement)
.bind(...vals)
.all();
if (!result.success) {
return { error: "Some kind of DB error" };
}
const updatedItem = await main.findOne(id, key);
return updatedItem;
},
deleteByID: async (id = null, key = "id") => {
if (!id) {
return { error: "No ID" };
}
const statement = `DELETE FROM ${base.table} WHERE id = ?`;
return await base.db.prepare(statement).bind(id).all();
},
};
return main;
};
module.exports = {
queries,
};
// need to resolve error possibilities with error states