diff options
| author | Fuwn <[email protected]> | 2023-10-26 14:48:00 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-10-26 14:48:00 -0700 |
| commit | e61da1367da23c309bd006416d598d861dfcfb2c (patch) | |
| tree | 9e66664240f764c307292b772d6631cca349c363 | |
| parent | merge: main into badges (diff) | |
| download | due.moe-e61da1367da23c309bd006416d598d861dfcfb2c.tar.xz due.moe-e61da1367da23c309bd006416d598d861dfcfb2c.zip | |
refactor(badges): move to bun:sqlite
| -rw-r--r-- | src/lib/userBadgesDatabase.ts | 61 | ||||
| -rw-r--r-- | src/routes/api/badges/add/+server.ts | 11 | ||||
| -rw-r--r-- | src/routes/user/[user]/badges/+page.svelte | 31 |
3 files changed, 52 insertions, 51 deletions
diff --git a/src/lib/userBadgesDatabase.ts b/src/lib/userBadgesDatabase.ts index 78655cd3..8cf40d5b 100644 --- a/src/lib/userBadgesDatabase.ts +++ b/src/lib/userBadgesDatabase.ts @@ -1,57 +1,54 @@ -import { dev } from '$app/environment'; -import Database from 'better-sqlite3'; +import { Database } from 'bun:sqlite'; export interface Badge { - post: string; - image: string; + post?: string; + image?: string; description?: string; id?: number; } const database = new Database('./data/due_moe.sqlite3', { - verbose: dev ? console.log : undefined + create: true }); -database.exec(`create table if not exists user_badges ( - id integer primary key, - user_id integer not null, - post text(1000) not null, - image text(1000) not null, - description text(1000) default null, - time timestamp default current_timestamp -)`); +database + .query( + `CREATE TABLE IF NOT EXISTS user_badges ( + id INTEGER PRIMARY KEY, + user_id INTEGER NOT NULL, + post TEXT(1000) NOT NULL, + image TEXT(1000) NOT NULL, + description TEXT(1000) DEFAULT NULL, + time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +)` + ) + .run(); export const getUserBadges = (userId: number): Badge[] => { return database - .prepare('select * from user_badges where user_id = ?') - .all(String(userId)) as Badge[]; + .query('SELECT * FROM user_badges WHERE user_id = $userId') + .all({ $userId: String(userId) }) as Badge[]; }; export const addUserBadge = (userId: number, badge: Badge) => { const { post, image, description } = badge; - const statement = database.prepare(` - insert into user_badges (user_id, post, image, description) values (?, ?, ?, ?) - `); - statement.run(userId, post, image, description); -}; - -export const addUserBadges = (userId: number, badges: Badge[]) => { - const statement = database.prepare(` - insert into user_badges (user_id, post, image, description) values (?, ?, ?, ?) - `); + if (post === undefined || image === undefined) { + return; + } - for (const badge of badges) { - const { post, image, description } = badge; + const statement = database.query( + `INSERT INTO user_badges (user_id, post, image, description) VALUES (?1, ?2, ?3, ?4);` + ); - statement.run(userId, post, image, description); - } + statement.run([userId, post, image, description]); }; export const removeUserBadge = (userId: number, id: number) => { if (!isNaN(id)) { - const statement = database.prepare('delete from user_badges where user_id = ? and id = ?'); - - statement.run(userId, id); + database.query('DELETE FROM user_badges WHERE user_id = $userId AND id = $id').run({ + $userId: userId, + $id: id + }); } }; diff --git a/src/routes/api/badges/add/+server.ts b/src/routes/api/badges/add/+server.ts index 6ce9421e..627176a7 100644 --- a/src/routes/api/badges/add/+server.ts +++ b/src/routes/api/badges/add/+server.ts @@ -1,7 +1,7 @@ import { userIdentity } from '$lib/AniList/identity.js'; -import { addUserBadges } from '$lib/userBadgesDatabase.js'; +import { addUserBadge } from '$lib/userBadgesDatabase.js'; -export const POST = async ({ cookies, request }) => { +export const POST = async ({ cookies, url }) => { const userCookie = cookies.get('user'); if (!userCookie) { @@ -15,9 +15,12 @@ export const POST = async ({ cookies, request }) => { accessToken: user['access_token'], refreshToken: user['refresh_token'] }); - const formData = await request.json(); - addUserBadges(identity.id, formData); + addUserBadge(identity.id, { + post: url.searchParams.get('post') || undefined, + image: url.searchParams.get('image') || undefined, + description: url.searchParams.get('description') || undefined + }); return Response.json({}); }; diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index 293a7ba5..324d568e 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -26,25 +26,26 @@ const activityURL = document.querySelector('input[name="activity_url"]') as HTMLInputElement; const description = document.querySelector('input[name="description"]') as HTMLInputElement; - fetch(`/api/badges/add`, { - method: 'POST', - body: JSON.stringify([ - { image: imageURL.value, post: activityURL.value, description: description.value } - ]) + fetch( + `/api/badges/add?image=${encodeURIComponent(imageURL.value)}&post=${encodeURIComponent( + activityURL.value + )}&description=${encodeURIComponent(description.value)}`, + { + method: 'POST' + } + ).then(() => { + imageURL.value = ''; + activityURL.value = ''; + description.value = ''; }); - - console.log(imageURL.value, activityURL.value, description.value); - - imageURL.value = ''; - activityURL.value = ''; - description.value = ''; }; const removeBadge = (badge: Badge) => { fetch(`/api/badges/remove?id=${badge.id}`, { method: 'POST' + }).then(() => { + (document.querySelector(`#badge-${badge.id}`) as HTMLAnchorElement).style.display = 'none'; }); - (document.querySelector(`#badge-${badge.id}`) as HTMLAnchorElement).style.display = 'none'; }; </script> @@ -56,9 +57,9 @@ <a href={`/user/${data.username}`}>Back to Profile</a> {#if isOwner} • - <a href={`#`} on:click={() => (editMode = !editMode)} - >{editMode ? 'Disable' : 'Enable'} Edit Mode</a - > + <a href={`#`} on:click={() => (editMode = !editMode)}> + {editMode ? 'Disable' : 'Enable'} Edit Mode + </a> {/if} </p> |