Initial V2 commit

This commit is contained in:
Hamza-Ayed
2026-04-22 21:59:56 +03:00
commit 4706404488
53 changed files with 4392 additions and 0 deletions

20
config/app.php Normal file
View File

@@ -0,0 +1,20 @@
<?php
return [
'name' => env('APP_NAME', 'IntaleqV2'),
'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false),
'url' => env('APP_URL', 'https://api-v2.intaleq.xyz'),
'timezone' => 'UTC',
'locale' => 'ar',
'fallback_locale' => 'en',
'faker_locale' => 'ar_SA',
'cipher' => 'AES-256-CBC',
'key' => env('APP_KEY'),
'previous_keys' => [
...array_filter(explode(',', env('APP_PREVIOUS_KEYS', ''))),
],
'maintenance' => [
'driver' => 'file',
],
];

21
config/cache.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
return [
'default' => env('CACHE_DRIVER', 'redis'),
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'lock_connection' => 'default',
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'array' => [
'driver' => 'array',
'serialize' => false,
],
],
'prefix' => env('CACHE_PREFIX', 'intaleq_v2'),
];

25
config/cors.php Normal file
View File

@@ -0,0 +1,25 @@
<?php
return [
'paths' => ['v2/*'],
'allowed_methods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
'allowed_origins' => [
'https://intaleq.xyz',
'https://admin.intaleq.xyz',
'https://api-v2.intaleq.xyz',
],
'allowed_origins_patterns' => [],
'allowed_headers' => [
'Content-Type',
'Authorization',
'X-API-Key',
'X-Timestamp',
'X-Signature',
'X-Nonce',
'Accept',
'X-Requested-With',
],
'exposed_headers' => [],
'max_age' => 86400,
'supports_credentials' => false,
];

104
config/database.php Normal file
View File

@@ -0,0 +1,104 @@
<?php
return [
'default' => env('DB_CONNECTION', 'primary'),
'connections' => [
/*
|--------------------------------------------------------------------------
| Primary Database (intaleqDB1) — Main Server
| Tables: driver, passengers, tokens, CarRegistration, ride, wallets, etc.
|--------------------------------------------------------------------------
*/
'primary' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'intaleqDB1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'prefix' => '',
'strict' => false,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? [
PDO::ATTR_PERSISTENT => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_general_ci",
] : [],
],
/*
|--------------------------------------------------------------------------
| Ride Database (intaleq-ridesDB) — Ride Server
| Tables: ride, driver, car_locations, driver_orders, etc.
|--------------------------------------------------------------------------
*/
'ride' => [
'driver' => 'mysql',
'host' => env('DB_RIDE_HOST', '127.0.0.1'),
'port' => env('DB_RIDE_PORT', '3306'),
'database' => env('DB_RIDE_DATABASE', 'intaleq-ridesDB'),
'username' => env('DB_RIDE_USERNAME', 'root'),
'password' => env('DB_RIDE_PASSWORD', ''),
'unix_socket' => env('DB_RIDE_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'prefix' => '',
'strict' => false,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? [
PDO::ATTR_PERSISTENT => true,
] : [],
],
/*
|--------------------------------------------------------------------------
| Tracking Database (locationDB) — Location Server
| Tables: car_locations, car_tracks, driver_daily_summary, driver_daily_work
|--------------------------------------------------------------------------
*/
'tracking' => [
'driver' => 'mysql',
'host' => env('DB_TRACKING_HOST', '127.0.0.1'),
'port' => env('DB_TRACKING_PORT', '3306'),
'database' => env('DB_TRACKING_DATABASE', 'locationDB'),
'username' => env('DB_TRACKING_USERNAME', 'root'),
'password' => env('DB_TRACKING_PASSWORD', ''),
'unix_socket' => env('DB_TRACKING_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'prefix' => '',
'strict' => false,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? [
PDO::ATTR_PERSISTENT => true,
] : [],
],
],
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
],
'migrations' => [
'table' => 'migrations',
'update_date_on_publish' => true,
],
];

38
config/intaleq.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
/**
* Intaleq V2 — Custom configuration
* All secrets and paths are externalized to .env
*/
return [
// JWT
'jwt_secret' => env('JWT_SECRET'),
'hmac_tolerance' => env('HMAC_TOLERANCE_SECONDS', 300),
// Encryption
'legacy_enc_key_path' => env('LEGACY_ENC_KEY_PATH', '/home/intaleq-api/.enckey'),
'legacy_iv' => env('LEGACY_IV', ''),
// FCM
'fcm_credentials_path' => env('FCM_CREDENTIALS_PATH', '/home/intaleq-api/firebase-credentials.json'),
'fcm_cache_path' => env('FCM_CACHE_PATH', '/home/intaleq-api/fcm_token_cache.json'),
// Internal Services
'location_server_url' => env('LOCATION_SERVER_URL', 'http://localhost:2021'),
'ride_socket_url' => env('RIDE_SOCKET_URL', 'http://localhost:3031'),
'internal_socket_key_path' => env('INTERNAL_SOCKET_KEY_PATH', '/home/intaleq-api/.internal_socket_key'),
// Rate Limiting
'rate_limit_login' => (int) env('RATE_LIMIT_LOGIN', 5),
'rate_limit_login_decay' => (int) env('RATE_LIMIT_LOGIN_DECAY', 60),
'rate_limit_api' => (int) env('RATE_LIMIT_API', 60),
'rate_limit_api_decay' => (int) env('RATE_LIMIT_API_DECAY', 60),
// Upload
'upload_max_size' => (int) env('UPLOAD_MAX_SIZE', 5242880),
'upload_allowed_types' => explode(',', env('UPLOAD_ALLOWED_TYPES', 'jpg,jpeg,png,webp')),
'upload_base_url' => env('UPLOAD_BASE_URL', 'https://intaleq.xyz'),
// Secret Salt
'secret_salt_parent' => env('SECRET_SALT_PARENT', ''),
];