first commit

This commit is contained in:
Soph :3 2025-12-12 21:12:47 +02:00
commit 672f0deb6a
18 changed files with 1274 additions and 0 deletions

71
backend/db.ts Normal file
View file

@ -0,0 +1,71 @@
import { Database } from "bun:sqlite";
export const db = new Database("links.sqlite", { create: true });
db.run("PRAGMA journal_mode = WAL;");
db.run(`
CREATE TABLE IF NOT EXISTS links (
id TEXT PRIMARY KEY,
target TEXT NOT NULL,
short TEXT NOT NULL UNIQUE,
ogTitle TEXT,
ogDesc TEXT,
ogImage TEXT
);
`);
db.run(`
CREATE TABLE IF NOT EXISTS stats (
linkId TEXT PRIMARY KEY,
clicks INTEGER NOT NULL DEFAULT 0
);
`);
// Use positional placeholders ?
export const insertLinkStmt = db.query(`
INSERT INTO links (id, target, short, ogTitle, ogDesc, ogImage)
VALUES (?, ?, ?, ?, ?, ?)
`);
export const insertStatsStmt = db.query(`
INSERT INTO stats (linkId, clicks) VALUES (?, 0)
`);
export const getAllLinksStmt = db.query(`
SELECT l.*, s.clicks
FROM links l
LEFT JOIN stats s ON l.id = s.linkId
`);
export const getLinkByIdStmt = db.query(`
SELECT l.*, s.clicks
FROM links l
LEFT JOIN stats s ON l.id = s.linkId
WHERE l.id = ?
`);
export const getLinkByShortStmt = db.query(`
SELECT * FROM links WHERE short = ?
`);
export const updateLinkStmt = db.query(`
UPDATE links SET
target = COALESCE(?, target),
short = COALESCE(?, short),
ogTitle = COALESCE(?, ogTitle),
ogDesc = COALESCE(?, ogDesc),
ogImage = COALESCE(?, ogImage)
WHERE id = ?
`);
export const deleteLinkStmt = db.query(`DELETE FROM links WHERE id = ?`);
export const deleteStatsStmt = db.query(`DELETE FROM stats WHERE linkId = ?`);
export const incClickStmt = db.query(`
UPDATE stats SET clicks = clicks + 1 WHERE linkId = ?
`);
export const getStatsByIdStmt = db.query(`
SELECT clicks FROM stats WHERE linkId = ?
`);