Files
api-monedero-electronico/src/operations/operations.service.ts
T

90 lines
2.4 KiB
TypeScript
Raw Normal View History

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;
}
}