UNPKG

@gsb-core/core

Version:

GSB core services and classes for platform-independent web applications

133 lines 5.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ServiceHelper = void 0; const gsb_config_1 = require("../config/gsb-config"); const query_params_1 = require("../types/query-params"); const query_1 = require("../types/query"); const gsb_utils_1 = require("./gsb-utils"); const logger_1 = require("./logger"); /** * ServiceHelper provides common utility functions for GSB services. * It standardizes operations like query preparation, entity validation, etc. */ class ServiceHelper { /** * Prepares a standard query with pagination, sorting, and tenant info * * @param entityDefName - Entity name to query * @param page - Page number (1-based) * @param pageSize - Number of items per page * @param whereClauses - Optional where clauses for filtering * @param sortCols - Optional sort columns (defaults to lastUpdateDate desc) * @param selectCols - Optional columns to select * @param calcTotalCount - Whether to calculate total count (default: true) * @returns Prepared QueryParams object */ static prepareQuery(entityDefName, page = 1, pageSize = 10, whereClauses = [], sortCols, selectCols, calcTotalCount = true) { // Create base query const query = new query_params_1.QueryParams(entityDefName); query.filters = whereClauses === null || whereClauses === void 0 ? void 0 : whereClauses.map(clause => new query_1.Filter(clause.name, clause.value)); query.selectCols = selectCols === null || selectCols === void 0 ? void 0 : selectCols.map(col => ({ name: col })); // Set pagination query.startIndex = (page - 1) * pageSize; query.count = pageSize; query.calcTotalCount = calcTotalCount; // Sort by lastUpdateDate desc by default query.sortCols = sortCols || (0, gsb_utils_1.getGsbDateSortCols)(); logger_1.logger.debug('Prepared query params:', JSON.stringify(query)); return query; } /** * Prepares a standard save request with tenant information * * @param entityDefName - Entity name to save * @param entity - Entity data to save * @param isNew - Whether this is a new entity * @returns Prepared GsbSaveRequest object */ static prepareSaveRequest(entityDefName, entity, isNew = false) { const token = (0, gsb_config_1.getGsbToken)(); const tenantCode = (0, gsb_config_1.getGsbTenantCode)(); // Create standard save request const saveRequest = { entDefName: entityDefName, entity }; logger_1.logger.debug(`Prepared save request for ${entityDefName}:`, isNew ? 'Creating new entity' : `Updating entity ID: ${entity.id}`); return saveRequest; } /** * Gets authorization header with GSB token * * @returns Authorization header or undefined if no token */ static getAuthHeader() { const token = (0, gsb_config_1.getGsbToken)(); if (!token) { logger_1.logger.warn('No GSB token found for request'); return undefined; } return { Authorization: `Bearer ${token}` }; } /** * Gets tenant information for a request * * @returns Tenant code or undefined if no tenant */ static getTenantInfo() { return (0, gsb_config_1.getGsbTenantCode)(); } /** * Validates if a user has permission to access a resource * * @param permissionKey - The permission key to check * @param userPermissions - The user's permissions * @returns True if user has permission, false otherwise */ static hasPermission(permissionKey, userPermissions) { if (!userPermissions || userPermissions.length === 0) { logger_1.logger.warn(`Permission check failed: No permissions provided for key ${permissionKey}`); return false; } const hasPermission = userPermissions.includes(permissionKey); if (!hasPermission) { logger_1.logger.warn(`Permission denied: ${permissionKey} not found in user permissions`); } return hasPermission; } /** * Checks if a reference property name already exists in the referenced entity * * @param refPropName - The reference property name to check * @param refEntityId - The ID of the referenced entity * @param tables - Array of available tables/entities * @returns Object containing validation result and message */ static checkRefPropNameUniqueness(refPropName, refEntityId, tables) { if (!refPropName || !refEntityId) { return { isValid: true, message: "" }; } try { // Get the referenced entity const referencedEntity = tables.find(t => t.id === refEntityId); if (referencedEntity && referencedEntity.properties) { // Check if the property name already exists in the referenced entity const propExists = referencedEntity.properties.some((prop) => { var _a; return ((_a = prop.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === refPropName.toLowerCase(); }); if (propExists) { return { isValid: false, message: `Property name "${refPropName}" already exists in the referenced entity.` }; } } return { isValid: true, message: "" }; } catch (error) { logger_1.logger.error("Error checking reference property name:", error); // Default to valid if we can't check return { isValid: true, message: "" }; } } } exports.ServiceHelper = ServiceHelper; //# sourceMappingURL=service-helper.js.map