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
import inputType from "https://esm.town/v/kajgod/manage_users_inputs";
import { sqlite } from "https://esm.town/v/std/sqlite?v=4";
export const getDatabaseStructure = async () => {
let struct = [];
try {
const table = await sqlite.execute("PRAGMA table_info('users');");
const rows = await table.rows;
const row = rows;
const arr = Array.from(row);
arr.forEach(v => {
const name = v[1];
const type = v[2];
if (name === "id") return;
struct.push([name, inputType(type, name)]);
});
} catch (e) {
console.error(e);
}
return struct;
};
export async function getUsersList() {
const list = await sqlite.execute(`
SELECT id, first_name, last_name, email, membership_until
FROM users ORDER BY membership_until ASC
`);
return list.rows;
}
export async function getFormData(req: Request, structure) {
if (req.method !== "POST") return await getUsersList();
const data = await req.formData();
if (data.get("action") === "submit") {
let namesList = "";
let dataList = "";
structure.forEach(v => {
const name = v[0];
if (namesList.length > 1) {
namesList += ", ";
dataList += ", ";
}
namesList += name;
const getVal = name === "membership_until"
? Number(Date.parse(data.get(name) as string) / 1000)
: data.get(name);
dataList += `'${getVal}'`;
});
const query = `INSERT INTO users (${namesList})
VALUES(${dataList});`;
await sqlite.execute(query);
}
if (data.get("action") === "update-date") {
const query = `
UPDATE users
SET membership_until=${Number(Date.parse(data.get("timestamp") as string) / 1000)}
WHERE id=${data.get("id")};
`;
await sqlite.execute(query);
}
if (data.get("action") === "delete") {
const query = `
DELETE FROM users WHERE id=${data.get("id")};
`;
await sqlite.execute(query);
}
return await getUsersList();
}
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
Comments
Nobody has commented on this val yet: be the first!
January 19, 2024