Update: 2026-07-12 05:40:28
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
// transit_driver_service.dart — طبقة الاتصال بـ backend/transit (جهة سائق الباص)
|
||||
import '../functions/crud.dart';
|
||||
import '../../constant/links.dart';
|
||||
import 'transit_driver_models.dart';
|
||||
|
||||
class TransitApiResult<T> {
|
||||
final bool success;
|
||||
final T? data;
|
||||
final String message;
|
||||
TransitApiResult(this.success, this.data, this.message);
|
||||
}
|
||||
|
||||
class TransitDriverService {
|
||||
static String get _base => '${AppLink.server}/transit';
|
||||
|
||||
static String _errMsg(dynamic res) {
|
||||
if (res == 'no_internet') return 'تحقق من اتصالك بالإنترنت';
|
||||
if (res == 'token_expired') return 'انتهت الجلسة، حاول مجدداً';
|
||||
if (res is Map && res['message'] is String) return res['message'];
|
||||
return 'حدث خطأ، حاول مجدداً';
|
||||
}
|
||||
|
||||
/// هل هذا الحساب سائق باص، وما معرّفه في مواصلاتي؟
|
||||
static Future<TransitApiResult<Map<String, dynamic>>> checkIsBusDriver() async {
|
||||
final res = await CRUD().post(link: '$_base/driver/me.php');
|
||||
if (res is Map && res['status'] == 'success' && res['message'] is Map) {
|
||||
return TransitApiResult(true, Map<String, dynamic>.from(res['message']), 'ok');
|
||||
}
|
||||
return TransitApiResult(false, null, _errMsg(res));
|
||||
}
|
||||
|
||||
/// رحلات اليوم (تُنشأ تلقائياً من الجداول عند أول استدعاء)
|
||||
static Future<TransitApiResult<List<TransitDriverTrip>>> getTodayTrips(
|
||||
int driverTransitId) async {
|
||||
final res = await CRUD().post(
|
||||
link: '$_base/trip/today.php',
|
||||
payload: {'driver_transit_id': driverTransitId.toString()},
|
||||
);
|
||||
if (res is Map && res['status'] == 'success' && res['message'] is Map) {
|
||||
final msg = res['message'] as Map;
|
||||
final list = (msg['trips'] is List)
|
||||
? (msg['trips'] as List)
|
||||
.map((t) => TransitDriverTrip.fromJson(Map<String, dynamic>.from(t)))
|
||||
.toList()
|
||||
: <TransitDriverTrip>[];
|
||||
return TransitApiResult(true, list, 'ok');
|
||||
}
|
||||
return TransitApiResult(false, null, _errMsg(res));
|
||||
}
|
||||
|
||||
static Future<TransitApiResult<Map<String, dynamic>>> startTrip({
|
||||
required int tripId,
|
||||
required int driverTransitId,
|
||||
required double lat,
|
||||
required double lng,
|
||||
}) async {
|
||||
final res = await CRUD().post(
|
||||
link: '$_base/trip/start.php',
|
||||
payload: {
|
||||
'trip_id': tripId.toString(),
|
||||
'driver_transit_id': driverTransitId.toString(),
|
||||
'lat': lat.toString(),
|
||||
'lng': lng.toString(),
|
||||
},
|
||||
);
|
||||
if (res is Map && res['status'] == 'success') {
|
||||
return TransitApiResult(true, Map<String, dynamic>.from(res['message'] ?? {}), 'ok');
|
||||
}
|
||||
return TransitApiResult(false, null, _errMsg(res));
|
||||
}
|
||||
|
||||
static Future<TransitApiResult<Map<String, dynamic>>> endTrip({
|
||||
required int tripId,
|
||||
required int driverTransitId,
|
||||
}) async {
|
||||
final res = await CRUD().post(
|
||||
link: '$_base/trip/end.php',
|
||||
payload: {
|
||||
'trip_id': tripId.toString(),
|
||||
'driver_transit_id': driverTransitId.toString(),
|
||||
},
|
||||
);
|
||||
if (res is Map && res['status'] == 'success') {
|
||||
return TransitApiResult(true, Map<String, dynamic>.from(res['message'] ?? {}), 'ok');
|
||||
}
|
||||
return TransitApiResult(false, null, _errMsg(res));
|
||||
}
|
||||
|
||||
static Future<TransitApiResult<void>> reportDelay({
|
||||
required int tripId,
|
||||
required int driverTransitId,
|
||||
required int delayMinutes,
|
||||
String? reason,
|
||||
}) async {
|
||||
final res = await CRUD().post(
|
||||
link: '$_base/trip/delay.php',
|
||||
payload: {
|
||||
'trip_id': tripId.toString(),
|
||||
'driver_transit_id': driverTransitId.toString(),
|
||||
'delay_minutes': delayMinutes.toString(),
|
||||
if (reason != null) 'reason': reason,
|
||||
},
|
||||
);
|
||||
if (res is Map && res['status'] == 'success') {
|
||||
return TransitApiResult(true, null, 'ok');
|
||||
}
|
||||
return TransitApiResult(false, null, _errMsg(res));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user