From 09fa876da3acfecc4735f1d6e99ff44c17d0aab2 Mon Sep 17 00:00:00 2001 From: ncoronel Date: Mon, 6 Jul 2026 14:22:12 -0300 Subject: [PATCH] feat(checkout): define CreatePurchasePayload interface and update createPurchase method to use it --- src/app/core/services/checkout.service.ts | 11 +++++++++-- .../checkout-page/checkout-page.component.ts | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/app/core/services/checkout.service.ts b/src/app/core/services/checkout.service.ts index f830484..73983d0 100644 --- a/src/app/core/services/checkout.service.ts +++ b/src/app/core/services/checkout.service.ts @@ -3,7 +3,14 @@ import { HttpClient } from '@angular/common/http'; import { firstValueFrom } from 'rxjs'; import { environment } from '../../../environments/environment'; -import { BankAccount } from './tenant.interface'; + +export interface CreatePurchasePayload { + cart_id: number; + dni: string; + telefono: string; + nombre_apellido: string; + email: string; +} @Injectable({ providedIn: 'root' @@ -11,7 +18,7 @@ import { BankAccount } from './tenant.interface'; export class CheckoutService { private readonly http = inject(HttpClient); - async createPurchase(tenantCode: string, payload: any): Promise<{ id: number }> { + async createPurchase(tenantCode: string, payload: CreatePurchasePayload): Promise<{ id: number }> { const response = await firstValueFrom( this.http.post<{ data: { id: number } }>(`${environment.url}tenants/${tenantCode}/compras`, payload) ); diff --git a/src/app/features/store/pages/checkout-page/checkout-page.component.ts b/src/app/features/store/pages/checkout-page/checkout-page.component.ts index 1afc433..3689dce 100644 --- a/src/app/features/store/pages/checkout-page/checkout-page.component.ts +++ b/src/app/features/store/pages/checkout-page/checkout-page.component.ts @@ -5,7 +5,7 @@ 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 { CheckoutService, CreatePurchasePayload } 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'; @@ -125,15 +125,18 @@ export class CheckoutPageComponent { this.isCreatingPurchase.set(true); try { - const cartItems = this.cartService.cart()?.items || []; + const cart = this.cartService.cart(); + if (!cart?.id) { + throw new Error('No hay un carrito activo para finalizar la compra.'); + } + const formValue = this.form.getRawValue(); - const payload = { - ...formValue, + const payload: CreatePurchasePayload = { + cart_id: cart.id, + dni: formValue.dni, + telefono: formValue.telefono, + email: formValue.email, nombre_apellido: formValue.nombre, - items: cartItems.map((item) => ({ - producto_variante_id: item.product_variant_id, - cantidad: item.cantidad - })) }; const response = await this.checkoutService.createPurchase(tenant.codigo, payload);