feat: create payment

This commit is contained in:
efrilm
2025-08-03 20:46:57 +07:00
parent 903e7d8c80
commit 5d74ed0bed
12 changed files with 1678 additions and 7 deletions
@@ -6,8 +6,10 @@ 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/request/payment_request.dart';
import 'package:enaklo_pos/data/models/response/order_response_model.dart';
import 'package:enaklo_pos/data/models/response/payment_method_response_model.dart';
import 'package:enaklo_pos/data/models/response/payment_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';
@@ -225,6 +227,40 @@ class OrderRemoteDatasource {
}
}
Future<Either<String, PaymentSuccessResponseModel>> createPayment(
PaymentRequestModel orderModel) async {
final authData = await AuthLocalDataSource().getAuthData();
final url = '${Variables.baseUrl}/api/v1/payments';
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 Right(PaymentSuccessResponseModel.fromMap(response.data));
} else {
return const Left('Gagal membuat pembayaran');
}
} 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');
}
}
Future<Either<String, OrderResponseModel>> getOrder(
{int page = 1,
int limit = Variables.defaultLimit,
@@ -248,11 +284,7 @@ class OrderRemoteDatasource {
),
);
log("📥 HTTP Status Code: ${response.statusCode}");
log("📥 Response Body: ${response.data}");
if (response.statusCode == 200) {
log("✅ getOrderByRangeDate API call successful");
return Right(OrderResponseModel.fromMap(response.data));
} else {
log("❌ getOrderByRangeDate API call failed - Status: ${response.statusCode}");