Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 44x 37x 37x 37x 37x 37x 350x 37x 173x 65x 59x 167x | import { groupBy } from "remeda";
import { User } from "shared/types/models/user";
import { ProgramItem } from "shared/types/models/programItem";
import { AssignmentResultGroup } from "shared/types/models/result";
import { getStartingProgramItems } from "server/features/assignment/utils/getStartingProgramItems";
import { getGroupCreators } from "server/features/assignment/utils/getGroupCreators";
import { getGroupMembersWithCreatorLotterySignups } from "server/features/assignment/utils/getGroupMembers";
// Snapshot the groups that took part in the lottery for this assignment time, as they were when it ran
export const getAssignmentResultGroups = (
users: readonly User[],
programItems: readonly ProgramItem[],
assignmentTime: string,
): AssignmentResultGroup[] => {
const startingProgramItems = getStartingProgramItems(
programItems,
assignmentTime,
);
const groupCreators = getGroupCreators(users, startingProgramItems);
const groupMembers = getGroupMembersWithCreatorLotterySignups(
groupCreators,
users,
);
const allAttendees = [...groupCreators, ...groupMembers];
// Drop individual users (groupCode "0"); keep only actual groups
const attendeesInGroups = allAttendees.filter(
(attendee) => attendee.groupCode !== "0",
);
return Object.entries(
groupBy(attendeesInGroups, (attendee) => attendee.groupCode),
).map(([groupCode, members]) => ({
groupCode,
groupCreator:
members.find((member) => member.isGroupCreator)?.username ?? "",
groupMembers: members.map((member) => member.username),
}));
};
|