db init stuff

This commit is contained in:
Ean Milligan
2026-04-07 03:47:00 -04:00
parent a5f01b5336
commit 90d578e662
5 changed files with 78 additions and 2 deletions

View File

@@ -1,5 +1,8 @@
{
"cSpell.words": [
"Inno",
"longtext",
"tinyint",
"xivplan"
]
}

View File

@@ -6,7 +6,6 @@ export const config = {
},
db: {
host: 'localhost',
localhost: 'localhost',
port: 3306,
username: '',
password: '',

14
db/client.ts Normal file
View File

@@ -0,0 +1,14 @@
import { Client } from '@mysql';
import config from '~config';
const dbClient = await new Client().connect({
hostname: config.db.host,
port: config.db.port,
db: config.db.name,
username: config.db.username,
password: config.db.password,
charset: 'utf8mb4',
});
export default dbClient;

46
db/initialize.ts Normal file
View File

@@ -0,0 +1,46 @@
import config from '~config';
import dbClient from './client.ts';
console.log('Attempting to create DB');
await dbClient.execute(`CREATE SCHEMA IF NOT EXISTS ${config.db.name};`);
await dbClient.execute(`USE ${config.db.name}`);
console.log('DB created');
console.log('Attempt to drop all tables');
await dbClient.execute(`DROP TABLE IF EXISTS plans;`);
await dbClient.execute(`DROP TABLE IF EXISTS users;`);
console.log('Tables dropped');
console.log('Attempting to create table users');
await dbClient.execute(`
CREATE TABLE users (
id varchar(20) NOT NULL,
name varchar(20) NOT NULL,
pin varchar(16) NOT NULL,
email varchar(255) NULL,
deleteCode varchar(20) NULL,
PRIMARY KEY (id),
UNIQUE KEY users_id_UNIQUE (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`);
console.log('Table created');
console.log('Attempting to create table plans');
await dbClient.execute(`
CREATE TABLE plans (
id varchar(20) NOT NULL,
ownerId varchar(20) NOT NULL,
name varchar(200) NOT NULL,
folder varchar(200) NOT NULL,
data longtext NOT NULL,
deleted tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (id),
CONSTRAINT plans_ownerId_FK FOREIGN KEY (ownerId) REFERENCES users (id) ON DELETE RESTRICT ON UPDATE RESTRICT,
UNIQUE KEY plans_id_UNIQUE (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`);
console.log('Table created');
await dbClient.close();
console.log('Done!');

16
mod.ts
View File

@@ -1,13 +1,27 @@
import { customAlphabet } from '@nanoid';
import { STATUS_CODE, STATUS_TEXT, StatusCode } from '@std/http';
import config from '~config';
// Using custom alphabet to exclude - and _
const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
const nanoid = customAlphabet(alphabet, 20);
const genericResponse = (status: StatusCode, customText = '') =>
new Response(customText || STATUS_TEXT[status], { status: status, statusText: STATUS_TEXT[status] });
Deno.serve({ port: config.api.port }, async (req) => {
const [urlPath, tempQ] = req.url.split('?');
const path = (urlPath.split('api/')[1] ?? '').toLowerCase().trim();
console.log(urlPath, path);
if (req.method === 'GET') {
// handle all gets
} else if (path === '/auth') {
return new Response(nanoid());
} else {
// handle auth then all other shiz
}
return new Response(STATUS_TEXT[STATUS_CODE.NotImplemented]);
return genericResponse(STATUS_CODE.NotImplemented);
});