UNPKG

@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
"use strict"; /** * 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);