Skip to content

Commit

Permalink
#2112 - Business validations: Application Bulk Withdrawal
Browse files Browse the repository at this point in the history
  • Loading branch information
sh16011993 committed Nov 1, 2023
1 parent 2ea2a0f commit 39dd109
Show file tree
Hide file tree
Showing 10 changed files with 638 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ import {
StudentAppealRequestsService,
ApplicationOfferingChangeRequestService,
ApplicationWithdrawalImportTextService,
ApplicationBulkWithdrawalImportBusinessService,
ApplicationBulkWithdrawalImportBusinessValidationService,
} from "./services";
import {
ApplicationControllerService,
Expand Down Expand Up @@ -166,6 +168,8 @@ import {
ApplicationOfferingChangeRequestService,
ApplicationOfferingChangeRequestControllerService,
ApplicationWithdrawalImportTextService,
ApplicationBulkWithdrawalImportBusinessService,
ApplicationBulkWithdrawalImportBusinessValidationService,
],
})
export class AppInstitutionsModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,17 @@ export const APPLICATION_WITHDRAWAL_TEXT_CONTENT_FORMAT_ERROR =
*/
export const APPLICATION_WITHDRAWAL_INVALID_TEXT_FILE_ERROR =
"APPLICATION_WITHDRAWAL_INVALID_TEXT_FILE_ERROR";
/**
* An error was found during the application bulk withdrawal validation and the process
* must be stopped. Every offering validation will generate an error but
* some errors are classified as warnings and therefore are not considered
* critical, which means that critical errors are the only ones that will
* cause the process to be interrupted.
*/
export const APPLICATION_BULK_WITHDRAWAL_VALIDATION_CRITICAL_ERROR =
"APPLICATION_BULK_WITHDRAWAL_VALIDATION_CRITICAL_ERROR";
/**
* One or more application withdrawal business validation errors have occurred.
*/
export const APPLICATION_WITHDRAWAL_BUSINESS_VALIDATION_ERROR =
"APPLICATION_WITHDRAWAL_BUSINESS_VALIDATION_ERROR";
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import {
APPLICATION_NOT_FOUND,
ASSESSMENT_ALREADY_IN_PROGRESS,
ApplicationWithdrawalImportTextService,
ApplicationBulkWithdrawalImportBusinessService,
ApplicationBulkWithdrawalImportBusinessValidationService,
FormService,
INVALID_OPERATION_IN_THE_CURRENT_STATUS,
StudentScholasticStandingsService,
Expand Down Expand Up @@ -62,6 +64,7 @@ import {
} from "../../utilities";
import { PrimaryIdentifierAPIOutDTO } from "../models/primary.identifier.dto";
import {
ApplicationBulkWithdrawalHeader,
ApplicationWithdrawalImportTextModel,
ApplicationWithdrawalTextValidationResult,
} from "../../services/application-bulk-withdrawal/application-bulk-withdrawal-import-text.models";
Expand All @@ -78,6 +81,8 @@ export class ScholasticStandingInstitutionsController extends BaseController {
private readonly studentScholasticStandingsService: StudentScholasticStandingsService,
private readonly scholasticStandingControllerService: ScholasticStandingControllerService,
private readonly applicationWithdrawalImportTextService: ApplicationWithdrawalImportTextService,
private readonly applicationWithdrawalImportBusinessService: ApplicationBulkWithdrawalImportBusinessService,
private readonly applicationWithdrawalImportBusinessValidationService: ApplicationBulkWithdrawalImportBusinessValidationService,
) {
super();
}
Expand Down Expand Up @@ -196,14 +201,23 @@ export class ScholasticStandingInstitutionsController extends BaseController {
@UploadedFile() file: Express.Multer.File,
@Query("validation-only", new DefaultValuePipe(false), ParseBoolPipe)
validationOnly: boolean,
@UserToken() userToken: IInstitutionUserToken,
): Promise<PrimaryIdentifierAPIOutDTO[]> {
// Read the entire file content.
const fileContent = file.buffer.toString();
// Get the file header model.
let textHeader: ApplicationBulkWithdrawalHeader;
// Convert the file raw content into text models.
let textModels: ApplicationWithdrawalImportTextModel[];
try {
textHeader =
this.applicationWithdrawalImportTextService.readText(
fileContent,
).header;
textModels =
this.applicationWithdrawalImportTextService.readText(fileContent);
this.applicationWithdrawalImportTextService.readText(
fileContent,
).applicationWithdrawalModels;
} catch (error: unknown) {
if (
error instanceof CustomNamedError &&
Expand Down Expand Up @@ -234,8 +248,22 @@ export class ScholasticStandingInstitutionsController extends BaseController {
);
// Assert successful validation.
this.assertTextValidationsAreValid(textValidations);
// TODO Add business validation for application bulk withdrawal.

const businessValidationModels =
await this.applicationWithdrawalImportBusinessService.generateBusinessValidationModels(
textValidations,
textHeader,
userToken.authorizations.institutionId,
userToken.authorizations.adminLocationsIds,
);
// Validate all the application bulk withdrawal models.
const applicationBulkWithdrawalBusinessValidations =
this.applicationWithdrawalImportBusinessValidationService.validateApplicationBulkWithdrawalBusinessModels(
businessValidationModels,
true,
);
this.applicationWithdrawalImportBusinessValidationService.assertBusinessValidationsAreValid(
applicationBulkWithdrawalBusinessValidations,
);
if (validationOnly) {
// If the endpoint is called only to perform the validation and no error was found
// return an empty array because no record will be created.
Expand Down
Loading

0 comments on commit 39dd109

Please sign in to comment.