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

@@ -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