feat: save order

This commit is contained in:
efrilm
2025-08-03 12:26:47 +07:00
parent e1825fe86f
commit 87a62a287a
13 changed files with 1340 additions and 117 deletions
@@ -1,17 +1,21 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:convert';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:enaklo_pos/core/constants/variables.dart';
import 'package:enaklo_pos/core/network/dio_client.dart';
import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/models/response/order_remote_datasource.dart';
import 'package:enaklo_pos/data/models/response/payment_method_response_model.dart';
import 'package:enaklo_pos/data/models/response/summary_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
import 'package:enaklo_pos/presentation/home/models/order_request.dart';
import 'package:http/http.dart' as http;
class OrderRemoteDatasource {
final Dio dio = DioClient.instance;
//save order to remote server
Future<bool> saveOrder(OrderModel orderModel) async {
final authData = await AuthLocalDataSource().getAuthData();
@@ -28,11 +32,11 @@ class OrderRemoteDatasource {
'Content-Type': 'application/json',
},
);
print("πŸ“₯ HTTP Status Code: ${response.statusCode}");
print("πŸ“₯ Response Body: ${response.body}");
print("πŸ“₯ Response Headers: ${response.headers}");
if (response.statusCode == 200) {
print("βœ… API call successful - Order saved to server");
return true;
@@ -69,7 +73,8 @@ class OrderRemoteDatasource {
print("βœ… getOrderByRangeDate API call successful");
return Right(OrderResponseModel.fromJson(response.body));
} else {
print("❌ getOrderByRangeDate API call failed - Status: ${response.statusCode}");
print(
"❌ getOrderByRangeDate API call failed - Status: ${response.statusCode}");
print("❌ Error Response: ${response.body}");
return const Left("Failed Load Data");
}
@@ -102,7 +107,8 @@ class OrderRemoteDatasource {
print("βœ… getSummaryByRangeDate API call successful");
return Right(SummaryResponseModel.fromJson(response.body));
} else {
print("❌ getSummaryByRangeDate API call failed - Status: ${response.statusCode}");
print(
"❌ getSummaryByRangeDate API call failed - Status: ${response.statusCode}");
print("❌ Error Response: ${response.body}");
return const Left("Failed Load Data");
}
@@ -112,7 +118,8 @@ class OrderRemoteDatasource {
}
}
Future<Either<String, PaymentMethodResponseModel>> getPaymentMethodByRangeDate(
Future<Either<String, PaymentMethodResponseModel>>
getPaymentMethodByRangeDate(
String startDate,
String endDate,
) async {
@@ -134,7 +141,8 @@ class OrderRemoteDatasource {
print("βœ… getPaymentMethodByRangeDate API call successful");
return Right(PaymentMethodResponseModel.fromJson(response.body));
} else {
print("❌ getPaymentMethodByRangeDate API call failed - Status: ${response.statusCode}");
print(
"❌ getPaymentMethodByRangeDate API call failed - Status: ${response.statusCode}");
print("❌ Error Response: ${response.body}");
return const Left("Failed Load Payment Method Data");
}
@@ -162,16 +170,17 @@ class OrderRemoteDatasource {
'order_items': orderItems,
}),
);
print("πŸ“₯ Add Order Items HTTP Status Code: ${response.statusCode}");
print("πŸ“₯ Add Order Items Response Body: ${response.body}");
print("πŸ“₯ Add Order Items Response Headers: ${response.headers}");
if (response.statusCode == 200) {
print("βœ… addOrderItems API call successful");
return const Right(true);
} else {
print("❌ addOrderItems API call failed - Status: ${response.statusCode}");
print(
"❌ addOrderItems API call failed - Status: ${response.statusCode}");
print("❌ Error Response: ${response.body}");
return Left("Failed to add order items: ${response.body}");
}
@@ -180,4 +189,38 @@ class OrderRemoteDatasource {
return Left("Failed: $e");
}
}
// New Api
Future<Either<String, bool>> createOrder(OrderRequestModel orderModel) async {
final authData = await AuthLocalDataSource().getAuthData();
final url = '${Variables.baseUrl}/api/v1/orders';
try {
final response = await dio.post(
url,
data: orderModel.toMap(),
options: Options(
headers: {
'Authorization': 'Bearer ${authData.token}',
'Accept': 'application/json',
'Content-Type': 'application/json',
},
),
);
if (response.statusCode == 200) {
return const Right(true);
} else {
return const Left('Gagal membuat pesanan');
}
} on DioException catch (e) {
final errorMessage = e.response?.data['message'] ?? 'Kesalahan jaringan';
log("πŸ’₯ Dio error: ${e.message}");
log("πŸ’₯ Dio response: ${e.response?.data}");
return Left(errorMessage);
} catch (e) {
log("πŸ’₯ Unexpected error: $e");
return const Left('Terjadi kesalahan tak terduga');
}
}
}