2025-10-22 18:39:19 -06:00
|
|
|
import { Injectable, InternalServerErrorException } from '@nestjs/common';
|
2025-10-22 15:00:05 -06:00
|
|
|
import axios from 'axios';
|
2025-10-20 14:13:16 -06:00
|
|
|
import { PagoKioscoService } from 'src/pago-kiosco/pago-kiosco.service';
|
2025-10-22 17:51:14 -06:00
|
|
|
import { PagoPatronatoService } from 'src/pago-patronato/pago-patronato.service';
|
2025-10-20 14:13:16 -06:00
|
|
|
import { PersonaService } from 'src/persona/persona.service';
|
|
|
|
|
import { TransaccionService } from 'src/transaccion/transaccion.service';
|
|
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class OperationsService {
|
|
|
|
|
constructor(
|
|
|
|
|
private readonly transaccionService: TransaccionService,
|
|
|
|
|
private readonly pagoKioscoService: PagoKioscoService,
|
|
|
|
|
private readonly personaService: PersonaService,
|
2025-10-22 17:51:14 -06:00
|
|
|
private readonly pagoPatronatoService: PagoPatronatoService,
|
2025-10-20 14:13:16 -06:00
|
|
|
) {}
|
|
|
|
|
|
2025-10-22 18:39:19 -06:00
|
|
|
async login() {
|
|
|
|
|
try {
|
|
|
|
|
const response = await axios.post(`${process.env.API_AT_URL}/user`, {
|
|
|
|
|
usuario: process.env.USER,
|
|
|
|
|
password: process.env.PASS,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return response.data.access_token;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw new InternalServerErrorException(
|
|
|
|
|
'Error al autenticar con API externa',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async addCredit(token: string, data: any) {
|
|
|
|
|
try {
|
|
|
|
|
const response = await axios.post(
|
|
|
|
|
`${process.env.API_AT_URL}/operations/receipt`,
|
|
|
|
|
data,
|
|
|
|
|
{
|
|
|
|
|
headers: { Authorization: `Bearer ${token}` },
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
return response.data;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
throw new InternalServerErrorException(
|
|
|
|
|
'Error al registrar crédito en API externa',
|
2025-10-22 18:47:05 -06:00
|
|
|
error,
|
2025-10-22 18:39:19 -06:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async depositKiosco({ cantidad, idKiosco, transaccion }, idPersona: number) {
|
2025-10-20 14:13:16 -06:00
|
|
|
const today = new Date().toString();
|
|
|
|
|
|
2025-10-21 13:42:37 -06:00
|
|
|
const transaction = {
|
|
|
|
|
nombreTransaccion: transaccion,
|
2025-10-20 14:13:16 -06:00
|
|
|
idPersona,
|
|
|
|
|
fecha: today,
|
|
|
|
|
tipoTransaccion: 2,
|
|
|
|
|
};
|
|
|
|
|
|
2025-10-21 13:42:37 -06:00
|
|
|
const responseTransaccion = this.transaccionService.create(transaction);
|
2025-10-22 16:53:41 -06:00
|
|
|
|
|
|
|
|
const newSaldo = this.personaService.updateSaldo(idPersona, cantidad);
|
|
|
|
|
|
2025-10-20 14:13:16 -06:00
|
|
|
const pagoKiosco = {
|
|
|
|
|
idTransaccion: (await responseTransaccion).idTransaccion,
|
2025-10-20 15:46:44 -06:00
|
|
|
monto: cantidad,
|
2025-10-20 14:13:16 -06:00
|
|
|
fecha: today,
|
|
|
|
|
idKiosco,
|
|
|
|
|
pagoPatronatoCreado: false,
|
|
|
|
|
};
|
|
|
|
|
|
2025-10-22 17:51:14 -06:00
|
|
|
const pagoK = this.pagoKioscoService.create(pagoKiosco);
|
|
|
|
|
|
|
|
|
|
const pagoP = this.pagoPatronatoService.findById(
|
|
|
|
|
(await pagoK).idPagoKiosco,
|
|
|
|
|
);
|
2025-10-20 14:13:16 -06:00
|
|
|
|
2025-10-22 18:39:19 -06:00
|
|
|
const token = await this.login();
|
2025-10-22 16:53:41 -06:00
|
|
|
|
2025-10-22 18:39:19 -06:00
|
|
|
await this.addCredit(token, {
|
|
|
|
|
id_cuenta: idPersona,
|
|
|
|
|
monto: cantidad,
|
|
|
|
|
fecha_recibo: today,
|
|
|
|
|
folio_recibo: (await pagoP)?.folio,
|
|
|
|
|
});
|
2025-10-22 15:00:05 -06:00
|
|
|
|
2025-10-20 14:13:16 -06:00
|
|
|
return newSaldo;
|
|
|
|
|
}
|
|
|
|
|
}
|