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:
@@ -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} */
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user