All files / server/src/features/assignment/utils formatResults.ts

85.71% Statements 18/21
75% Branches 9/12
100% Functions 7/7
85.71% Lines 18/21

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                  45x       409x 672x 12023x             409x       409x             45x       66x   326x   326x             326x 4140x               66x   409x 409x 409x         409x         66x    
import { first } from "remeda";
import { PadgRandomAssignResult } from "server/types/assignmentTypes";
import { logger } from "server/utils/logger";
import {
  AssignmentSignup,
  UserAssignmentResult,
} from "shared/types/models/result";
import { User } from "shared/types/models/user";
 
const getAssignmentSignup = (
  assignResults: PadgRandomAssignResult[],
  attendee: User,
): AssignmentSignup | null => {
  const foundSignup = attendee.lotterySignups.find((lotterySignup) => {
    return assignResults.find(
      (assignResult) =>
        (assignResult.id === attendee.groupCode ||
          assignResult.id === attendee.serial) &&
        assignResult.assignment === lotterySignup.programItemId,
    );
  });
 
  Iif (!foundSignup) {
    return null;
  }
 
  return {
    programItemId: foundSignup.programItemId,
    priority: foundSignup.priority,
    signedToStartTime: foundSignup.signedToStartTime,
  };
};
 
export const formatResults = (
  assignResults: PadgRandomAssignResult[],
  attendeeGroups: readonly User[][],
): readonly UserAssignmentResult[] => {
  const selectedAttendees = attendeeGroups
    .filter((attendeeGroup) => {
      const firstMember = first(attendeeGroup);
 
      Iif (!firstMember) {
        logger.error(
          new Error("Assignment formatResults: error getting first member"),
        );
        return false;
      }
 
      return assignResults.find(
        (assignResult) =>
          (assignResult.id === firstMember.groupCode ||
            assignResult.id === firstMember.serial) &&
          assignResult.assignment !== -1,
      );
    })
    .flat();
 
  const results = selectedAttendees.reduce<UserAssignmentResult[]>(
    (acc, attendee) => {
      const assignmentSignup = getAssignmentSignup(assignResults, attendee);
      Eif (assignmentSignup) {
        acc.push({
          username: attendee.username,
          assignmentSignup,
        });
      }
      return acc;
    },
    [],
  );
 
  return results;
};