sendou.ink/app/features/sendouq/queries/syncGroupTeamId.server.ts
Kalle 1c9dcacbf2
Join many teams & front page changelog (#1880)
* Initial

* Progress

* Changelog initial

* Progress

* E2E test
2024-09-14 12:31:05 +03:00

35 lines
904 B
TypeScript

import { sql } from "~/db/sql";
const memberTeamIdsStm = sql.prepare(/* sql */ `
select "TeamMemberWithSecondary"."teamId"
from "GroupMember"
left join "TeamMemberWithSecondary" on "TeamMemberWithSecondary"."userId" = "GroupMember"."userId"
where "groupId" = @groupId
`);
const updateStm = sql.prepare(/* sql */ `
update "Group"
set "teamId" = @teamId
where "id" = @groupId
`);
export function syncGroupTeamId(groupId: number) {
const teamIds = memberTeamIdsStm
.all({ groupId })
.map((row: any) => row.teamId);
const counts = new Map<number, number>();
// note if there are multiple teams with 4 members we just choose one of them
for (const teamId of teamIds) {
const newCount = (counts.get(teamId) ?? 0) + 1;
if (newCount === 4) {
return updateStm.run({ groupId, teamId });
}
counts.set(teamId, newCount);
}
return updateStm.run({ groupId, teamId: null });
}