Antes (API v1 - 6 chamadas):
// 1. Buscar lojas
final stores = await storeService.list(territoryId);
// 2. Buscar itens
final items = await itemService.search(query);
// 3. Buscar detalhes do item
final itemDetails = await itemService.getItem(itemId);
// 4. Adicionar ao carrinho
await cartService.addItem(itemId, quantity);
// 5. Buscar carrinho
final cart = await cartService.getCart();
// 6. Finalizar compra
final order = await cartService.checkout();
Depois (API v2 BFF - 3 chamadas):
// 1. Buscar itens (formatado)
final searchResponse = await http.get(
Uri.parse('$baseUrl/api/v2/journeys/marketplace/search')
.replace(queryParameters: {
'territoryId': territoryId,
'query': query,
'pageNumber': '1',
}),
);
final searchData = jsonDecode(searchResponse.body);
// searchData.items - itens formatados para UI
// searchData.stores - lojas
// searchData.filters - filtros disponíveis
// searchData.suggestions - sugestões
// 2. Adicionar ao carrinho
final addToCartResponse = await http.post(
Uri.parse('$baseUrl/api/v2/journeys/marketplace/add-to-cart'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
body: jsonEncode({
'territoryId': territoryId,
'itemId': itemId,
'quantity': 1,
}),
);
final cartData = jsonDecode(addToCartResponse.body);
// cartData.cart - carrinho atualizado
// cartData.total - total formatado
// cartData.suggestions - produtos relacionados
// 3. Finalizar compra
final checkoutResponse = await http.post(
Uri.parse('$baseUrl/api/v2/journeys/marketplace/checkout'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
body: jsonEncode({
'territoryId': territoryId,
'paymentMethod': 'PIX',
'shippingAddress': {
'street': 'Rua Exemplo',
'number': '123',
// ...
},
}),
);
final orderData = jsonDecode(checkoutResponse.body);
// orderData.order - ordem criada
// orderData.payment - informações de pagamento
// orderData.confirmation - confirmação