Skip to content

Commit 5f80796

Browse files
committed
✨ Enable to use url slug in workbook page (#2020)
1 parent 1f603cc commit 5f80796

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

src/routes/workbooks/[slug]/+page.server.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
import { error, type Actions } from '@sveltejs/kit';
22

3-
import { getLoggedInUser, isAdmin, canRead } from '$lib/utils/authorship';
43
import { Roles } from '$lib/types/user';
5-
import { getWorkbookWithAuthor, parseWorkBookId } from '$lib/utils/workbook';
6-
import * as taskResultsCrud from '$lib/services/task_results';
74
import type { TaskResult } from '$lib/types/task';
8-
import { BAD_REQUEST, FORBIDDEN } from '$lib/constants/http-response-status-codes';
5+
6+
import * as taskResultsCrud from '$lib/services/task_results';
97
import * as action from '$lib/actions/update_task_result';
108

9+
import { getLoggedInUser, isAdmin, canRead } from '$lib/utils/authorship';
10+
import { getWorkbookWithAuthor, findWorkBookIdFrom } from '$lib/utils/workbook';
11+
import { BAD_REQUEST, FORBIDDEN } from '$lib/constants/http-response-status-codes';
12+
1113
export async function load({ locals, params }) {
1214
const loggedInUser = await getLoggedInUser(locals);
1315
const loggedInAsAdmin = isAdmin(loggedInUser?.role as Roles);
14-
const workBookId = parseWorkBookId(params.slug);
16+
const slug = params.slug.toLowerCase();
17+
const workBookId = await findWorkBookIdFrom(slug);
1518

1619
if (workBookId === null) {
1720
error(BAD_REQUEST, '不正な問題集idです。');
1821
}
1922

20-
const workbookWithAuthor = await getWorkbookWithAuthor(params.slug);
23+
const workbookWithAuthor = await getWorkbookWithAuthor(slug);
2124
const workBook = workbookWithAuthor.workBook;
2225
const isPublished = workBook.isPublished;
2326
const authorId = workBook.authorId;
2427

2528
if (loggedInUser && !canRead(isPublished, loggedInUser.id, authorId)) {
26-
error(FORBIDDEN, `問題集id: ${params.slug} にアクセスする権限がありません。`);
29+
error(FORBIDDEN, `問題集id: ${slug} にアクセスする権限がありません。`);
2730
}
2831

2932
const taskResults: Map<string, TaskResult> = await taskResultsCrud.getTaskResultsByTaskId(

src/routes/workbooks/edit/[slug]/+page.server.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { redirect, error } from '@sveltejs/kit';
1+
import { redirect, error, fail } from '@sveltejs/kit';
22
import { superValidate } from 'sveltekit-superforms/server';
33
import { zod } from 'sveltekit-superforms/adapters';
44

@@ -10,15 +10,16 @@ import {
1010
TEMPORARY_REDIRECT,
1111
INTERNAL_SERVER_ERROR,
1212
} from '$lib/constants/http-response-status-codes';
13-
import { getWorkbookWithAuthor, parseWorkBookId } from '$lib/utils/workbook';
13+
import { getWorkbookWithAuthor, findWorkBookIdFrom } from '$lib/utils/workbook';
1414
import { workBookSchema } from '$lib/zod/schema';
1515
import * as tasksCrud from '$lib/services/tasks';
1616
import * as workBooksCrud from '$lib/services/workbooks';
1717

1818
export async function load({ locals, params }) {
1919
const loggedInUser = await getLoggedInUser(locals);
2020
const loggedInAsAdmin = isAdmin(loggedInUser?.role as Roles);
21-
const workBookWithAuthor = await getWorkbookWithAuthor(params.slug);
21+
const slug = params.slug.toLowerCase();
22+
const workBookWithAuthor = await getWorkbookWithAuthor(slug);
2223

2324
const form = await superValidate(null, zod(workBookSchema));
2425
form.data = { ...form.data, ...workBookWithAuthor.workBook };
@@ -40,7 +41,7 @@ export async function load({ locals, params }) {
4041
) {
4142
return {
4243
status: FORBIDDEN,
43-
message: `問題集id: ${params.slug}にアクセスする権限がありません。`,
44+
message: `問題集id: ${slug}にアクセスする権限がありません。`,
4445
form,
4546
loggedInAsAdmin: loggedInAsAdmin,
4647
...workBookWithAuthor,
@@ -74,7 +75,8 @@ export const actions = {
7475
}
7576

7677
const workBook = form.data;
77-
const workBookId = parseWorkBookId(params.slug);
78+
const slug = params.slug.toLowerCase();
79+
const workBookId = await findWorkBookIdFrom(slug);
7880

7981
if (workBookId === null) {
8082
error(BAD_REQUEST, '不正な問題集idです。');
@@ -84,10 +86,13 @@ export const actions = {
8486
await workBooksCrud.updateWorkBook(workBookId, { ...workBook, id: workBookId });
8587
} catch (e) {
8688
console.error(`Failed to update WorkBook with id ${workBookId}:`, e);
87-
error(
88-
INTERNAL_SERVER_ERROR,
89-
`問題集id: ${workBookId} の更新に失敗しました。しばらくしてから、もう一度試してください。`,
90-
);
89+
90+
return fail(INTERNAL_SERVER_ERROR, {
91+
form: {
92+
...form,
93+
message: `問題集: ${workBookId} の更新に失敗しました。しばらくしてから、もう一度試してください。`,
94+
},
95+
});
9196
}
9297

9398
redirect(TEMPORARY_REDIRECT, '/workbooks');

0 commit comments

Comments
 (0)