@russ-b/nestjs-common-tools
Version:
NestJS utility tools
74 lines • 3.29 kB
JavaScript
;
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.UniqueConstraint = 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 unique_constant_1 = require("./unique.constant");
let UniqueConstraint = class UniqueConstraint {
constructor(entityManager) {
this.entityManager = entityManager;
}
async validate(value, validationArguments) {
const [target, options = {}] = validationArguments.constraints;
const { isUuid = false, each = false, property = 'id', } = options;
if (isUuid) {
if (!this.validateUuid(value)) {
return false;
}
}
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 === 0;
}
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.UniqueConstraint = UniqueConstraint;
exports.UniqueConstraint = UniqueConstraint = __decorate([
(0, class_validator_1.ValidatorConstraint)({ name: unique_constant_1.IS_UNIQUE, async: true }),
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [typeorm_1.EntityManager])
], UniqueConstraint);
//# sourceMappingURL=unique.constraint.js.map