From ea4d67f70ab7ad79fb8bb698bd8b836765e15864 Mon Sep 17 00:00:00 2001 From: Kanata844 Date: Sun, 5 Oct 2025 21:29:16 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=90=E3=83=BC?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=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 --- .../routes/orgs/[orgId]/settings/+page.svelte | 38 ++++++++++++++++++- packages/convex/src/convex/users.ts | 13 ++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/packages/client/src/routes/orgs/[orgId]/settings/+page.svelte b/packages/client/src/routes/orgs/[orgId]/settings/+page.svelte index 2e2cbc3..c8344e7 100644 --- a/packages/client/src/routes/orgs/[orgId]/settings/+page.svelte +++ b/packages/client/src/routes/orgs/[orgId]/settings/+page.svelte @@ -1,6 +1,6 @@
@@ -143,7 +177,7 @@

メンバー

{#if organization.data?.permission === "admin"} - + {/if}
diff --git a/packages/convex/src/convex/users.ts b/packages/convex/src/convex/users.ts index 757267f..52b2c9a 100644 --- a/packages/convex/src/convex/users.ts +++ b/packages/convex/src/convex/users.ts @@ -1,7 +1,7 @@ import { getAuthUserId } from "@convex-dev/auth/server"; import { v } from "convex/values"; import type { Id } from "./_generated/dataModel"; -import { query } from "./_generated/server"; +import { query, mutation } from "./_generated/server"; export const me = query({ args: {}, @@ -64,3 +64,14 @@ export const getUserNicknames = query({ return userNicknames; }, }); + +export const getUsersByEmail = query({ + args: { + email: v.string(), + }, + handler: async (ctx, args) => { + return await ctx.db.query("users") + .filter((q) => q.eq(q.field("email"), args.email)) + .collect();; + } +}); From 06bb499ccd568e3cfb9dbd48950c66c26eb245c8 Mon Sep 17 00:00:00 2001 From: Kanata844 Date: Sun, 5 Oct 2025 22:52:12 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E3=81=A4=E3=81=84=E3=81=A7=E3=81=AB?= =?UTF-8?q?=E3=82=A2=E3=83=B3=E3=82=B1=E3=83=BC=E3=83=88=E3=81=AE=E6=8A=95?= =?UTF-8?q?=E7=A5=A8=E6=95=B0=E3=82=92=E3=82=B0=E3=83=A9=E3=83=95=E3=81=BF?= =?UTF-8?q?=E3=81=9F=E3=81=84=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/chat/VoteViewer.svelte | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/client/src/components/chat/VoteViewer.svelte b/packages/client/src/components/chat/VoteViewer.svelte index d5fe7b5..93b5bc0 100644 --- a/packages/client/src/components/chat/VoteViewer.svelte +++ b/packages/client/src/components/chat/VoteViewer.svelte @@ -11,22 +11,35 @@ let isResultVisible = $state(false); + let numberOfAllVotes = $state(0); + + let numberOfVotesOfMostVotedOption = $state(0); + + let voteShareOfMostVotedOption = $state(0.0); + let numbersOfVotersPerOption: number[] = $state([]); let selectedOptions: number[] = $state([]); if (vote.data) { let tempNumbersOfVotersPerOption: number[] = []; + let tempNumberOfAllVotes = 0; + let max = 0; for (let i = 0; i < vote.data.voteOptions.length; i++) { let num = 0; for (let j = 0; j < vote.data.voters.length; j++) { if (vote.data.voters[j].votedOptions.includes(i)) { num++; - } + } } + if(num > max) max = num; + tempNumberOfAllVotes += num; tempNumbersOfVotersPerOption.push(num); } numbersOfVotersPerOption = tempNumbersOfVotersPerOption; + numberOfAllVotes = tempNumberOfAllVotes; + voteShareOfMostVotedOption = tempNumberOfAllVotes? (max / tempNumberOfAllVotes) : 0; + numberOfVotesOfMostVotedOption = max; if (me.data) { for (let i = 0; i < vote.data.voters.length; i++) { @@ -41,16 +54,24 @@ $effect(() => { if (vote.data) { let tempNumbersOfVotersPerOption: number[] = []; + let tempNumberOfAllVotes = 0; + let max = 0; for (let i = 0; i < vote.data.voteOptions.length; i++) { let num = 0; for (let j = 0; j < vote.data.voters.length; j++) { if (vote.data.voters[j].votedOptions.includes(i)) { num++; } + } + if(num > max) max = num; + tempNumberOfAllVotes += num; tempNumbersOfVotersPerOption.push(num); } numbersOfVotersPerOption = tempNumbersOfVotersPerOption; + numberOfAllVotes = tempNumberOfAllVotes; + voteShareOfMostVotedOption = tempNumberOfAllVotes? (max / tempNumberOfAllVotes) : 0; + numberOfVotesOfMostVotedOption = max; if (me.data) { for (let i = 0; i < vote.data.voters.length; i++) { if (vote.data.voters[i].userId === me.data._id) { @@ -71,11 +92,18 @@

{#each vote.data?.voteOptions as option, i}
-

- {option}{isResultVisible - ? ":" + numbersOfVotersPerOption[i] + "人" - : ""} -

+
+
+

+ {option}{isResultVisible + ? ":" + numbersOfVotersPerOption[i] + "人" + : ""} +

+
+ + {/if}
diff --git a/packages/convex/src/convex/users.ts b/packages/convex/src/convex/users.ts index 6c2e179..e8f4d6e 100644 --- a/packages/convex/src/convex/users.ts +++ b/packages/convex/src/convex/users.ts @@ -70,8 +70,9 @@ export const getUsersByEmail = query({ email: v.string(), }, handler: async (ctx, args) => { - return await ctx.db.query("users") + return await ctx.db + .query("users") .filter((q) => q.eq(q.field("email"), args.email)) .collect(); - } + }, });