Files
Hamza-AyedandClaude Opus 5 4d8414c96b feat: استيراد كود سيرو إلى تريبز (سيرو @ecfe7568) — بلا تعديل
قرار المالك 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>
2026-07-27 05:14:13 +03:00

88 lines
3.7 KiB
PHP

<?php
// ============================================================
// marketing_engine/cron_weekly_report.php
// Script to be run via cron (e.g. weekly) to summarize all reports
// ============================================================
require_once __DIR__ . '/../core/bootstrap.php';
require_once __DIR__ . '/../functions.php';
require_once __DIR__ . '/../core/Services/SiroGeminiService.php';
require_once __DIR__ . '/../core/Services/FcmService.php';
try {
$con = Database::get('main');
// Fetch all reports from the last 7 days (that are not weekly themselves)
$stmt = $con->prepare("
SELECT platform, report_html, created_at
FROM marketing_reports
WHERE is_weekly = 0
AND created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
ORDER BY created_at ASC
");
$stmt->execute();
$reports = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($reports)) {
echo "No reports generated in the last 7 days to summarize.\n";
exit;
}
// Combine all report data for Gemini
$combinedData = [];
foreach ($reports as $report) {
$combinedData[] = [
'platform' => $report['platform'],
'date' => $report['created_at'],
'content' => strip_tags($report['report_html']) // Send stripped HTML to save tokens
];
}
$gemini = new SiroGeminiService();
// Create a new method in GeminiService or use evaluatePostsForReporting with a specific prompt wrapper
$prompt = "أنت خبير واستشاري تسويق الذكاء الاصطناعي (Chief Marketing Officer AI).
فيما يلي جميع التقارير اليومية والفردية لاستخبارات وسائل التواصل الاجتماعي التي جمعناها خلال الـ 7 أيام الماضية.
يرجى قراءتها بالكامل وتوليد 'ملخص استخبارات السوق الأسبوعي الشامل'.
قم بتنسيق التقرير بشكل جميل باستخدام HTML. يجب أن تبرز اتجاهات السوق الرئيسية، الشكاوى المتكررة، نشاطات المنافسين، ونصائح قابلة للتنفيذ لهذا الأسبوع.
هام جداً:
- يجب أن يكون التقرير باللغة العربية بالكامل.
- يجب أن تغلف كامل التقرير بـ <div dir=\"rtl\" align=\"right\"> في البداية و </div> في النهاية لضمان المحاذاة.
البيانات:
" . json_encode($combinedData, JSON_UNESCAPED_UNICODE);
$response = $gemini->callGemini($prompt, 'gemini-1.5-flash');
if (isset($response['candidates'][0]['content']['parts'][0]['text'])) {
$weeklyHtml = $response['candidates'][0]['content']['parts'][0]['text'];
// Save the weekly report
$insert = $con->prepare("INSERT INTO marketing_reports (platform, report_html, is_weekly) VALUES ('all', ?, 1)");
$insert->execute([$weeklyHtml]);
$reportId = $con->lastInsertId();
// Notify Admins
$fcm = new FcmService();
$fcm->send(
token: '/topics/admin_alerts',
title: 'Weekly Market Intelligence Summary 📈',
body: 'The comprehensive weekly social media report has been generated.',
data: [
'type' => 'marketing_report',
'report_id' => $reportId,
'is_weekly' => 1
],
category: 'marketing_report'
);
echo "Weekly report generated and saved successfully. ID: $reportId\n";
} else {
echo "Failed to generate report from Gemini.\n";
}
} catch (Exception $e) {
echo "Error generating weekly report: " . $e->getMessage() . "\n";
}