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.
This commit is contained in:
2025-11-17 23:06:42 +01:00
parent e5fcdfe212
commit fba895a3bb
2 changed files with 28 additions and 28 deletions

View File

@@ -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 */ /* Eintrittskarte APIs */
/* GET /api/eintrittskarte/{id} */ /* GET /api/eintrittskarte/{id} */

View File

@@ -161,37 +161,31 @@ export class OrderComponent {
submitOrder(order: Bestellung, seats: Sitzplatz[], performance: Vorstellung, mode: SubmissionMode) { submitOrder(order: Bestellung, seats: Sitzplatz[], performance: Vorstellung, mode: SubmissionMode) {
this.httpService.addOrder(order).pipe(
// Order erstellen
switchMap(createdOrder => {
// Tickets parallel erstellen // Tickets anlegen
const ticketObservables = seats.map(seat => { const tickets = seats.map(seat => {
const ticket = this.generateNewTicketObject(performance, seat, createdOrder); return this.generateNewTicketObject(performance, seat, order);;
return this.httpService.addTicket(ticket);
}); });
// Warten bis alles fertig sind // Transaktionssicher Sitzplatzbuchung
return forkJoin(ticketObservables).pipe( this.httpService.saveAddOrder({order, tickets}).pipe(
tap(createdTickets => { tap(createdOrderAndTickets => {
// Success Handling // Success Handling
if (mode === 'reservation') { if (mode === 'reservation') {
this.orderState.set({ this.orderState.set({
status: 'reservation-success', status: 'reservation-success',
order: createdOrder order: createdOrderAndTickets.order
}); });
} else { } else {
this.orderState.set({ this.orderState.set({
status: 'purchase-success', status: 'purchase-success',
tickets: createdTickets tickets: createdOrderAndTickets.tickets
}); });
} }
this.selectedSeatsService.commit(); this.selectedSeatsService.commit();
this.loadingService.hide(); this.loadingService.hide();
this.showConfetti(); this.showConfetti();
})
);
}), }),
catchError(err => { catchError(err => {
// Error handling // Error handling