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

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