From bc04506fe1bb4c81111767131bb5ceef2d58234d Mon Sep 17 00:00:00 2001 From: bloodwiing Date: Thu, 16 May 2024 09:59:12 +0300 Subject: [PATCH] Refactor: Remove SQL from Locals --- src/hooks.server.js | 5 ---- src/lib/server/db/category.js | 11 +++----- src/lib/server/db/comment.js | 6 ++--- src/lib/server/db/post.js | 13 +++++----- src/lib/server/db/root.js | 16 ++++++------ src/lib/server/db/user.js | 25 +++++++++++++++++++ src/routes/(app)/posts/+page.server.js | 6 ++--- src/routes/(app)/posts/[name]/+page.server.js | 6 ++--- src/routes/(app)/users/[name]/+page.server.js | 4 +-- 9 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/hooks.server.js b/src/hooks.server.js index e7b1ac5..63e4bc2 100644 --- a/src/hooks.server.js +++ b/src/hooks.server.js @@ -1,12 +1,7 @@ -import { sql } from '$lib/db.server'; - export const handle = async ({event, resolve}) => { // https://github.com/porsager/postgres/issues/762 - event.locals = { - sql: sql - }; const response = await resolve(event); return response; }; diff --git a/src/lib/server/db/category.js b/src/lib/server/db/category.js index 0ab419a..44bd866 100644 --- a/src/lib/server/db/category.js +++ b/src/lib/server/db/category.js @@ -1,4 +1,5 @@ import { createCache } from '$lib/cache.server'; +import { sql } from '$lib/db.server'; import { cacheUpdater, cachedMethod, refExtendCachedMethod } from './root'; const cache = createCache(); @@ -30,7 +31,6 @@ function parseCategoryFromRow(row) { const updateCategoryCache = cacheUpdater(cache); /** - * @param {import('postgres').Sql} sql * @param {number[] | undefined} user_ids * @returns {Promise>} */ @@ -39,11 +39,10 @@ export const getCategoriesCached = cachedMethod(cache, getCategories); export const getCategoriesCachedByRef = refExtendCachedMethod(getCategoriesCached); /** - * @param {import('postgres').Sql} sql * @param {number[] | undefined} category_ids * @returns {Promise>} */ -export async function getCategories(sql, category_ids = undefined) { +export async function getCategories(category_ids = undefined) { if (category_ids !== undefined && category_ids.length == 0) return new Map(); const filter = category_ids ? sql`WHERE id IN ${ sql(category_ids) }` : sql``; @@ -68,13 +67,11 @@ export async function getCategories(sql, category_ids = undefined) { } /** - * - * @param {import('postgres').Sql} sql * @param {number} category_id * @returns {Promise} */ -export async function getCategoryCached(sql, category_id) { - const categories = await getCategoriesCached(sql, [category_id]); +export async function getCategoryCached(category_id) { + const categories = await getCategoriesCached([category_id]); return categories.get(category_id) || { error: true, diff --git a/src/lib/server/db/comment.js b/src/lib/server/db/comment.js index d1a7747..ca09627 100644 --- a/src/lib/server/db/comment.js +++ b/src/lib/server/db/comment.js @@ -1,3 +1,4 @@ +import { sql } from '$lib/db.server'; import { getUsersCachedByRef } from './user'; /** @@ -26,11 +27,10 @@ function parseCommentFromRow(author, row) { } /** - * @param {import('postgres').Sql} sql * @param {number} post_id * @returns {Promise} */ -export async function getCommentsForPost(sql, post_id) { +export async function getCommentsForPost(post_id) { const query = sql` SELECT id, author_id, latest_content, edit_count, parent_comment_id, created_date, likes, dislikes FROM doki8902.message_comment @@ -38,7 +38,7 @@ export async function getCommentsForPost(sql, post_id) { const comments = await query; - const users = await getUsersCachedByRef(sql, comments, c => c['author_id']); + const users = await getUsersCachedByRef(comments, c => c['author_id']); /** * @type {Comment[]} diff --git a/src/lib/server/db/post.js b/src/lib/server/db/post.js index e561369..222ed5c 100644 --- a/src/lib/server/db/post.js +++ b/src/lib/server/db/post.js @@ -1,3 +1,4 @@ +import { sql } from '$lib/db.server'; import { getCategoriesCachedByRef, getCategoryCached } from './category'; import { getUser, getUsersCachedByRef } from './user'; @@ -47,7 +48,6 @@ function parsePostFromRow(author, category, row, withMetrics = false) { } /** - * @param {import('postgres').Sql} sql * @param {{ * category?: import('$types/base').Category | undefined, * limit?: number, @@ -56,7 +56,7 @@ function parsePostFromRow(author, category, row, withMetrics = false) { * }} opts * @returns {Promise} */ -export async function getPosts(sql, opts = {}) { +export async function getPosts(opts = {}) { const { category = undefined, limit = 10, @@ -76,8 +76,8 @@ export async function getPosts(sql, opts = {}) { const posts = await query; - const users = await getUsersCachedByRef(sql, posts, p => p['author_id']); - const categories = await getCategoriesCachedByRef(sql, posts, p => p['category_id']); + const users = await getUsersCachedByRef(posts, p => p['author_id']); + const categories = await getCategoriesCachedByRef(posts, p => p['category_id']); /** * @type {Post[]} @@ -92,14 +92,13 @@ export async function getPosts(sql, opts = {}) { /** * - * @param {import('postgres').Sql} sql * @param {number} post_id * @param {{ * withMetrics?: boolean * }} opts * @returns {Promise} */ -export async function getPost(sql, post_id, opts = {}) { +export async function getPost(post_id, opts = {}) { const { withMetrics = false } = opts; @@ -120,7 +119,7 @@ export async function getPost(sql, post_id, opts = {}) { }; } - const user_guess = await getUser(sql, post['author_id']); + const user_guess = await getUser(post['author_id']); /** * @type {import('$types/base').User | null} */ diff --git a/src/lib/server/db/root.js b/src/lib/server/db/root.js index ce73d8a..3305159 100644 --- a/src/lib/server/db/root.js +++ b/src/lib/server/db/root.js @@ -15,11 +15,11 @@ export const cacheUpdater = (cache) => { /** * @template T * @param {import('node-cache')} cache - * @param {function(import('postgres').Sql, number[]): Promise>} method - * @returns {function(import('postgres').Sql, number[]): Promise>} + * @param {function(number[]): Promise>} method + * @returns {function(number[]): Promise>} */ export const cachedMethod = (cache, method) => { - return async function(sql, ids) { + return async function(ids) { /** * @type {import('$types/base').Result} */ @@ -39,7 +39,7 @@ export const cachedMethod = (cache, method) => { missing.push(id); }); - const remaining = await method(sql, missing); + const remaining = await method(missing); return new Map([...results, ...remaining]); }; @@ -47,11 +47,11 @@ export const cachedMethod = (cache, method) => { /** * @template T - * @param {function(import('postgres').Sql, number[]): Promise>} cachedMethod - * @returns {function(import('postgres').Sql, import('postgres').RowList, function(import('postgres').Row): number): Promise>} + * @param {function(number[]): Promise>} cachedMethod + * @returns {function(import('postgres').RowList, function(import('postgres').Row): number): Promise>} */ export const refExtendCachedMethod = (cachedMethod) => { - return async function(sql, rows, getRef) { - return await cachedMethod(sql, rows.map(r => getRef(r))); + return async function(rows, getRef) { + return await cachedMethod(rows.map(r => getRef(r))); } } diff --git a/src/lib/server/db/user.js b/src/lib/server/db/user.js index 6844d1f..6483682 100644 --- a/src/lib/server/db/user.js +++ b/src/lib/server/db/user.js @@ -1,4 +1,5 @@ import { createCache } from '$lib/cache.server'; +import { genSalt } from 'bcrypt'; import { cacheUpdater, cachedMethod, refExtendCachedMethod } from './root'; const cache = createCache(); @@ -79,3 +80,27 @@ export async function getUser(sql, user_id) { msg: `Could not find user of ID ${user_id}` }; } + +/** + * @param {import('postgres').Sql} sql + * @param {string} username + * @param {string} password + * @returns {Promise} + */ +export async function registerUser(sql, username, password) { + // const users = await getUsers(sql, [user_id]); + + // return users.get(user_id) || { + // error: true, + // msg: `Could not find user of ID ${user_id}` + // }; + const salt = await genSalt(10); + + console.log(salt); + + // const hash = + + // const insert = sql` + // INSERT INTO doki8902.user (username, password) + // VALUES (${ username }, ${ hash })` +} diff --git a/src/routes/(app)/posts/+page.server.js b/src/routes/(app)/posts/+page.server.js index a3f9699..d3f69b4 100644 --- a/src/routes/(app)/posts/+page.server.js +++ b/src/routes/(app)/posts/+page.server.js @@ -2,13 +2,13 @@ import { getPost, getPosts } from '$lib/server/db/post'; /** @type {import('./$types').PageServerLoad} */ -export async function load({ locals, url }) { - const result = await getPosts(locals.sql); +export async function load({ url }) { + const result = await getPosts(); const glance = url.searchParams.get('glance'); const glanceID = glance ? parseInt(glance) : null - const glancePost = glanceID ? await getPost(locals.sql, glanceID, { withMetrics: true }) : null; + const glancePost = glanceID ? await getPost(glanceID, { withMetrics: true }) : null; return { posts: result, diff --git a/src/routes/(app)/posts/[name]/+page.server.js b/src/routes/(app)/posts/[name]/+page.server.js index 1118fc5..fc01d7b 100644 --- a/src/routes/(app)/posts/[name]/+page.server.js +++ b/src/routes/(app)/posts/[name]/+page.server.js @@ -4,16 +4,16 @@ import { getIdFromName } from "$lib/util"; import { error } from "@sveltejs/kit"; /** @type {import("@sveltejs/kit").ServerLoad} */ -export async function load({ params, locals }) { +export async function load({ params }) { const post_id = getIdFromName(params.name); if (post_id === null) { error(404, `No Post of ID ${params.name}`); } - const post = await getPost(locals.sql, post_id); + const post = await getPost(post_id); - const comments = await getCommentsForPost(locals.sql, post_id); + const comments = await getCommentsForPost(post_id); return { post: post, diff --git a/src/routes/(app)/users/[name]/+page.server.js b/src/routes/(app)/users/[name]/+page.server.js index f34d297..bf258a8 100644 --- a/src/routes/(app)/users/[name]/+page.server.js +++ b/src/routes/(app)/users/[name]/+page.server.js @@ -3,14 +3,14 @@ import { getIdFromName } from "$lib/util"; import { error } from "@sveltejs/kit"; /** @type {import("@sveltejs/kit").ServerLoad} */ -export async function load({ locals, params }) { +export async function load({ params }) { const user_id = getIdFromName(params.name); if (user_id === null) { return error(404, `Invalid Name ${params.name}`); } - const user = await getUser(locals.sql, user_id); + const user = await getUser(user_id); if ('error' in user) { return error(404, `No User of ID ${user_id}`);