From 8904cd9dba55ec1593e0e422273335e629df41fd Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Sun, 6 Apr 2025 00:53:10 +0900 Subject: [PATCH 1/6] wip --- server/prisma/schema.prisma | 1 + 1 file changed, 1 insertion(+) diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma index 2f5779fb..0602ff13 100644 --- a/server/prisma/schema.prisma +++ b/server/prisma/schema.prisma @@ -17,6 +17,7 @@ model User { grade Grade hobby String introduction String + wantToMatch Boolean @default(true) // universityId String // university University @relation(fields: [universityId], references: [university]) divisionId String From 89aac232011e2c5a9e380136b2d3be1bd0cc2509 Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Tue, 8 Apr 2025 22:15:45 +0900 Subject: [PATCH 2/6] done? --- common/zod/schema.ts | 2 ++ server/routes/community.ts | 8 +++++++- web/messages/en.json | 1 + web/src/app/[locale]/(auth)/settings/basic/page.tsx | 10 ++++++++++ web/src/app/[locale]/(auth)/settings/shared-class.ts | 1 + web/src/app/[locale]/registration/page.tsx | 9 ++++++++- web/src/features/format.ts | 1 + web/src/features/settings/UserFormController.tsx | 2 ++ 8 files changed, 32 insertions(+), 2 deletions(-) diff --git a/common/zod/schema.ts b/common/zod/schema.ts index 96b99264..6b9c1aa7 100644 --- a/common/zod/schema.ts +++ b/common/zod/schema.ts @@ -47,6 +47,8 @@ const BaseUserSchema = z.object({ isForeignStudent: z.boolean().default(false), grade: GradeSchema, + wantToMatch: z.boolean(), + hobby: HobbySchema, introduction: IntroductionSchema, }); diff --git a/server/routes/community.ts b/server/routes/community.ts index 1416ad16..4c1b8903 100644 --- a/server/routes/community.ts +++ b/server/routes/community.ts @@ -16,17 +16,22 @@ const router = new Hono().get( exchangeQuery: z.enum(["exchange", "japanese", "all"]).default("all"), searchQuery: z.string().default(""), marker: z.union([MarkerSchema, z.literal("notBlocked")]).optional(), + select: z.enum(["all"]).optional(), }), ), zValidator("header", z.object({ Authorization: z.string() })), async (c) => { const requester = await getUserID(c); - const { except, page, exchangeQuery, searchQuery, marker: markerQuery } = c.req.valid("query"); + const { except, page, exchangeQuery, searchQuery, marker: markerQuery, select } = c.req.valid("query"); const take = 15; //TODO: web側で指定できるようにする const skip = (page - 1) * take; const whereCondition: Prisma.UserWhereInput = {}; + if (select !== "all") { + whereCondition.wantToMatch = true; + } + // 言語交換フィルター if (exchangeQuery === "exchange") { whereCondition.isForeignStudent = true; @@ -111,6 +116,7 @@ const router = new Hono().get( gender: true, isForeignStudent: true, imageUrl: true, + wantToMatch: true, campus: { select: { university: true, id: true, jaName: true, enName: true }, }, diff --git a/web/messages/en.json b/web/messages/en.json index e9e80052..b9bc9197 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -69,6 +69,7 @@ "male": "Male", "female": "Female", "other": "Other", + "want-to-match": "Want to match", "photo": "Photo", "photoUpload": "Upload" }, diff --git a/web/src/app/[locale]/(auth)/settings/basic/page.tsx b/web/src/app/[locale]/(auth)/settings/basic/page.tsx index 4409d07a..b388cd6c 100644 --- a/web/src/app/[locale]/(auth)/settings/basic/page.tsx +++ b/web/src/app/[locale]/(auth)/settings/basic/page.tsx @@ -32,6 +32,16 @@ export default function Page() { +
(null); + // biome-ignore lint: we don't need it + useEffect(() => { + ctx.setFormData((prev) => ({ + ...prev, + wantToMatch: true, + })); + }, []); return ( <> diff --git a/web/src/features/format.ts b/web/src/features/format.ts index d765e5e0..d9356c7e 100644 --- a/web/src/features/format.ts +++ b/web/src/features/format.ts @@ -35,6 +35,7 @@ export function formatCardUser(user: StructuredCardUser, locale: string): FlatCa imageUrl: user.imageUrl ?? undefined, grade: user.grade, isForeignStudent: user.isForeignStudent, + wantToMatch: user.wantToMatch, campus: getName(user.campus), diff --git a/web/src/features/settings/UserFormController.tsx b/web/src/features/settings/UserFormController.tsx index d3f71ac0..934d8d41 100644 --- a/web/src/features/settings/UserFormController.tsx +++ b/web/src/features/settings/UserFormController.tsx @@ -206,6 +206,7 @@ export const UserFormProvider = ({ query: { except: me.id, marker: "favorite", + select: "all", }, }); @@ -228,6 +229,7 @@ export const UserFormProvider = ({ query: { except: me.id, marker: "blocked", + select: "all", }, }); From 51255b5c65c0829f1515e25df9522d1213b531ba Mon Sep 17 00:00:00 2001 From: Yuki Kobayashi <137767097+aster-void@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:35:10 +0900 Subject: [PATCH 3/6] fix build --- .gitignore | 2 ++ server/routes/users/index.ts | 1 + web/src/features/format.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index b8e912b4..c82ddd58 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ tsconfig.tsbuildinfo /.direnv /.envrc /shell.nix + +server/node_modules/.cache \ No newline at end of file diff --git a/server/routes/users/index.ts b/server/routes/users/index.ts index 40d8b3a6..9849491f 100644 --- a/server/routes/users/index.ts +++ b/server/routes/users/index.ts @@ -35,6 +35,7 @@ const router = new Hono() imageUrl: true, isForeignStudent: true, grade: true, + wantToMatch: true, hobby: true, introduction: true, diff --git a/web/src/features/format.ts b/web/src/features/format.ts index d9356c7e..58101ab8 100644 --- a/web/src/features/format.ts +++ b/web/src/features/format.ts @@ -12,6 +12,7 @@ export function formatUser(user: StructuredUser, locale: string): FlatUser { hobby: user.hobby, introduction: user.introduction, isForeignStudent: user.isForeignStudent, + wantToMatch: user.wantToMatch, university: getName(user.campus.university), division: getName(user.division), From 3eb8da100f7e397f0ebf2dcbb0b9ad3c7f6fa0e9 Mon Sep 17 00:00:00 2001 From: Yuki Kobayashi <137767097+aster-void@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:39:48 +0900 Subject: [PATCH 4/6] update translations --- web/messages/en.json | 2 +- web/messages/ja.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/web/messages/en.json b/web/messages/en.json index dcb1afc6..985a9014 100644 --- a/web/messages/en.json +++ b/web/messages/en.json @@ -74,7 +74,7 @@ "male": "Male", "female": "Female", "other": "Other", - "want-to-match": "Want to match", + "want-to-match": "Want to match more?", "photo": "Photo", "photoUpload": "Upload" }, diff --git a/web/messages/ja.json b/web/messages/ja.json index 02ef7068..4ea4d95c 100644 --- a/web/messages/ja.json +++ b/web/messages/ja.json @@ -74,6 +74,7 @@ "male": "男性", "female": "女性", "other": "その他", + "want-to-match": "新規にマッチングしたいですか?", "photo": "写真", "photoUpload": "アップロード" }, From 51e065cabb7f07d0330a01df736ff78765efece8 Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Thu, 10 Apr 2025 20:40:09 +0900 Subject: [PATCH 5/6] rename variable --- server/routes/community.ts | 8 ++++---- web/src/app/[locale]/(auth)/community/page.tsx | 1 + web/src/features/settings/UserFormController.tsx | 3 +-- web/src/hooks/useNormalizedPath.ts | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/server/routes/community.ts b/server/routes/community.ts index 4c1b8903..6665b39e 100644 --- a/server/routes/community.ts +++ b/server/routes/community.ts @@ -16,20 +16,20 @@ const router = new Hono().get( exchangeQuery: z.enum(["exchange", "japanese", "all"]).default("all"), searchQuery: z.string().default(""), marker: z.union([MarkerSchema, z.literal("notBlocked")]).optional(), - select: z.enum(["all"]).optional(), + wantsToMatch: z.enum(["true"]).optional(), }), ), zValidator("header", z.object({ Authorization: z.string() })), async (c) => { const requester = await getUserID(c); - const { except, page, exchangeQuery, searchQuery, marker: markerQuery, select } = c.req.valid("query"); + const { except, page, exchangeQuery, searchQuery, marker: markerQuery, wantsToMatch } = c.req.valid("query"); const take = 15; //TODO: web側で指定できるようにする const skip = (page - 1) * take; const whereCondition: Prisma.UserWhereInput = {}; - if (select !== "all") { - whereCondition.wantToMatch = true; + if (wantsToMatch) { + whereCondition.wantToMatch = wantsToMatch === "true"; } // 言語交換フィルター diff --git a/web/src/app/[locale]/(auth)/community/page.tsx b/web/src/app/[locale]/(auth)/community/page.tsx index f5ef1e77..836dd146 100644 --- a/web/src/app/[locale]/(auth)/community/page.tsx +++ b/web/src/app/[locale]/(auth)/community/page.tsx @@ -101,6 +101,7 @@ export default function Page() { exchangeQuery: query.exchange, searchQuery: query.search, marker: query.marker === "favorite" ? "favorite" : "notBlocked", + wantsToMatch: "true", }, header: { Authorization }, }, diff --git a/web/src/features/settings/UserFormController.tsx b/web/src/features/settings/UserFormController.tsx index 3b800a77..81fb7b2d 100644 --- a/web/src/features/settings/UserFormController.tsx +++ b/web/src/features/settings/UserFormController.tsx @@ -227,7 +227,7 @@ export const UserFormProvider = ({ query: { except: me.id, marker: "favorite", - select: "all", + wantsToMatch: "ignore", }, }); @@ -250,7 +250,6 @@ export const UserFormProvider = ({ query: { except: me.id, marker: "blocked", - select: "all", }, }); diff --git a/web/src/hooks/useNormalizedPath.ts b/web/src/hooks/useNormalizedPath.ts index 00a9bb49..defa9fbe 100644 --- a/web/src/hooks/useNormalizedPath.ts +++ b/web/src/hooks/useNormalizedPath.ts @@ -1,4 +1,4 @@ -import { PATHNAME_LANG_PREFIX_PATTERN } from "@/consts"; +import { PATHNAME_LANG_PREFIX_PATTERN } from "@/consts.ts"; import { usePathname } from "next/navigation"; /** From acd6dfebe99e9d29384377af84439f8e30734eb7 Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Thu, 10 Apr 2025 21:49:48 +0900 Subject: [PATCH 6/6] fix reg style and use schema default --- common/zod/schema.ts | 2 +- .../settings/components/SubmitButton.tsx | 41 +++++++++++-------- web/src/app/[locale]/registration/page.tsx | 11 +---- .../app/[locale]/registration/step2/page.tsx | 8 ++-- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/common/zod/schema.ts b/common/zod/schema.ts index d79718f1..626f0a6c 100644 --- a/common/zod/schema.ts +++ b/common/zod/schema.ts @@ -49,7 +49,7 @@ const BaseUserSchema = z.object({ isForeignStudent: z.boolean().default(false), grade: GradeSchema, - wantToMatch: z.boolean(), + wantToMatch: z.boolean().default(true), hobby: HobbySchema, introduction: IntroductionSchema, diff --git a/web/src/app/[locale]/(auth)/settings/components/SubmitButton.tsx b/web/src/app/[locale]/(auth)/settings/components/SubmitButton.tsx index 847e20c1..862f5724 100644 --- a/web/src/app/[locale]/(auth)/settings/components/SubmitButton.tsx +++ b/web/src/app/[locale]/(auth)/settings/components/SubmitButton.tsx @@ -4,26 +4,31 @@ import { useTranslations } from "next-intl"; import { styles } from "../shared-class.ts"; export function SubmitButton({ status }: { status: Status }) { - const t = useTranslations("settings"); return (
- +
); } +export function SubmitButtonItem({ status }: { status: Status }) { + const t = useTranslations("settings"); + return ( + + ); +} diff --git a/web/src/app/[locale]/registration/page.tsx b/web/src/app/[locale]/registration/page.tsx index 9b9ab48b..f01b5cec 100644 --- a/web/src/app/[locale]/registration/page.tsx +++ b/web/src/app/[locale]/registration/page.tsx @@ -9,7 +9,7 @@ import { NAME_MAX_LENGTH, Part1RegistrationSchema } from "common/zod/schema"; import { useTranslations } from "next-intl"; import { useLocale } from "next-intl"; import { useRouter } from "next/navigation"; -import { useEffect, useState } from "react"; +import { useState } from "react"; export default function Page() { const router = useRouter(); @@ -19,13 +19,6 @@ export default function Page() { const [isSubmitting, setIsSubmitting] = useState(false); const [errors, setErrors] = useState(null); const toast = useToast(); - // biome-ignore lint: we don't need it - useEffect(() => { - ctx.setFormData((prev) => ({ - ...prev, - wantToMatch: true, - })); - }, []); return ( <> @@ -121,7 +114,7 @@ export default function Page() { tabIndex={0} onKeyDown={(e) => { console.log(e.key); - if (e.key === "Enter") { + if (e.key === "Enter" || e.key === "Space") { document.getElementById("image-upload")?.click(); } }} diff --git a/web/src/app/[locale]/registration/step2/page.tsx b/web/src/app/[locale]/registration/step2/page.tsx index 60769416..8121144f 100644 --- a/web/src/app/[locale]/registration/step2/page.tsx +++ b/web/src/app/[locale]/registration/step2/page.tsx @@ -11,7 +11,7 @@ import { CreateUserSchema, HOBBY_MAX_LENGTH, INTRO_MAX_LENGTH } from "common/zod import { useTranslations } from "next-intl"; import { useLocale } from "next-intl"; import { useEffect, useState } from "react"; -import { SubmitButton } from "../../(auth)/settings/components/SubmitButton.tsx"; +import { SubmitButtonItem } from "../../(auth)/settings/components/SubmitButton.tsx"; export default function Page() { const t = useTranslations(); @@ -205,12 +205,12 @@ export default function Page() { />
-
- +
+ {t("community.previousButton")} +
- {errors &&
{errors}
}