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 84 85 86 87 88 89 90 91 92 93 94 95 96 | 44x 288x 288x 288x 288x 44x 36x 36x 36x 36x 44x 2x 2x 2x 2x 2x 2x 2x 2x | import dayjs from "dayjs";
import { logger } from "server/utils/logger";
import {
ResultsModel,
ResultsSchemaDb,
} from "server/features/results/resultsSchema";
import {
AssignmentResultGroup,
UserAssignmentResult,
} from "shared/types/models/result";
import {
Result,
makeErrorResult,
makeSuccessResult,
} from "shared/utils/result";
import { MongoDbError } from "shared/types/api/errors";
import { AssignmentAlgorithm } from "shared/config/eventConfigTypes";
export const removeResults = async (): Promise<Result<void, MongoDbError>> => {
logger.info("MongoDB: remove ALL results from db");
try {
await ResultsModel.deleteMany({});
return makeSuccessResult();
} catch (error) {
logger.error(
new Error("MongoDB: Error removing ALL results", { cause: error }),
);
return makeErrorResult(MongoDbError.UNKNOWN_ERROR);
}
};
export const saveResult = async (
signupResultData: readonly UserAssignmentResult[],
groups: readonly AssignmentResultGroup[],
assignmentTime: string,
algorithm: AssignmentAlgorithm,
message: string,
): Promise<Result<void, MongoDbError>> => {
try {
await ResultsModel.replaceOne(
{ assignmentTime },
{ assignmentTime, results: signupResultData, groups, algorithm, message },
{ upsert: true },
);
logger.debug(
`MongoDB: Signup results for assignment time ${assignmentTime} stored to separate collection`,
);
return makeSuccessResult();
} catch (error) {
logger.error(
new Error(
`MongoDB: Error storing signup results for assignment time ${assignmentTime} to separate collection`,
{ cause: error },
),
);
return makeErrorResult(MongoDbError.UNKNOWN_ERROR);
}
};
interface AssignmentResult {
results: UserAssignmentResult[];
groups: AssignmentResultGroup[];
assignmentTime: string;
algorithm: string;
message: string;
}
export const findResults = async (): Promise<
Result<AssignmentResult[], MongoDbError>
> => {
try {
const response = await ResultsModel.find({}).lean();
logger.debug("MongoDB: Find all results");
const results = response.flatMap((assignmentResult) => {
const result = ResultsSchemaDb.safeParse(assignmentResult);
Iif (!result.success) {
logger.error(
new Error(
`Error validating findResults DB value: assignmentTime: ${dayjs(assignmentResult.assignmentTime).toISOString()}, ${JSON.stringify(result.error)}`,
),
);
return [];
}
return result.data;
});
return makeSuccessResult(results);
} catch (error) {
logger.error(
new Error("MongoDB: Error fetching results", { cause: error }),
);
return makeErrorResult(MongoDbError.UNKNOWN_ERROR);
}
};
|