UNPKG

@russ-b/nestjs-common-tools

Version:
76 lines 3.36 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EntityConstraint = void 0; const class_validator_1 = require("class-validator"); const common_1 = require("@nestjs/common"); const uuid_1 = require("uuid"); const typeorm_1 = require("typeorm"); const entity_constant_1 = require("./entity.constant"); let EntityConstraint = class EntityConstraint { constructor(entityManager) { this.entityManager = entityManager; } async validate(value, validationArguments) { const [target, options = {}] = validationArguments.constraints; const { isUuid = false, each = false, property = 'id', } = options; if (each) { if (!Array.isArray(value)) { return false; } if (value.length === 0) { return true; } if (isUuid && !value.every((v) => this.validateUuid(v))) { return false; } const count = await this.entityManager .getRepository(target) .createQueryBuilder('entity') .where(`entity.${property} IN (:...values)`, { values: value }) .getCount(); return count === value.length; } else { if (isUuid) { if (!this.validateUuid(value)) { return false; } } return await this.entityManager .getRepository(target) .createQueryBuilder('entity') .where({ [property]: value }) .getExists(); } } defaultMessage(validationArguments) { const [entityType, options = {}] = validationArguments.constraints; const { each = false, property = 'id' } = options; const field = validationArguments.property; const value = validationArguments.value; const entityName = entityType.name; if (each) { return `All elements in "${field}" must be existing ${entityName} ${property}s`; } return `A ${entityName} with ${property} "${value}" does not exist`; } validateUuid(value) { return (0, uuid_1.validate)(value); } }; exports.EntityConstraint = EntityConstraint; exports.EntityConstraint = EntityConstraint = __decorate([ (0, class_validator_1.ValidatorConstraint)({ name: entity_constant_1.IS_ENTITY, async: true }), (0, common_1.Injectable)(), __metadata("design:paramtypes", [typeorm_1.EntityManager]) ], EntityConstraint); //# sourceMappingURL=entity.constraint.js.map