From fba895a3bbb085e75c57a4994174592224e797c0 Mon Sep 17 00:00:00 2001 From: Piet Ostendorp Date: Mon, 17 Nov 2025 23:06:42 +0100 Subject: [PATCH] Add transactional order creation API integration Introduces saveAddOrder method in HttpService to POST orders and tickets transactionally. Refactors OrderComponent to use the new API for submitting orders and tickets in a single transaction, improving data consistency. --- src/app/http.service.ts | 6 ++++ src/app/order/order.component.ts | 50 ++++++++++++++------------------ 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/app/http.service.ts b/src/app/http.service.ts index d189716..ede6c37 100644 --- a/src/app/http.service.ts +++ b/src/app/http.service.ts @@ -44,6 +44,12 @@ export class HttpService { } + /* POST /api/order-transaction/create */ + saveAddOrder(req: {order:Bestellung, tickets:Eintrittskarte[]}): Observable<{order:Bestellung, tickets:Eintrittskarte[]}> { + return this.http.post<{order: Bestellung, tickets: Eintrittskarte[]}>(`${this.baseUrl}order-transaction/create`, req); + } + + /* Eintrittskarte APIs */ /* GET /api/eintrittskarte/{id} */ diff --git a/src/app/order/order.component.ts b/src/app/order/order.component.ts index 8b13379..84aa2d0 100644 --- a/src/app/order/order.component.ts +++ b/src/app/order/order.component.ts @@ -161,37 +161,31 @@ export class OrderComponent { submitOrder(order: Bestellung, seats: Sitzplatz[], performance: Vorstellung, mode: SubmissionMode) { - this.httpService.addOrder(order).pipe( - // Order erstellen - switchMap(createdOrder => { - // Tickets parallel erstellen - const ticketObservables = seats.map(seat => { - const ticket = this.generateNewTicketObject(performance, seat, createdOrder); - return this.httpService.addTicket(ticket); - }); + // Tickets anlegen + const tickets = seats.map(seat => { + return this.generateNewTicketObject(performance, seat, order);; + }); - // Warten bis alles fertig sind - return forkJoin(ticketObservables).pipe( - tap(createdTickets => { - // Success Handling - if (mode === 'reservation') { - this.orderState.set({ - status: 'reservation-success', - order: createdOrder - }); - } else { - this.orderState.set({ - status: 'purchase-success', - tickets: createdTickets - }); - } + // Transaktionssicher Sitzplatzbuchung + this.httpService.saveAddOrder({order, tickets}).pipe( + tap(createdOrderAndTickets => { + // Success Handling + if (mode === 'reservation') { + this.orderState.set({ + status: 'reservation-success', + order: createdOrderAndTickets.order + }); + } else { + this.orderState.set({ + status: 'purchase-success', + tickets: createdOrderAndTickets.tickets + }); + } - this.selectedSeatsService.commit(); - this.loadingService.hide(); - this.showConfetti(); - }) - ); + this.selectedSeatsService.commit(); + this.loadingService.hide(); + this.showConfetti(); }), catchError(err => { // Error handling