Files
SerpentRace/SerpentRace_Backend/dist/Application/User/queries/GetUsersByPageQueryHandler.js
T

55 lines
2.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GetUsersByPageQueryHandler = void 0;
const UserMapper_1 = require("../../DTOs/Mappers/UserMapper");
const Logger_1 = require("../../Services/Logger");
class GetUsersByPageQueryHandler {
constructor(userRepo) {
this.userRepo = userRepo;
}
async execute(query) {
try {
// Validate pagination parameters
if (query.from < 0 || query.to < query.from) {
throw new Error('Invalid pagination parameters');
}
const limit = query.to - query.from + 1;
if (limit > 100) {
throw new Error('Page size too large. Maximum 100 records per request');
}
(0, Logger_1.logRequest)('Get users by page query started', undefined, undefined, {
from: query.from,
to: query.to,
includeDeleted: query.includeDeleted || false
});
const result = query.includeDeleted
? await this.userRepo.findByPageIncludingDeleted(query.from, query.to)
: await this.userRepo.findByPage(query.from, query.to);
(0, Logger_1.logRequest)('Get users by page query completed', undefined, undefined, {
from: query.from,
to: query.to,
returned: result.users.length,
totalCount: result.totalCount,
includeDeleted: query.includeDeleted || false
});
return {
users: UserMapper_1.UserMapper.toShortDtoList(result.users),
totalCount: result.totalCount
};
}
catch (error) {
(0, Logger_1.logError)('GetUsersByPageQueryHandler error', error instanceof Error ? error : new Error(String(error)));
// Handle database errors
if (error instanceof Error && error.message.includes('database')) {
throw new Error('Database connection error');
}
// Re-throw validation errors as-is
if (error instanceof Error && (error.message.includes('Invalid pagination') || error.message.includes('Page size'))) {
throw error;
}
throw new Error('Failed to retrieve users');
}
}
}
exports.GetUsersByPageQueryHandler = GetUsersByPageQueryHandler;
//# sourceMappingURL=GetUsersByPageQueryHandler.js.map