@gsb-core/core
Version:
GSB core services and classes for platform-independent web applications
133 lines • 5.83 kB
JavaScript
;
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