قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
81 lines
2.4 KiB
Dart
Executable File
81 lines
2.4 KiB
Dart
Executable File
import 'dart:convert';
|
|
import 'package:get/get.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
class GeminiEgypt extends GetxController {
|
|
Map<String, dynamic> responseIdCardDriverEgypt = {};
|
|
String? responseIdCardDriverEgypt1;
|
|
|
|
Future geminiAiExtraction(String prompt, payload) async {
|
|
var requestBody = jsonEncode({
|
|
'contents': [
|
|
{
|
|
'parts': [
|
|
// {
|
|
// 'inlineData': {
|
|
// 'mimeType': 'image/jpeg',
|
|
// 'data': imageData,
|
|
// },
|
|
// },
|
|
{
|
|
'text': """
|
|
$payload
|
|
|
|
$prompt ,and make dates format like year-month-day"""
|
|
},
|
|
],
|
|
},
|
|
],
|
|
'generationConfig': {
|
|
'temperature': 0.4,
|
|
'topK': 32,
|
|
'topP': 1,
|
|
'maxOutputTokens': 4096,
|
|
'stopSequences': [],
|
|
},
|
|
'safety_settings': [
|
|
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
|
|
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
|
|
{
|
|
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
|
|
"threshold": "BLOCK_NONE"
|
|
},
|
|
{
|
|
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
|
|
"threshold": "BLOCK_NONE"
|
|
},
|
|
]
|
|
});
|
|
|
|
final response = await http.post(
|
|
Uri.parse(
|
|
// 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${AK.geminiApi}'),
|
|
'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=AIzaSyCyoLcSkDzK5_SMe00nhut56SSXWPR074w'),
|
|
headers: {'Content-Type': 'application/json'},
|
|
body: requestBody,
|
|
);
|
|
|
|
if (response.statusCode == 200) {
|
|
var responseData = jsonDecode(response.body);
|
|
// Process the responseData as needed
|
|
|
|
var result = responseData['candidates'][0]['content']['parts'][0]['text'];
|
|
RegExp regex = RegExp(r"```json([^`]*)```");
|
|
String? jsonString =
|
|
regex.firstMatch(responseData.toString())?.group(1)?.trim();
|
|
|
|
if (jsonString != null) {
|
|
// Convert the JSON object to a String
|
|
jsonString = jsonEncode(json.decode(jsonString));
|
|
responseIdCardDriverEgypt1 = jsonString;
|
|
|
|
responseIdCardDriverEgypt = jsonDecode(responseIdCardDriverEgypt1!);
|
|
update();
|
|
return responseIdCardDriverEgypt;
|
|
} else {}
|
|
|
|
// Rest of your code...
|
|
} else {}
|
|
}
|
|
}
|