File

src/module/scheincriteria/container/Scheincriteria.ts

Index

Properties
Methods

Constructor

Protected constructor(identifier: string)
Parameters :
Name Type Optional
identifier string No

Properties

Readonly identifier
Type : string
Decorators :
@IsString()

Methods

Abstract checkCriteriaStatus
checkCriteriaStatus(payload: CriteriaPayload)
Parameters :
Name Type Optional
payload CriteriaPayload No
Static fromDTO
fromDTO(undefined: ScheinCriteriaDTO)

Generates a Scheincriteria from the given dto.

The returned criteria will be an instance of the class which was saved as blueprint with the given identifier. The given data will be validated against said class before creating an instance of it.

Parameters :
Name Type Optional
ScheinCriteriaDTO No
Returns : Scheincriteria

Created scheincriteria from the dto.

Abstract getInformation
getInformation(payload: InformationPayload)
Parameters :
Name Type Optional
payload InformationPayload No
import { BadRequestException } from '@nestjs/common';
import { plainToClass } from 'class-transformer';
import { IsString, validateSync } from 'class-validator';
import { CriteriaInformation, ScheinCriteriaStatus } from 'shared/model/ScheinCriteria';
import { Scheinexam } from '../../../database/entities/scheinexam.entity';
import { Sheet } from '../../../database/entities/sheet.entity';
import { ShortTest } from '../../../database/entities/shorttest.entity';
import { Student } from '../../../database/entities/student.entity';
import { ScheinCriteriaDTO } from '../scheincriteria.dto';
import { ScheincriteriaContainer } from './scheincriteria.container';
import { GradingList } from '../../../helpers/GradingList';

export interface CriteriaPayload {
    student: Student;
    gradingsOfStudent: GradingList;
    sheets: Sheet[];
    exams: Scheinexam[];
    shortTests: ShortTest[];
}

export interface InformationPayload {
    students: Student[];
    sheets: Sheet[];
    exams: Scheinexam[];
    shortTests: ShortTest[];
}

export type StatusCheckResponse = Omit<ScheinCriteriaStatus, 'id' | 'name'>;
export type CriteriaInformationWithoutName = Omit<CriteriaInformation, 'name' | 'studentSummaries'>;

export abstract class Scheincriteria {
    @IsString()
    readonly identifier: string;

    protected constructor(identifier: string) {
        this.identifier = identifier;
    }

    /**
     * Generates a Scheincriteria from the given dto.
     *
     * The returned criteria will be an instance of the class which was saved as blueprint with the given `identifier`. The given `data` will be validated against said class before creating an instance of it.
     *
     * @param dto DTO containing the information for the criteria.
     *
     * @returns Created scheincriteria from the dto.
     *
     * @throws `NotFoundException` - If no blue print of the given identifier could be found.
     * @throws `BadRequestException` - If the data is not successfully validated against the criteria class to use.
     */
    static fromDTO({ identifier, data }: ScheinCriteriaDTO): Scheincriteria {
        const bluePrintData = ScheincriteriaContainer.getContainer().getBluePrint(identifier);

        const criteria = plainToClass(bluePrintData.blueprint, data);
        const errors = validateSync(criteria, {
            whitelist: true,
            forbidNonWhitelisted: true,
        });

        if (errors.length > 0) {
            throw new BadRequestException(errors);
        }

        return criteria;
    }

    abstract checkCriteriaStatus(payload: CriteriaPayload): StatusCheckResponse;

    abstract getInformation(payload: InformationPayload): CriteriaInformationWithoutName;
}

results matching ""

    No results matching ""