54 lines
1.5 KiB
Dart
54 lines
1.5 KiB
Dart
|
|
// lib/features/booking/services/booking_service.dart
|
||
|
|
|
||
|
|
import '../../../core/api/api_client.dart';
|
||
|
|
import '../../../core/api/api_endpoints.dart';
|
||
|
|
import '../models/booking_models.dart';
|
||
|
|
|
||
|
|
class BookingService {
|
||
|
|
final ApiClient _api = ApiClient();
|
||
|
|
|
||
|
|
/// Fetch available ticket types for an event.
|
||
|
|
Future<List<TicketMetaModel>> getTicketMeta(int eventId) async {
|
||
|
|
final res = await _api.post(
|
||
|
|
ApiEndpoints.ticketMetaList,
|
||
|
|
body: {'event_id': eventId},
|
||
|
|
);
|
||
|
|
final rawList = res['ticket_metas'] ?? res['tickets'] ?? res['data'] ?? [];
|
||
|
|
if (rawList is List) {
|
||
|
|
return rawList
|
||
|
|
.map((e) => TicketMetaModel.fromJson(Map<String, dynamic>.from(e as Map)))
|
||
|
|
.toList();
|
||
|
|
}
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Add item to cart.
|
||
|
|
Future<Map<String, dynamic>> addToCart({
|
||
|
|
required int ticketMetaId,
|
||
|
|
required int quantity,
|
||
|
|
}) async {
|
||
|
|
return await _api.post(
|
||
|
|
ApiEndpoints.cartAdd,
|
||
|
|
body: {'ticket_meta_id': ticketMetaId, 'quantity': quantity},
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Process checkout — creates booking + returns order ID for payment.
|
||
|
|
Future<Map<String, dynamic>> processCheckout({
|
||
|
|
required int eventId,
|
||
|
|
required List<Map<String, dynamic>> tickets,
|
||
|
|
required Map<String, dynamic> shippingDetails,
|
||
|
|
String? couponCode,
|
||
|
|
}) async {
|
||
|
|
return await _api.post(
|
||
|
|
ApiEndpoints.checkout,
|
||
|
|
body: {
|
||
|
|
'event_id': eventId,
|
||
|
|
'tickets': tickets,
|
||
|
|
'shipping': shippingDetails,
|
||
|
|
if (couponCode != null) 'coupon_code': couponCode,
|
||
|
|
},
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|