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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 44x 73x 2541x 4013x 340113x 4013x 4013x 2541x 44x 120x 8746x 2972x 120x 8714x 120x 44x 73x 73x 5353x 73x 73x | import { DirectSignupsForProgramItem } from "server/features/direct-signup/directSignupTypes";
import { ProgramItem } from "shared/types/models/programItem";
import { User } from "shared/types/models/user";
import { isLotterySignupProgramItem } from "shared/utils/isLotterySignupProgramItem";
const getValidLotterySignupsUsers = (
users: User[],
programItems: ProgramItem[],
): User[] => {
return users.map((user) => {
const matchingLotterySignups = user.lotterySignups.filter(
(lotterySignup) => {
const foundProgramItem = programItems.find(
(programItem) =>
programItem.programItemId === lotterySignup.programItemId,
);
Iif (!foundProgramItem) {
return false;
}
return isLotterySignupProgramItem(foundProgramItem);
},
);
return { ...user, lotterySignups: matchingLotterySignups };
});
};
// "Lottery participant" means program item took part in lottery and direct signup is either from lottery or after lottery
export const getLotteryParticipantDirectSignups = (
directSignups: readonly DirectSignupsForProgramItem[],
programItems: readonly ProgramItem[],
): readonly DirectSignupsForProgramItem[] => {
// Take program items with "twoPhaseSignupProgramTypes" which are not in "directSignupAlwaysOpenIds"
const lotteryValidProgramItemsIds = new Set(
programItems
.filter((programItem) => isLotterySignupProgramItem(programItem))
.map((programItem) => programItem.programItemId),
);
const lotteryParticipantDirectSignups = directSignups.filter(
(directSignup) => {
return lotteryValidProgramItemsIds.has(directSignup.programItemId);
},
);
return lotteryParticipantDirectSignups;
};
interface AssignmentParams {
validLotterySignupsUsers: User[];
validLotterySignupProgramItems: ProgramItem[];
lotteryParticipantDirectSignups: readonly DirectSignupsForProgramItem[];
}
export const prepareAssignmentParams = (
users: User[],
programItems: ProgramItem[],
directSignups: DirectSignupsForProgramItem[],
): AssignmentParams => {
// Take lottery signups with "twoPhaseSignupProgramTypes" which are not in "directSignupAlwaysOpenIds"
const validLotterySignupsUsers = getValidLotterySignupsUsers(
users,
programItems,
);
// Take program items with "twoPhaseSignupProgramTypes" which are not in "directSignupAlwaysOpenIds"
const validLotterySignupProgramItems = programItems.filter((programItem) =>
isLotterySignupProgramItem(programItem),
);
// Take direct signups with "twoPhaseSignupProgramTypes" which are not in "directSignupAlwaysOpenIds"
const lotteryParticipantDirectSignups = getLotteryParticipantDirectSignups(
directSignups,
programItems,
);
return {
validLotterySignupsUsers,
validLotterySignupProgramItems,
lotteryParticipantDirectSignups,
};
};
|