Skip to content

Commit b2aaca5

Browse files
authored
Merge pull request #1273 from AtCoder-NoviSteps/#1271
🎨 Update descriptions and figures (1271)
2 parents ebfb29b + e316374 commit b2aaca5

17 files changed

+114
-86
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<div align="center">
3737
<video
3838
width="720"
39-
src="https://github.com/user-attachments/assets/88b19b21-fda3-4337-8266-9243b89e7096"
39+
src="https://github.com/user-attachments/assets/5d714055-e2fa-47e7-aa50-6e34a977fa58"
4040
autoplay
4141
muted
4242
controls
@@ -49,13 +49,13 @@
4949

5050
- **回答状況を自分で記録できる**: 「AC (正解)」「解説AC」「挑戦中」「未挑戦」から選べます。
5151
- **一歩先の問題に挑戦**: 17段階で難易度付けされており、自分の実力に合った問題が探せます。
52-
- **(開発中) 問題集で得意を伸ばす・苦手を克服**: 例題・類題を通して、各トピックの基礎から応用的な方法まで身につけられます。
52+
- **問題集で得意を伸ばす・苦手を克服**: 例題・類題を通して、各トピックの基礎から応用的な方法まで身につけられます。
5353

5454
## 主な機能
5555

5656
- 問題の回答状況の記録
5757
- 問題一覧: 難易度(ヒューリスティックな判断を含む)を見て、問題を探す
58-
- (開発中) 問題集: 特定のトピックに関する例題・類題を集中して解く
58+
- 問題集(アルファ版): 特定のトピックに関する例題・類題を集中して解く
5959

6060
## 予備知識
6161

@@ -71,7 +71,7 @@
7171

7272
1. (初回のみ) ユーザ名とパスワードを入力して、アカウントを作成します。
7373
2. ログインします。お試し用のアカウント (ユーザ名: guest、パスワード: Hell0Guest) を利用することもできます。
74-
3. 問題一覧で、グレードおよび問題を選び、回答欄の「更新」をクリックもしくはタップします。
74+
3. 問題集や問題一覧で、グレードおよび問題を選び、回答欄の「更新」をクリックもしくはタップします。
7575
4. 該当する回答状況 (デフォルトは「未挑戦」)を選択し、「回答を更新」ボタンを押します。
7676

7777
## 本サービスのスポンサー(敬称略・順不同)
@@ -102,7 +102,7 @@
102102

103103
## ご要望、ご報告、お気付きの点など
104104

105-
- [連絡先](https://twitter.com/acnovisteps)
105+
- [連絡先](https://x.com/acnovisteps)
106106

107107
- [本プロジェクトへの参加方法](https://github.com/KATO-Hiro/AtCoderNovisteps/blob/main/CONTRIBUTING.md)
108108

@@ -121,7 +121,7 @@
121121
- 貢献内容(予定も含む): アプリの仕様に関する提案・技術選定・設計・実装
122122
- [@ウルズニャー](https://x.com/uruzunyaa)
123123
- 役割: 問題の難易度評価
124-
- 貢献内容(予定も含む): 問題の難易度評価
124+
- 貢献内容(予定も含む): 問題の難易度評価、問題集作成
125125
- [@nonon](https://x.com/nonon_math)
126126
- 役割: 問題の難易度評価
127127
- 貢献内容(予定も含む): 問題の難易度評価、問題集作成

src/lib/components/AuthForm.svelte

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
GUEST_USER_NAME,
1515
GUEST_USER_PASSWORD,
1616
// GUEST_USER_PASSWORD_FOR_LOCAL,
17-
LOGIN_LABEL,
1817
} from '$lib/constants/forms';
18+
import { HOME_PAGE, LOGIN_PAGE } from '$lib/constants/navbar-links';
1919
2020
// FIXME: 構造体に相当するものを利用した方が拡張・修正がしやすくなるかもしれせまん
2121
export let formProperties;
@@ -55,7 +55,7 @@
5555
throw new Error('Not found form element or HTMLFormElement');
5656
}
5757
58-
const response = await fetch('/login', {
58+
const response = await fetch(LOGIN_PAGE, {
5959
method: 'POST',
6060
body: new FormData(formElement),
6161
});
@@ -65,7 +65,7 @@
6565
return;
6666
}
6767
68-
await goto('/');
68+
await goto(HOME_PAGE);
6969
} catch (error) {
7070
console.error('Failed to login as a guest: ', error);
7171
} finally {
@@ -88,21 +88,20 @@
8888
<h3 class="text-xl font-medium text-gray-900 dark:text-white">{title}</h3>
8989
<MessageHelperWrapper message={$message} />
9090

91-
{#if title === LOGIN_LABEL}
92-
<Button
93-
type="button"
94-
class="w-full"
95-
on:click={handleLoginAsGuest}
96-
on:keydown={handleLoginAsGuest}
97-
disabled={isSubmitting || $submitting}
98-
>
99-
<div class="text-md">お試し用のアカウントでログイン</div>
100-
</Button>
91+
<!-- Login as guest -->
92+
<Button
93+
type="button"
94+
class="w-full"
95+
on:click={handleLoginAsGuest}
96+
on:keydown={handleLoginAsGuest}
97+
disabled={isSubmitting || $submitting}
98+
>
99+
<div class="text-md">お試し用のアカウントでログイン</div>
100+
</Button>
101101

102-
<div>
103-
<Hr classHr="my-2 h-0.5 bg-gray-400 dark:bg-gray-200" />
104-
</div>
105-
{/if}
102+
<div>
103+
<Hr classHr="my-2 h-0.5 bg-gray-400 dark:bg-gray-200" />
104+
</div>
106105

107106
<!-- User name -->
108107
<div class="space-y-2">

src/lib/constants/http-response-status-codes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
// Redirection messages
55
export const FOUND = 302;
6+
export const SEE_OTHER = 303;
67
export const TEMPORARY_REDIRECT = 307;
78

89
// Client error responses

src/lib/constants/navbar-links.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
1+
export const HOME_PAGE = `/`;
2+
export const ABOUT_PAGE = `/about`;
3+
export const SIGNUP_PAGE = `/signup`;
4+
export const LOGIN_PAGE = `/login`;
5+
export const WORKBOOKS_PAGE = `/workbooks`;
6+
export const PROBLEMS_PAGE = `/problems`;
7+
8+
// For Admin
9+
export const IMPORTING_PROBLEMS_PAGE = `/tasks`;
10+
export const TAGS_PAGE = `/tags`;
11+
112
export const navbarLinks = [
2-
{ title: `ホーム`, path: `/` },
3-
{ title: `問題一覧`, path: `/problems` },
4-
// FIXME: 問題集機能を一般公開するときにコメントを外す。
5-
// { title: `問題集(アルファ版)`, path: `/workbooks` },
6-
{ title: `サービスの説明`, path: `/about` },
13+
{ title: `ホーム`, path: HOME_PAGE },
14+
{ title: `問題集(アルファ版)`, path: WORKBOOKS_PAGE },
15+
{ title: `問題一覧`, path: PROBLEMS_PAGE },
16+
{ title: `サービスの説明`, path: ABOUT_PAGE },
717
];
818

919
export const navbarDashboardLinks = [
10-
{ title: `問題のインポート`, path: `/tasks` },
11-
{ title: `問題一覧`, path: `/problems` },
12-
{ title: `問題集`, path: `/workbooks` },
13-
{ title: `タグ一覧`, path: `/tags` },
20+
{ title: `問題のインポート`, path: IMPORTING_PROBLEMS_PAGE },
21+
{ title: `問題一覧`, path: PROBLEMS_PAGE },
22+
{ title: `問題集`, path: WORKBOOKS_PAGE },
23+
{ title: `タグ一覧`, path: TAGS_PAGE },
1424
];

src/routes/(auth)/login/+page.server.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ import { auth } from '$lib/server/auth';
1111

1212
import {
1313
BAD_REQUEST,
14-
FOUND,
14+
SEE_OTHER,
1515
INTERNAL_SERVER_ERROR,
1616
} from '$lib/constants/http-response-status-codes';
17+
import { HOME_PAGE } from '$lib/constants/navbar-links';
1718

1819
import type { Actions, PageServerLoad } from './$types';
1920

2021
export const load: PageServerLoad = async ({ locals }) => {
2122
const session = await locals.auth.validate();
2223

2324
if (session) {
24-
redirect(FOUND, '/');
25+
redirect(SEE_OTHER, HOME_PAGE);
2526
}
2627

2728
const form = await superValidate(null, zod(authSchema));
@@ -82,6 +83,6 @@ export const actions: Actions = {
8283

8384
// redirect to
8485
// make sure you don't throw inside a try/catch block!
85-
redirect(FOUND, '/problems');
86+
redirect(SEE_OTHER, HOME_PAGE);
8687
},
8788
};

src/routes/(auth)/logout/+page.server.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@
33
import { auth } from '$lib/server/auth';
44
import { fail, redirect } from '@sveltejs/kit';
55

6+
import { SEE_OTHER, UNAUTHORIZED } from '$lib/constants/http-response-status-codes';
7+
import { HOME_PAGE } from '$lib/constants/navbar-links';
8+
69
import type { Actions } from './$types';
710

811
export const load = () => {
9-
redirect(303, '/');
12+
redirect(SEE_OTHER, HOME_PAGE);
1013
};
1114

12-
// TODO: ステータスコードを定数で書き換え
1315
export const actions: Actions = {
1416
logout: async ({ locals }) => {
1517
const session = await locals.auth.validate();
1618

1719
if (!session) {
18-
return fail(401);
20+
return fail(UNAUTHORIZED);
1921
}
2022

2123
await auth.invalidateSession(session.sessionId); // invalidate session
2224
locals.auth.setSession(null); // remove cookie
2325

24-
redirect(303, '/');
26+
redirect(SEE_OTHER, HOME_PAGE);
2527
},
2628
};

src/routes/(auth)/signup/+page.server.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,20 @@ import { LuciaError } from 'lucia';
1010
import { authSchema } from '$lib/zod/schema';
1111
import { auth } from '$lib/server/auth';
1212

13+
import {
14+
SEE_OTHER,
15+
BAD_REQUEST,
16+
INTERNAL_SERVER_ERROR,
17+
} from '$lib/constants/http-response-status-codes';
18+
import { HOME_PAGE } from '$lib/constants/navbar-links';
19+
1320
import type { Actions, PageServerLoad } from './$types';
1421

1522
export const load: PageServerLoad = async ({ locals }) => {
1623
const session = await locals.auth.validate();
1724

1825
if (session) {
19-
redirect(302, '/');
26+
redirect(SEE_OTHER, HOME_PAGE);
2027
}
2128

2229
const form = await superValidate(null, zod(authSchema));
@@ -30,7 +37,7 @@ export const actions: Actions = {
3037
const form = await superValidate(request, zod(authSchema));
3138

3239
if (!form.valid) {
33-
return fail(400, {
40+
return fail(BAD_REQUEST, {
3441
form: {
3542
...form,
3643
message:
@@ -68,7 +75,7 @@ export const actions: Actions = {
6875
(e instanceof PrismaClientKnownRequestError && e.code === 'P2002') ||
6976
(e instanceof LuciaError && e.message === 'AUTH_DUPLICATE_KEY_ID')
7077
) {
71-
return fail(400, {
78+
return fail(BAD_REQUEST, {
7279
form: {
7380
...form,
7481
message:
@@ -77,7 +84,7 @@ export const actions: Actions = {
7784
});
7885
}
7986

80-
return fail(500, {
87+
return fail(INTERNAL_SERVER_ERROR, {
8188
form: {
8289
...form,
8390
message: 'サーバでエラーが発生しました。本サービスの開発・運営チームに連絡してください。',
@@ -87,6 +94,6 @@ export const actions: Actions = {
8794

8895
// redirect to
8996
// make sure you don't throw inside a try/catch block!
90-
redirect(302, '/');
97+
redirect(SEE_OTHER, HOME_PAGE);
9198
},
9299
};

0 commit comments

Comments
 (0)