feat(checkout): implement authentication guard for checkout route and add bank account service

This commit is contained in:
2026-07-03 14:07:57 -03:00
parent 0a2d999c00
commit 3971970975
8 changed files with 81 additions and 6 deletions

View File

@@ -15,7 +15,7 @@
[paymentMethods]="paymentMethods"
[selectedPaymentMethod]="selectedPaymentMethod()"
[copiedTransferField]="copiedTransferField()"
[transferAccount]="transferAccount"
[transferAccount]="transferAccount()"
(paymentMethodChange)="selectPaymentMethod($event)"
(copyTransferValue)="copyTransferValue($event.field, $event.value)"
(cancelStep)="onCancel()"

View File

@@ -4,6 +4,9 @@ import { Router } from '@angular/router';
import { startWith } from 'rxjs';
import { CartService } from '../../../../core/services/cart/cart.service';
import { TenantService } from '../../../../core/services/tenant.service';
import { CheckoutService } from '../../../../core/services/checkout.service';
import { BankAccount } from '../../../../core/services/tenant.interface';
import { CartItem } from '../../../../core/services/cart/cart.interface';
import { CartComponent, CartItemMock } from '../../../../shared/components/cart/cart.component';
import { StepComponent } from '../../../../shared/components/stepper/step.component';
@@ -30,6 +33,8 @@ export class CheckoutPageComponent {
private readonly formBuilder = inject(FormBuilder);
private readonly cartService = inject(CartService);
private readonly router = inject(Router);
private readonly tenantService = inject(TenantService);
private readonly checkoutService = inject(CheckoutService);
@ViewChild(StepperComponent) stepper!: StepperComponent;
@@ -63,17 +68,36 @@ export class CheckoutPageComponent {
];
protected readonly selectedPaymentMethod = signal<PaymentMethod>('qr');
protected readonly copiedTransferField = signal<TransferField | null>(null);
protected readonly transferAccount: TransferAccount = {
protected readonly transferAccount = signal<TransferAccount>({
titular: 'Nombre y Apellido',
entidad: 'TelePagos',
cvu: '0000000000000000000000',
alias: 'telepagos.ar'
};
});
constructor() {
this.form.statusChanges
.pipe(startWith(this.form.status))
.subscribe(() => this.isStep1Valid.set(this.form.valid));
void this.loadSelectedBankAccount();
}
private async loadSelectedBankAccount(): Promise<void> {
const tenant = this.tenantService.tenant();
if (!tenant) return;
try {
const data = await this.checkoutService.getSelectedBankAccount(tenant.codigo);
this.transferAccount.set({
titular: data.titular,
entidad: data.entidad,
cvu: data.cvu,
alias: data.alias
});
} catch (error) {
console.error('Failed to load selected bank account:', error);
}
}
private mapCartItemToMock(item: CartItem): CartItemMock {

View File

@@ -2,7 +2,7 @@ import { Routes } from '@angular/router';
import { AuthLayoutComponent } from '../../core/layout/auth-layout/auth-layout.component';
import { StoreLayoutComponent } from '../../core/layout/store-layout/store-layout.component';
import { guestOnlyGuard } from '../../core/services/auth/auth.guards';
import { authGuard, guestOnlyGuard } from '../../core/services/auth/auth.guards';
import { LoginPageComponent } from './pages/login-page/login-page.component';
import { RegisterPageComponent } from './pages/register-page/register-page.component';
import { StoreHomePageComponent } from './pages/store-home-page/store-home-page.component';
@@ -47,6 +47,7 @@ export const routes: Routes = [
},
{
path: 'checkout',
canActivate: [authGuard],
loadComponent: () =>
import('./pages/checkout-page/checkout-page.component').then(
(m) => m.CheckoutPageComponent