From 78155f0c8a31c53347d88efcc9cf6f72806db0ab Mon Sep 17 00:00:00 2001 From: KaichiManabe <154493010+KaichiManabe@users.noreply.github.com> Date: Mon, 2 Dec 2024 22:26:49 +0900 Subject: [PATCH 1/4] =?UTF-8?q?seed=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB?= =?UTF-8?q?=E3=80=81=E3=83=A1=E3=83=A2=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/seeds/test-data/data.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/src/seeds/test-data/data.ts b/server/src/seeds/test-data/data.ts index 64dd2dd4..3dabe051 100644 --- a/server/src/seeds/test-data/data.ts +++ b/server/src/seeds/test-data/data.ts @@ -1,4 +1,4 @@ -import type { Day } from "common/types"; +import type { Day, User } from "common/types"; export const subjects: Array<{ group: string; @@ -30,7 +30,19 @@ export const interest = [ { userId: 103, subjectId: 4 }, ]; -export const users = [ +export const users: User[] = [ + { + id: 0, + name: "メモ", + gender: "メモ", + grade: "メモ", + faculty: "メモ", + department: "メモ", + intro: "メモです。", + pictureUrl: + "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvpbYflYCwbG_c11ADWhZUaf93zrtmvYYjSvY4NNxcF4Ri-XO6jiFZq-1InXfcxBjTD9_8jQntvnzML5F0geA04H9etzy3dcZ7SaqpbfKX4PmFgg8nplhaSLBCWo6zOIwq-jJc9tjrXxKV/s1600/bunbougu_memo.png", + guid: "0000", + }, { id: 101, name: "田中太郎", From 5b783c67ec89450863b5ab06b04c39aea1f93f58 Mon Sep 17 00:00:00 2001 From: KaichiManabe <154493010+KaichiManabe@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:14:53 +0900 Subject: [PATCH 2/4] fix test error --- server/src/functions/engines/recommendation.test.ts | 6 +++--- server/src/functions/user.test.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/functions/engines/recommendation.test.ts b/server/src/functions/engines/recommendation.test.ts index 5a046854..ab3e2615 100644 --- a/server/src/functions/engines/recommendation.test.ts +++ b/server/src/functions/engines/recommendation.test.ts @@ -9,13 +9,13 @@ beforeAll(() => { test("recommendation engine", async () => { const usersFor101 = await recommendedTo(101, 5, 0); if (!usersFor101.ok) throw new Error(); - expect(usersFor101.value.map((entry) => entry.u.id)).toEqual([102, 103]); + expect(usersFor101.value.map((entry) => entry.u.id)).toEqual([102, 103, 0]); const usersFor102 = await recommendedTo(102, 5, 0); if (!usersFor102.ok) throw new Error(); - expect(usersFor102.value.map((entry) => entry.u.id)).toEqual([103, 101]); + expect(usersFor102.value.map((entry) => entry.u.id)).toEqual([103, 101, 0]); const usersFor103 = await recommendedTo(103, 5, 0); if (!usersFor103.ok) throw new Error(); - expect(usersFor103.value.map((entry) => entry.u.id)).toEqual([102, 101]); + expect(usersFor103.value.map((entry) => entry.u.id)).toEqual([102, 101, 0]); }); diff --git a/server/src/functions/user.test.ts b/server/src/functions/user.test.ts index ba04f302..f267ce42 100644 --- a/server/src/functions/user.test.ts +++ b/server/src/functions/user.test.ts @@ -14,7 +14,7 @@ beforeAll(() => { test("get all users", async () => { const result = await getAllUsers(); expect(result.code).toBe(200); - expect(result.body).toSatisfy((s) => s.length === 3); + expect(result.body).toSatisfy((s) => s.length === 4); expect(result.body).toSatisfy( (s) => typeof s !== "string" && s.some((person) => person.name === "田中太郎"), From ed75e1fd408172013f9f99f539af285d0168fb90 Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Sun, 29 Dec 2024 14:53:58 +0900 Subject: [PATCH 3/4] fix memo appearing in recommendation list if they are not matched --- .../functions/engines/recommendation.test.ts | 6 +++--- server/src/functions/engines/recommendation.ts | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/server/src/functions/engines/recommendation.test.ts b/server/src/functions/engines/recommendation.test.ts index ab3e2615..5a046854 100644 --- a/server/src/functions/engines/recommendation.test.ts +++ b/server/src/functions/engines/recommendation.test.ts @@ -9,13 +9,13 @@ beforeAll(() => { test("recommendation engine", async () => { const usersFor101 = await recommendedTo(101, 5, 0); if (!usersFor101.ok) throw new Error(); - expect(usersFor101.value.map((entry) => entry.u.id)).toEqual([102, 103, 0]); + expect(usersFor101.value.map((entry) => entry.u.id)).toEqual([102, 103]); const usersFor102 = await recommendedTo(102, 5, 0); if (!usersFor102.ok) throw new Error(); - expect(usersFor102.value.map((entry) => entry.u.id)).toEqual([103, 101, 0]); + expect(usersFor102.value.map((entry) => entry.u.id)).toEqual([103, 101]); const usersFor103 = await recommendedTo(103, 5, 0); if (!usersFor103.ok) throw new Error(); - expect(usersFor103.value.map((entry) => entry.u.id)).toEqual([102, 101, 0]); + expect(usersFor103.value.map((entry) => entry.u.id)).toEqual([102, 101]); }); diff --git a/server/src/functions/engines/recommendation.ts b/server/src/functions/engines/recommendation.ts index cac0bcd4..bc6cfd47 100644 --- a/server/src/functions/engines/recommendation.ts +++ b/server/src/functions/engines/recommendation.ts @@ -19,14 +19,16 @@ export async function recommendedTo( try { const result = await prisma.$queryRawTyped(sql(user, limit, offset)); return Promise.all( - result.map(async (res) => { - const user = await getUserByID(res.id); - if (!user.ok) throw new Error("not found"); // this shouldn't happen - return { - count: Number.parseInt(res.overlap?.toString() ?? "0"), - u: user.value, - }; - }), + result + .filter((res) => res.id !== 0) // memo shouldn't appear in recommendation list, even if they are not matched + .map(async (res) => { + const user = await getUserByID(res.id); + if (!user.ok) throw new Error("not found"); // this shouldn't happen + return { + count: Number.parseInt(res.overlap?.toString() ?? "0"), + u: user.value, + }; + }), ) .then((val) => Ok(val)) .catch((err) => Err(err)); From c0262f76227554df2965e118e88f1498d1f8b4ba Mon Sep 17 00:00:00 2001 From: aster <137767097+aster-void@users.noreply.github.com> Date: Sun, 29 Dec 2024 14:58:18 +0900 Subject: [PATCH 4/4] fixed memo appearing in all user search --- server/src/database/users.ts | 5 +++++ server/src/functions/user.test.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/database/users.ts b/server/src/database/users.ts index 3d008bd3..7a3a609d 100644 --- a/server/src/database/users.ts +++ b/server/src/database/users.ts @@ -168,6 +168,11 @@ export async function getAllUsers(): Promise< > { try { const users = await prisma.user.findMany({ + where: { + NOT: { + id: 0, // exclude memo from all user search results + }, + }, include: { enrollments: { include: { diff --git a/server/src/functions/user.test.ts b/server/src/functions/user.test.ts index f267ce42..ba04f302 100644 --- a/server/src/functions/user.test.ts +++ b/server/src/functions/user.test.ts @@ -14,7 +14,7 @@ beforeAll(() => { test("get all users", async () => { const result = await getAllUsers(); expect(result.code).toBe(200); - expect(result.body).toSatisfy((s) => s.length === 4); + expect(result.body).toSatisfy((s) => s.length === 3); expect(result.body).toSatisfy( (s) => typeof s !== "string" && s.some((person) => person.name === "田中太郎"),