@kenniy/godeye-data-contracts
Version:
Enterprise-grade base repository architecture for GOD-EYE microservices with zero overhead and maximum code reuse
66 lines (65 loc) • 2.59 kB
JavaScript
;
/**
* Find One DTO - For single entity endpoints
* Uses unified include parameter for both fields and relations
*/
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.FindOneDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class FindOneDto {
/**
* Convert to ICriteria for single entity lookup
*/
toICriteria(id) {
const includeFields = this.parseInclude(this.include);
return {
where: { id },
relations: includeFields.relations,
select: includeFields.fields
};
}
/**
* Parse unified include parameter - override in entity-specific DTOs
*/
parseInclude(includeStr) {
if (!includeStr)
return { relations: [], fields: [] };
const items = includeStr.split(',').map(s => s.trim());
const relations = [];
const fields = [];
// Base implementation treats all as fields (override in subclasses)
const knownRelations = this.getKnownRelations();
items.forEach(item => {
if (knownRelations.includes(item)) {
relations.push(item);
}
else {
fields.push(item);
}
});
return { relations, fields };
}
getKnownRelations() {
return []; // Override in entity-specific DTOs
}
}
exports.FindOneDto = FindOneDto;
__decorate([
(0, swagger_1.ApiPropertyOptional)({
example: 'id,name,email,profile,business',
description: 'Fields and relations to include in response (comma-separated)'
}),
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsString)(),
__metadata("design:type", String)
], FindOneDto.prototype, "include", void 0);