Add: Use fail() to indicate action error

This commit is contained in:
Donatas Kirda 2024-05-20 12:15:16 +03:00
parent 25324d17a8
commit e5a4572856
Signed by: bloodwiing
GPG Key ID: 63020D8D3F4A164F
3 changed files with 49 additions and 25 deletions

View File

@ -3,6 +3,7 @@ import { getCategories, getCategoriesCached } from '$lib/server/db/category.js';
import { createPost } from '$lib/server/db/post.js'; import { createPost } from '$lib/server/db/post.js';
import { getUserIDOfSession } from '$lib/server/db/user.js'; import { getUserIDOfSession } from '$lib/server/db/user.js';
import { parseIntNull } from '$lib/util.js'; import { parseIntNull } from '$lib/util.js';
import { errorToFail, getError, getSuccess, runIfError, runIfSuccess } from '$lib/util.server.js';
import { error, fail, redirect } from '@sveltejs/kit'; import { error, fail, redirect } from '@sveltejs/kit';
export async function load({ cookies }) { export async function load({ cookies }) {
@ -22,7 +23,11 @@ async function POST({ request, cookies }) {
const userToken = cookies.get('token'); const userToken = cookies.get('token');
if (!userToken) { if (!userToken) {
error(401, 'Need to be logged in!'); return fail(401, {
error: true,
title: 'Invalid session',
msg: 'Need to be logged in to perform this operation',
});
} }
const data = await request.formData(); const data = await request.formData();
@ -31,29 +36,40 @@ async function POST({ request, cookies }) {
const content = data.get('content')?.toString(); const content = data.get('content')?.toString();
if (!categoryId) { if (!categoryId) {
error(400, `Invalid category ID ${categoryId}`); return fail(400, {
error: true,
title: 'Bad data',
msg: `Invalid category ID ${categoryId}`,
});
} }
if (!name || !content) { if (!name || !content) {
// return { return fail(400, {
// error: true, error: true,
// } /** TODO: use fail() */ title: 'Bad data',
return fail(400, {reason: `Not all fields have been filled out`}); msg: 'Name and Content must have content',
});
} }
const category = (await getCategoriesCached([categoryId])).get(categoryId); const category = (await getCategoriesCached([categoryId])).get(categoryId);
if (!category) { if (!category) {
error(400, `Invalid category ID ${categoryId}`); return fail(400, {
error: true,
title: 'Bad data',
msg: `Invalid category ID ${categoryId}`,
});
} }
const result = await createPost(userToken, category, name, content); const result = await createPost(userToken, category, name, content);
if ('error' in result) { runIfSuccess(result, (success) => {
redirect(303, `/posts/${success.result}`);
});
} else { return runIfError(result, (error) => {
redirect(303, `/posts/${result.result}`); return errorToFail(error);
} });
} }
export const actions = { export const actions = {

View File

@ -1,5 +1,6 @@
import { createUserSession } from "$lib/server/db/user"; import { createUserSession } from "$lib/server/db/user";
import { redirect } from "@sveltejs/kit"; import { errorToFail, runIfError } from "$lib/util.server";
import { fail, redirect } from "@sveltejs/kit";
/** @type {import("@sveltejs/kit").ServerLoad} */ /** @type {import("@sveltejs/kit").ServerLoad} */
export async function load({ cookies }) { export async function load({ cookies }) {
@ -10,16 +11,16 @@ export async function load({ cookies }) {
/** @type {import("@sveltejs/kit").Action} */ /** @type {import("@sveltejs/kit").Action} */
async function POST({ request, cookies }) { async function POST({ request, cookies }) {
if (request.method !== 'POST') {
return;
}
const data = await request.formData(); const data = await request.formData();
const username = data.get('username')?.toString(); const username = data.get('username')?.toString();
const password = data.get('password')?.toString(); const password = data.get('password')?.toString();
if (!username || !password) { if (!username || !password) {
return; return fail(400, {
error: true,
title: 'Bad data',
msg: 'Username and Password cannot be empty',
});
} }
const result = await createUserSession(username, password); const result = await createUserSession(username, password);
@ -32,6 +33,10 @@ async function POST({ request, cookies }) {
redirect(302, '/posts'); redirect(302, '/posts');
} }
return runIfError(result, (error) => {
return errorToFail(error);
});
} }
/** @type {import("@sveltejs/kit").Actions} */ /** @type {import("@sveltejs/kit").Actions} */

View File

@ -1,5 +1,6 @@
import { createUser } from '$lib/server/db/user'; import { createUser } from '$lib/server/db/user';
import { redirect } from '@sveltejs/kit'; import { errorToFail, runIfError } from '$lib/util.server';
import { fail, redirect } from '@sveltejs/kit';
/** @type {import('@sveltejs/kit').ServerLoad} */ /** @type {import('@sveltejs/kit').ServerLoad} */
export async function load({ cookies }) { export async function load({ cookies }) {
@ -10,21 +11,23 @@ export async function load({ cookies }) {
/** @type {import('@sveltejs/kit').Action} */ /** @type {import('@sveltejs/kit').Action} */
async function POST({ request }) { async function POST({ request }) {
if (request.method !== 'POST') {
return;
}
const data = await request.formData(); const data = await request.formData();
const username = data.get('username')?.toString(); const username = data.get('username')?.toString();
const password = data.get('password')?.toString(); const password = data.get('password')?.toString();
if (!username || !password) { if (!username || !password) {
return; return fail(400, {
error: true,
title: 'Bad data',
msg: 'Username and Password cannot be empty',
});
} }
const result = await createUser(username, password); const result = await createUser(username, password);
console.log(result); return runIfError(result, (error) => {
return errorToFail(error);
});
} }
/** @type {import('@sveltejs/kit').Actions} */ /** @type {import('@sveltejs/kit').Actions} */