"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UsersController = void 0; const common_1 = require("@nestjs/common"); const swagger_1 = require("@nestjs/swagger"); const jwt_auth_guard_1 = require("../../../../core/auth/guards/jwt-auth.guard"); const permission_guard_1 = require("../../../authorization/presentation/guards/permission.guard"); const current_user_guard_1 = require("../guards/current-user.guard"); const permission_decorator_1 = require("../../../authorization/presentation/decorators/permission.decorator"); const permission_constants_1 = require("../../../../common/constants/permission.constants"); const get_users_handler_1 = require("../../application/handlers/user/get-users.handler"); const get_user_handler_1 = require("../../application/handlers/user/get-user.handler"); const get_current_user_handler_1 = require("../../application/handlers/user/get-current-user.handler"); const enable_user_handler_1 = require("../../application/handlers/user/enable-user.handler"); const disable_user_handler_1 = require("../../application/handlers/user/disable-user.handler"); const delete_user_handler_1 = require("../../application/handlers/user/delete-user.handler"); const restore_user_handler_1 = require("../../application/handlers/user/restore-user.handler"); const update_user_handler_1 = require("../../application/handlers/user/update-user.handler"); let UsersController = class UsersController { getUsersHandler; getUserHandler; getCurrentUserHandler; enableUserHandler; disableUserHandler; deleteUserHandler; restoreUserHandler; updateUserHandler; constructor(getUsersHandler, getUserHandler, getCurrentUserHandler, enableUserHandler, disableUserHandler, deleteUserHandler, restoreUserHandler, updateUserHandler) { this.getUsersHandler = getUsersHandler; this.getUserHandler = getUserHandler; this.getCurrentUserHandler = getCurrentUserHandler; this.enableUserHandler = enableUserHandler; this.disableUserHandler = disableUserHandler; this.deleteUserHandler = deleteUserHandler; this.restoreUserHandler = restoreUserHandler; this.updateUserHandler = updateUserHandler; } async findAll(query) { const res = await this.getUsersHandler.execute(query); return { success: true, data: res.data.map(u => u.toResponse ? u.toResponse() : u), meta: { total: res.total }, }; } async me(req) { const user = await this.getCurrentUserHandler.execute(req.currentUser); return { success: true, data: user.toResponse ? user.toResponse() : user, meta: {} }; } async findOne(id) { const user = await this.getUserHandler.execute(id); return { success: true, data: user.toResponse ? user.toResponse() : user, meta: {} }; } async enable(id) { const updated = await this.enableUserHandler.execute(id); return { success: true, data: updated.toResponse ? updated.toResponse() : updated, meta: {} }; } async disable(id) { const updated = await this.disableUserHandler.execute(id); return { success: true, data: updated.toResponse ? updated.toResponse() : updated, meta: {} }; } async update(id, body) { const updated = await this.updateUserHandler.execute(id, body); return { success: true, data: updated.toResponse ? updated.toResponse() : updated, meta: {} }; } async remove(id) { await this.deleteUserHandler.execute(id); return { success: true, data: null, meta: {} }; } async restore(id) { const restored = await this.restoreUserHandler.execute(id); return { success: true, data: restored.toResponse ? restored.toResponse() : restored, meta: {} }; } }; exports.UsersController = UsersController; __decorate([ (0, common_1.Get)(), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_READ), (0, swagger_1.ApiOperation)({ summary: 'List users' }), __param(0, (0, common_1.Query)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], UsersController.prototype, "findAll", null); __decorate([ (0, common_1.Get)('me'), (0, swagger_1.ApiOperation)({ summary: 'Get current user' }), __param(0, (0, common_1.Req)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], UsersController.prototype, "me", null); __decorate([ (0, common_1.Get)(':id'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_READ), (0, swagger_1.ApiOperation)({ summary: 'Get user by id' }), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], UsersController.prototype, "findOne", null); __decorate([ (0, common_1.Patch)(':id/enable'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_UPDATE), (0, swagger_1.ApiOperation)({ summary: 'Enable user' }), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], UsersController.prototype, "enable", null); __decorate([ (0, common_1.Patch)(':id/disable'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_UPDATE), (0, swagger_1.ApiOperation)({ summary: 'Disable user' }), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], UsersController.prototype, "disable", null); __decorate([ (0, common_1.Patch)(':id'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_UPDATE), (0, swagger_1.ApiOperation)({ summary: 'Update user profile' }), __param(0, (0, common_1.Param)('id')), __param(1, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [String, Object]), __metadata("design:returntype", Promise) ], UsersController.prototype, "update", null); __decorate([ (0, common_1.Delete)(':id'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_DELETE), (0, swagger_1.ApiOperation)({ summary: 'Soft delete user' }), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], UsersController.prototype, "remove", null); __decorate([ (0, common_1.Post)(':id/restore'), (0, permission_decorator_1.Permissions)(permission_constants_1.PermissionType.USER_UPDATE), (0, swagger_1.ApiOperation)({ summary: 'Restore user' }), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], UsersController.prototype, "restore", null); exports.UsersController = UsersController = __decorate([ (0, swagger_1.ApiTags)('Users'), (0, common_1.Controller)('users'), (0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard, current_user_guard_1.CurrentUserGuard, permission_guard_1.PermissionGuard), __metadata("design:paramtypes", [get_users_handler_1.GetUsersHandler, get_user_handler_1.GetUserHandler, get_current_user_handler_1.GetCurrentUserHandler, enable_user_handler_1.EnableUserHandler, disable_user_handler_1.DisableUserHandler, delete_user_handler_1.DeleteUserHandler, restore_user_handler_1.RestoreUserHandler, update_user_handler_1.UpdateUserHandler]) ], UsersController); //# sourceMappingURL=users.controller.js.map