UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

126 lines (122 loc) 7.29 kB
'use strict'; var tslib_es6 = require('../../../external/tslib/tslib.es6.js'); var factoryDtoGetListQuery_constant = require('../../../constant/factory-dto-get-list-query.constant.js'); var enum_decorator = require('../../../decorator/api/property/enum.decorator.js'); var number_decorator = require('../../../decorator/api/property/number.decorator.js'); require('../../../enum/decorator/api/action.enum.js'); require('../../../enum/decorator/api/authentication-type.enum.js'); require('../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js'); require('../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js'); require('../../../enum/decorator/api/controller/relation-reference-shape.enum.js'); require('../../../enum/decorator/api/controller/request/target.enum.js'); require('../../../enum/decorator/api/controller/request/transformer-type.enum.js'); require('../../../enum/decorator/api/controller/response-target.enum.js'); require('../../../enum/decorator/api/dto-type.enum.js'); require('../../../enum/decorator/api/function/context-storage-kind.enum.js'); require('../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js'); require('../../../enum/decorator/api/function/transaction/event-status.enum.js'); require('../../../enum/decorator/api/function/transaction/failure-stage.enum.js'); require('../../../enum/decorator/api/function/transaction/mode.enum.js'); require('../../../enum/decorator/api/function/transaction/outcome.enum.js'); require('../../../enum/decorator/api/function/transaction/owner-kind.enum.js'); require('../../../enum/decorator/api/function/transaction/trace-type.enum.js'); require('../../../enum/decorator/api/function/type.enum.js'); require('../../../enum/decorator/api/on-type.enum.js'); require('../../../enum/decorator/api/property/data-type.enum.js'); require('../../../enum/decorator/api/property/date/identifier.enum.js'); require('../../../enum/decorator/api/property/date/type.enum.js'); require('../../../enum/decorator/api/property/desribe-type.enum.js'); var numberType_enum = require('../../../enum/decorator/api/property/number-type.enum.js'); require('../../../enum/decorator/api/property/string-type.enum.js'); require('../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js'); require('../../../enum/decorator/api/route/type.enum.js'); require('../../../enum/filter/operand.enum.js'); require('../../../enum/filter/operation.enum.js'); var orderDirection_enum = require('../../../enum/filter/order-direction.enum.js'); var filterOrderByFromEntity_utility = require('../../api/filter-order-by-from-entity.utility.js'); var capitalizeString_utility = require('../../capitalize-string.utility.js'); var allOrNoneOfListedProperties_validator = require('../../../validator/all-or-none-of-listed-properties.validator.js'); var classValidator = require('class-validator'); /** * Creates a base class for list query DTOs with pagination and sorting properties. * Includes limit, orderBy, orderDirection, and page fields with appropriate validation rules * to ensure consistent pagination behavior. * @param {ObjectLiteral} entity - The entity class or prototype * @param {IApiEntity<E>} entityMetadata - The entity metadata containing column information * @param {EApiRouteType} method - The API route type (GET_LIST) * @param {EApiDtoType} dtoType - The type of DTO (QUERY) * @param {IApiControllerGetListQueryPlan} [queryPlan] - Optional normalized plan that narrows sortable fields. * @returns {Type<unknown>} A base class for list query DTOs * @template E - The entity type */ function DtoGetGetListQueryBaseClass(entity, entityMetadata, method, dtoType, queryPlan) { const orderBy = queryPlan && !queryPlan.order.isLegacy ? Object.fromEntries(Object.values(queryPlan.order.fields) .filter((field) => field.isEnabled) .map((field) => [field.path, field.path])) : filterOrderByFromEntity_utility.FilterOrderByFromEntity(entity, entityMetadata, method, dtoType); class BaseQueryDTO { limit; orderBy; orderDirection; page; object() { return this; } } tslib_es6.__decorate([ number_decorator.ApiPropertyNumber({ description: "Items per page", entity: entityMetadata, exampleValue: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH, format: numberType_enum.EApiPropertyNumberType.INTEGER, isRequired: true, maximum: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_LENGTH, minimum: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH, multipleOf: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.LIST_MULTIPLE_OF, }), tslib_es6.__metadata("design:type", Number) ], BaseQueryDTO.prototype, "limit", void 0); tslib_es6.__decorate([ enum_decorator.ApiPropertyEnum({ description: "order by field", entity: entityMetadata, enum: orderBy, enumName: queryPlan ? `${queryPlan.schemaName}OrderBy` : `E${capitalizeString_utility.CapitalizeString(entityMetadata.name ?? "UnknownResource")}FilterOrderBy`, isRequired: false, }), tslib_es6.__metadata("design:type", String) ], BaseQueryDTO.prototype, "orderBy", void 0); tslib_es6.__decorate([ enum_decorator.ApiPropertyEnum({ description: "order direction", entity: entityMetadata, enum: orderDirection_enum.EFilterOrderDirection, enumName: "EFilterOrderDirection", isRequired: false, }), tslib_es6.__metadata("design:type", String) ], BaseQueryDTO.prototype, "orderDirection", void 0); tslib_es6.__decorate([ number_decorator.ApiPropertyNumber({ description: "Page to return", entity: entityMetadata, exampleValue: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT, format: numberType_enum.EApiPropertyNumberType.INTEGER, isRequired: true, maximum: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_PAGES_COUNT, minimum: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT, multipleOf: factoryDtoGetListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.LIST_MULTIPLE_OF, }), tslib_es6.__metadata("design:type", Number) ], BaseQueryDTO.prototype, "page", void 0); tslib_es6.__decorate([ classValidator.Validate(allOrNoneOfListedProperties_validator.AllOrNoneOfListedPropertiesValidator, ["orderBy", "orderDirection"]), tslib_es6.__metadata("design:type", Function), tslib_es6.__metadata("design:paramtypes", []), tslib_es6.__metadata("design:returntype", Object) ], BaseQueryDTO.prototype, "object", null); return BaseQueryDTO; } exports.DtoGetGetListQueryBaseClass = DtoGetGetListQueryBaseClass; //# sourceMappingURL=get-list-query-base-class.utility.js.map