UNPKG

@elsikora/nestjs-crud-automator

Version:

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

103 lines (100 loc) 4.99 kB
import { __decorate, __metadata } from '../../external/tslib/tslib.es6.js'; import { GET_LIST_QUERY_DTO_FACTORY_CONSTANT } from '../../constant/factory/dto/get-list-query.constant.js'; import { ApiPropertyEnum } from '../../decorator/api/property/enum.decorator.js'; import { ApiPropertyNumber } from '../../decorator/api/property/number.decorator.js'; import '../../enum/decorator/api/action.enum.js'; import '../../enum/decorator/api/authentication-type.enum.js'; import '../../enum/decorator/api/controller/load-relations-strategy.enum.js'; import '../../enum/decorator/api/controller/request-transformer-type.enum.js'; import '../../enum/decorator/api/dto-type.enum.js'; import '../../enum/decorator/api/function/type.enum.js'; import '../../enum/decorator/api/on-type.enum.js'; import '../../enum/decorator/api/property/data-type.enum.js'; import '../../enum/decorator/api/property/date/identifier.enum.js'; import '../../enum/decorator/api/property/date/type.enum.js'; import '../../enum/decorator/api/property/desribe-type.enum.js'; import { EApiPropertyNumberType } from '../../enum/decorator/api/property/number-type.enum.js'; import '../../enum/decorator/api/property/string-type.enum.js'; import '../../enum/decorator/api/route-type.enum.js'; import { EFilterOrderDirection } from '../../enum/filter-order-direction.enum.js'; import { FilterOrderByFromEntity } from '../api/filter-order-by-from-entity.utility.js'; import { CapitalizeString } from '../capitalize-string.utility.js'; import { AllOrNoneOfListedPropertiesValidator } from '../../validator/all-or-none-of-listed-properties.validator.js'; import { Validate } from '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) * @returns {Type<unknown>} A base class for list query DTOs * @template E - The entity type */ function DtoGetGetListQueryBaseClass(entity, entityMetadata, method, dtoType) { class BaseQueryDTO { limit; orderBy; orderDirection; page; object() { return this; } } __decorate([ ApiPropertyNumber({ description: "Items per page", entity: entityMetadata, exampleValue: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH, format: EApiPropertyNumberType.INTEGER, isRequired: true, maximum: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_LENGTH, minimum: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH, multipleOf: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.LIST_MULTIPLE_OF, }), __metadata("design:type", Number) ], BaseQueryDTO.prototype, "limit", void 0); __decorate([ ApiPropertyEnum({ description: "order by field", entity: entityMetadata, enum: FilterOrderByFromEntity(entity, entityMetadata, method, dtoType), enumName: `E${CapitalizeString(entityMetadata.name ?? "UnknownResource")}FilterOrderBy`, isRequired: false, }), __metadata("design:type", String) ], BaseQueryDTO.prototype, "orderBy", void 0); __decorate([ ApiPropertyEnum({ description: "order direction", entity: entityMetadata, enum: EFilterOrderDirection, enumName: "EFilterOrderDirection", isRequired: false, }), __metadata("design:type", String) ], BaseQueryDTO.prototype, "orderDirection", void 0); __decorate([ ApiPropertyNumber({ description: "Page to return", entity: entityMetadata, exampleValue: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT, format: EApiPropertyNumberType.INTEGER, isRequired: true, maximum: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_PAGES_COUNT, minimum: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT, multipleOf: GET_LIST_QUERY_DTO_FACTORY_CONSTANT.LIST_MULTIPLE_OF, }), __metadata("design:type", Number) ], BaseQueryDTO.prototype, "page", void 0); __decorate([ Validate(AllOrNoneOfListedPropertiesValidator, ["orderBy", "orderDirection"]), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], BaseQueryDTO.prototype, "object", null); return BaseQueryDTO; } export { DtoGetGetListQueryBaseClass }; //# sourceMappingURL=get-get-list-query-base-class.utility.js.map