@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
105 lines (101 loc) • 5.56 kB
JavaScript
'use strict';
var tslib_es6 = require('../../external/tslib/tslib.es6.js');
var getListQuery_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/load-relations-strategy.enum.js');
require('../../enum/decorator/api/controller/request-transformer-type.enum.js');
require('../../enum/decorator/api/dto-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-type.enum.js');
var filterOrderDirection_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)
* @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;
}
}
tslib_es6.__decorate([
number_decorator.ApiPropertyNumber({
description: "Items per page",
entity: entityMetadata,
exampleValue: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH,
format: numberType_enum.EApiPropertyNumberType.INTEGER,
isRequired: true,
maximum: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_LENGTH,
minimum: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_LENGTH,
multipleOf: getListQuery_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: filterOrderByFromEntity_utility.FilterOrderByFromEntity(entity, entityMetadata, method, dtoType),
enumName: `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: filterOrderDirection_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: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT,
format: numberType_enum.EApiPropertyNumberType.INTEGER,
isRequired: true,
maximum: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MAXIMUM_LIST_PAGES_COUNT,
minimum: getListQuery_constant.GET_LIST_QUERY_DTO_FACTORY_CONSTANT.MINIMUM_LIST_PAGES_COUNT,
multipleOf: getListQuery_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-get-list-query-base-class.utility.js.map