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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9909d9b4c1
commit
4d8414c96b
@@ -0,0 +1,71 @@
|
||||
const int _HASH_MASK = 0x7fffffff;
|
||||
|
||||
class ListEquality<E> implements Equality<List<E>> {
|
||||
final Equality<E> _elementEquality;
|
||||
const ListEquality([Equality<E> elementEquality = const DefaultEquality()])
|
||||
: _elementEquality = elementEquality;
|
||||
|
||||
@override
|
||||
bool equals(List<E> list1, List<E> list2) {
|
||||
if (identical(list1, list2)) return true;
|
||||
|
||||
var length = list1.length;
|
||||
if (length != list2.length) return false;
|
||||
for (var i = 0; i < length; i++) {
|
||||
if (!_elementEquality.equals(list1[i], list2[i])) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
int hash(List<E> list) {
|
||||
// Jenkins's one-at-a-time hash function.
|
||||
// This code is almost identical to the one in IterableEquality, except
|
||||
// that it uses indexing instead of iterating to get the elements.
|
||||
var hash = 0;
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
var c = _elementEquality.hash(list[i]);
|
||||
hash = (hash + c) & _HASH_MASK;
|
||||
hash = (hash + (hash << 10)) & _HASH_MASK;
|
||||
hash ^= (hash >> 6);
|
||||
}
|
||||
hash = (hash + (hash << 3)) & _HASH_MASK;
|
||||
hash ^= (hash >> 11);
|
||||
hash = (hash + (hash << 15)) & _HASH_MASK;
|
||||
return hash;
|
||||
}
|
||||
|
||||
@override
|
||||
bool isValidKey(Object o) => o is List<E>;
|
||||
}
|
||||
|
||||
abstract class Equality<E> {
|
||||
const factory Equality() = DefaultEquality<E>;
|
||||
|
||||
/// Compare two elements for being equal.
|
||||
///
|
||||
/// This should be a proper equality relation.
|
||||
bool equals(E e1, E e2);
|
||||
|
||||
/// Get a hashcode of an element.
|
||||
///
|
||||
/// The hashcode should be compatible with [equals], so that if
|
||||
/// `equals(a, b)` then `hash(a) == hash(b)`.
|
||||
int hash(E e);
|
||||
|
||||
/// Test whether an object is a valid argument to [equals] and [hash].
|
||||
///
|
||||
/// Some implementations may be restricted to only work on specific types
|
||||
/// of objects.
|
||||
bool isValidKey(Object o);
|
||||
}
|
||||
|
||||
class DefaultEquality<E> implements Equality<E> {
|
||||
const DefaultEquality();
|
||||
@override
|
||||
bool equals(Object? e1, Object? e2) => e1 == e2;
|
||||
@override
|
||||
int hash(Object? e) => e.hashCode;
|
||||
@override
|
||||
bool isValidKey(Object o) => true;
|
||||
}
|
||||
Reference in New Issue
Block a user