Add: Fetching posts by Token
This commit is contained in:
parent
e16429cdd9
commit
9fa4655632
@ -118,29 +118,34 @@ export async function getPosts(opts = {}) {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {number} post_id
|
* @param {number} post_id
|
||||||
|
* @param {string | null} token
|
||||||
* @param {{
|
* @param {{
|
||||||
* withMetrics?: boolean
|
* withMetrics?: boolean
|
||||||
* }} opts
|
* }} opts
|
||||||
* @returns {Promise<Post | import('$types/status').Error>}
|
* @returns {Promise<Post | import('$types/status').Error>}
|
||||||
*/
|
*/
|
||||||
export async function getPost(post_id, opts = {}) {
|
export async function getPost(post_id, token = null, opts = {}) {
|
||||||
const {
|
const {
|
||||||
withMetrics = false
|
withMetrics = false
|
||||||
} = opts;
|
} = opts;
|
||||||
|
|
||||||
const metrics = withMetrics ? sql`, comment_count, user_count, latest_activity, engagement, age, relevancy` : sql``;
|
const metrics = withMetrics ? sql`, comment_count, user_count, latest_activity, engagement, age, relevancy` : sql``;
|
||||||
|
|
||||||
|
const allowOwn = token ? sql`OR author_id = (${ sqlUserFromToken(token) })` : sql``;
|
||||||
|
|
||||||
const query = sql`
|
const query = sql`
|
||||||
SELECT id, author_id, name, category_id, latest_content, edit_count, created_date, likes, dislikes ${ metrics }
|
SELECT id, author_id, name, category_id, latest_content, reviewed, edit_count, created_date, likes, dislikes ${ metrics }
|
||||||
FROM doki8902.message_post
|
FROM doki8902.message_post
|
||||||
WHERE id = ${ post_id };`;
|
WHERE id = ${ post_id } AND (reviewed ${ allowOwn });`;
|
||||||
|
|
||||||
const post = (await query).at(0);
|
const post = (await query).at(0);
|
||||||
|
|
||||||
if (!post) {
|
if (!post) {
|
||||||
return {
|
return {
|
||||||
error: true,
|
error: true,
|
||||||
msg: `Could not find Post of ID ${ post_id }`
|
title: 'No Post',
|
||||||
|
msg: `Could not find Post of ID ${ post_id }`,
|
||||||
|
expected: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +165,9 @@ export async function getPost(post_id, opts = {}) {
|
|||||||
if (Object.hasOwn(category_guess, 'error')) {
|
if (Object.hasOwn(category_guess, 'error')) {
|
||||||
return {
|
return {
|
||||||
error: true,
|
error: true,
|
||||||
msg: `Post of ID ${ post_id } has an invalid Category ID ${ post['category_id'] }`
|
title: 'Category invalid',
|
||||||
|
msg: `Post of ID ${ post_id } has an invalid Category ID ${ post['category_id'] }`,
|
||||||
|
expected: false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,25 @@
|
|||||||
import { getCommentsForPost } from "$lib/server/db/comment";
|
import { getCommentsForPost } from "$lib/server/db/comment";
|
||||||
import { getPost } from "$lib/server/db/post";
|
import { getPost } from "$lib/server/db/post";
|
||||||
|
import { getError } from "$lib/status";
|
||||||
import { getIdFromName } from "$lib/util";
|
import { getIdFromName } from "$lib/util";
|
||||||
import { error } from "@sveltejs/kit";
|
import { error } from "@sveltejs/kit";
|
||||||
|
|
||||||
/** @type {import("@sveltejs/kit").ServerLoad} */
|
/** @type {import("@sveltejs/kit").ServerLoad} */
|
||||||
export async function load({ params }) {
|
export async function load({ params, cookies }) {
|
||||||
const post_id = getIdFromName(params.name);
|
const post_id = getIdFromName(params.name);
|
||||||
|
|
||||||
if (post_id === null) {
|
if (post_id === null) {
|
||||||
error(404, `No Post of ID ${params.name}`);
|
error(404, `No Post of ID ${params.name}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const token = cookies.get('token')?.toString() ?? null;
|
||||||
|
|
||||||
const post = await getPost(post_id);
|
const post = await getPost(post_id, token);
|
||||||
|
|
||||||
|
const postError = getError(post);
|
||||||
|
if (postError) {
|
||||||
|
error(404, postError.msg);
|
||||||
|
}
|
||||||
|
|
||||||
const comments = await getCommentsForPost(post_id);
|
const comments = await getCommentsForPost(post_id);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user