"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); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransactionController = void 0; const inversify_1 = require("inversify"); const inversify_express_utils_1 = require("inversify-express-utils"); const adminTotp_1 = __importDefault(require("@backoffice/middlewares/adminTotp")); const confirmAdminPIN_1 = __importDefault(require("@backoffice/middlewares/confirmAdminPIN")); const hasPermissionsInFunds_1 = __importDefault(require("@backoffice/middlewares/hasPermissionsInFunds")); const models_1 = require("@core/models"); const auth_1 = __importDefault(require("@shared/middlewares/auth")); const hasAccess_1 = __importDefault(require("@shared/middlewares/hasAccess")); const logger_1 = __importDefault(require("@shared/middlewares/logger")); const useMetadata_1 = __importDefault(require("@shared/middlewares/useMetadata")); const types_1 = __importDefault(require("@shared/types")); const utils_1 = require("@shared/utils"); let TransactionController = class TransactionController extends inversify_express_utils_1.BaseHttpController { _transactionService; constructor(transactionService) { super(); this._transactionService = transactionService; } async getAntifraudAnalysis(req) { const filter = { ...(0, utils_1.controllerPaginationHelper)(req.query, req.session), status: req.query.status, }; return this._transactionService.getTransactionAntifraudAnalysis(filter); } async getAntifraudAnalysisDetails(id) { return this._transactionService.getTransactionAntifraudAnalysisById(id); } async exportTransactions(req, bodyRequest) { const { dateRange } = bodyRequest; const searchParameter = { ...(0, utils_1.controllerPaginationHelper)(req.body, req.session), account: bodyRequest.account, payerPaymentAccountId: bodyRequest.payerPaymentAccountId, payeePaymentAccountId: bodyRequest.payeePaymentAccountId, favored: bodyRequest.favored, accountTaxId: bodyRequest.accountTaxIdentifier, favoredTaxId: bodyRequest.favoredTaxIdentifier, type: parseInt(bodyRequest.type, 10), ...(dateRange && { createdAtStart: dateRange.split(',')[0], createdAtEnd: dateRange.split(',')[1], }), }; this._transactionService.exportTransactions({ tenant: req.session.tenant, id: req.session.requestId, }, searchParameter, req.session.userId, req.metadata); } async reproveTransaction(req) { await this._transactionService.reproveTransaction(req.session.tenantId, req.params.transactionId, req.session.userId, req.metadata); } async reversalTransaction({ metadata, session: { userId, tenant, requestId } }, transactionId) { await this._transactionService.reversalTransaction({ tenant, id: requestId, userId }, metadata, transactionId); } async confirmTransaction(req) { return this._transactionService.confirmTransaction({ session: { tenant: req.session.tenant, id: req.session.requestId, }, transactionId: req.params.transactionId, userId: req.session.userId, reqMetadata: req.metadata, }); } async approveMultiple(req) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { transactions } = req.body; return this._transactionService.approveMultiple({ tenant: req.session.tenant, id: req.session.requestId }, transactions, req.session.userId, req.metadata); } async reproveMultiple(req) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { transactions } = req.body; return this._transactionService.reproveMultiple({ tenant: req.session.tenant, id: req.session.requestId }, transactions, req.session.userId, req.metadata); } async solicitTransaction(req) { await this._transactionService.solicitTransaction(req.session.tenantId, req.body.paymentAccountId, req.body.favoredId, req.body.amount, req.session.userId, req.metadata); } async solicitAdminTransaction(req) { return this._transactionService.solicitAdminTransaction({ tenant: req.session.tenant, id: req.session.requestId }, req.body.payerTaxId, req.body.payeeTaxId, req.body.amount, req.body.type, req.body.description); } confirmAdminTransaction(req) { const transaction = req.body; return this._transactionService.confirmAdminTransaction({ tenant: req.session.tenant, id: req.session.requestId }, transaction, req.metadata, req.session.userId); } async getAllTransactions(req) { const dateRange = req.query.dateRange; const searchParameter = { ...(0, utils_1.controllerPaginationHelper)(req.query, req.session), type: parseInt(req.query.type, 10), amount: parseInt(req.query.amount, 10), flow: Number(req.query.flow), status: Number(req.query.status), openfinance: Number(req.query.openfinance), account: req.query.account, accountTaxId: req.query.accountTaxIdentifier, favoredTaxId: req.query.favoredTaxIdentifier, favored: req.query.favored, coreBankId: req.query.coreBankId, transactionId: req.query.transactionId, ...(dateRange && { createdAtStart: dateRange.split(',')[0], createdAtEnd: dateRange.split(',')[1], }), }; return this._transactionService.getAllTransactions(searchParameter); } async getTransaction(id, { session }) { return this._transactionService.getTransaction(session, id); } async getTransactionDetails(req) { return this._transactionService.getTransactionDetails(req.params.id); } getPendentTransactions(req) { const dateRange = req.query.dateRange; const searchParameter = { ...(0, utils_1.controllerPaginationHelper)(req.query, req.session), account: req.query.account, favored: req.query.favored, type: parseInt(req.query.type, 10), status: parseInt(req.query.status, 10), amount: parseInt(req.query.amount, 10), ...(dateRange && { createdAtStart: dateRange.split(',')[0], createdAtEnd: dateRange.split(',')[1], }), }; return this._transactionService.getPendentTransactions(searchParameter, req.session.userId, req.session.fundsIds); } getCoreBankDetail(req) { return this._transactionService.getCoreBankDetail({ tenant: req.session.tenant, id: req.session.requestId, }, req.params.id); } async antiFraudApprove(req) { await this._transactionService.approveAntiFraudTransaction(req.session, req.params.transactionId, req.metadata); return { message: 'Transação aprovada com sucesso.' }; } async antiFraudReprove(req) { await this._transactionService.reproveAntiFraudTransaction(req.session, req.params.transactionId, req.metadata); return { message: 'Transação reprovada com sucesso.' }; } }; exports.TransactionController = TransactionController; __decorate([ (0, inversify_express_utils_1.httpGet)('/antifraud-analysis', auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_READ]), (0, logger_1.default)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getAntifraudAnalysis", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/antifraud-analysis/:id', auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_DETAILS_READ]), (0, logger_1.default)()), __param(0, (0, inversify_express_utils_1.requestParam)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getAntifraudAnalysisDetails", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/export-csv', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_READ_EXPORT]), useMetadata_1.default), __param(0, (0, inversify_express_utils_1.request)()), __param(1, (0, inversify_express_utils_1.requestBody)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "exportTransactions", null); __decorate([ (0, inversify_express_utils_1.httpDelete)('/:transactionId/reprove', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_DETAILS_BUTTONS_REPROVE]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "reproveTransaction", null); __decorate([ (0, inversify_express_utils_1.httpDelete)('/:transactionId/reversal', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_DETAILS_READ]), useMetadata_1.default, confirmAdminPIN_1.default), __param(0, (0, inversify_express_utils_1.request)()), __param(1, (0, inversify_express_utils_1.requestParam)('transactionId')), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "reversalTransaction", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/:transactionId/confirm', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_DETAILS_BUTTONS_CONFIRM]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "confirmTransaction", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/approve-multiple', (0, logger_1.default)(), auth_1.default, (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_DETAILS_BUTTONS_CONFIRM]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "approveMultiple", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/reprove-multiple', (0, logger_1.default)(), auth_1.default, (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_DETAILS_BUTTONS_REPROVE]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "reproveMultiple", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/solicit', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([ models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_READ, models_1.RolesType.ACCOUNT_DETAIL_BUTTONS_TRANSACTION_REQUEST_CREATE, ]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "solicitTransaction", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/solicit-admin-preview', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ACCOUNT_DETAIL_BUTTONS_TRANSACTION_REQUEST_CREATE]), useMetadata_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "solicitAdminTransaction", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/confirm-admin', (0, logger_1.default)({ body: ['authenticate'] }), auth_1.default, (0, adminTotp_1.default)(true), (0, hasAccess_1.default)([models_1.RolesType.TRANSFER_BETWEEN_ACCOUNTS]), useMetadata_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "confirmAdminTransaction", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/all', auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_READ]), (0, logger_1.default)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getAllTransactions", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/:id/all', auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.TRANSACTION_DETAILS_READ]), (0, logger_1.default)()), __param(0, (0, inversify_express_utils_1.requestParam)('id')), __param(1, (0, inversify_express_utils_1.request)()), __metadata("design:type", Function), __metadata("design:paramtypes", [String, Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getTransaction", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/:id', auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_READ]), (0, logger_1.default)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getTransactionDetails", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_READ]), (0, hasPermissionsInFunds_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_READ])), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getPendentTransactions", null); __decorate([ (0, inversify_express_utils_1.httpGet)('/:id/corebank', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ESCROW_PENDING_TRANSACTIONS_READ, models_1.RolesType.TRANSACTION_DETAILS_READ])), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "getCoreBankDetail", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/:transactionId/antifraud/approve', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ADMIN_CREATE]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "antiFraudApprove", null); __decorate([ (0, inversify_express_utils_1.httpPost)('/:transactionId/antifraud/reprove', (0, logger_1.default)(), auth_1.default, (0, adminTotp_1.default)(), (0, hasAccess_1.default)([models_1.RolesType.ADMIN_CREATE]), useMetadata_1.default, confirmAdminPIN_1.default), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], TransactionController.prototype, "antiFraudReprove", null); exports.TransactionController = TransactionController = __decorate([ (0, inversify_express_utils_1.controller)('/transaction'), __param(0, (0, inversify_1.inject)(types_1.default.TransactionService)), __metadata("design:paramtypes", [Object]) ], TransactionController);