17 KiB
NAKS Multi-Module Cross-Site Synchronization
English
Overview
The NAKS Sync system enables automatic synchronization of all NAKS-related data across multiple project sites. Each site runs this sync process to pull data from other sites, ensuring all sites have the same NAKS data.
Supported Modules
| Module Key | Name | Table | Unique Keys | PDF Folder |
|---|---|---|---|---|
technology |
NAKS Technology | naks_certificates |
short_number + certificate_no |
0000_Naks Technology |
welder |
NAKS Welder | naks_welders |
naks_certificate_no + welder_id |
0003_Naks Welder |
consumables |
NAKS Consumables | naks_consumables |
naks_certificate_no + batch_number |
0002_Naks Consumables |
expert |
NAKS Expert | register_of_experts |
certificate_no |
0004_Naks Expert |
equipment |
NAKS Equipment | welding_equipment |
attestation |
0001_Naks Equipment |
Architecture
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Site 101 │ │ Site 102 │ │ Site 104 │
│ (Cherepovets) │ │ (Viksa OMK) │ │ (Novokuznetsk) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌────────────▼────────────┐
│ API Communication │
│ │
│ For Each Module: │
│ • naks_certificates │
│ • naks_welders │
│ • naks_consumables │
│ • register_of_experts │
│ • welding_equipment │
└─────────────────────────┘
Key Features
- Multi-Module Support: Sync all 5 NAKS modules in one command
- Selective Sync: Choose specific module(s) to sync
- Incremental Sync: Only syncs new/updated records since last sync
- Conflict Resolution: Uses
updated_attimestamp - newer record wins - PDF Download: Automatically downloads certificate PDF files
- Multi-site Support: Works with all registered project sites
- Dry Run Mode: Test sync without making changes
Installation
1. Environment Configuration
Add the following to your .env file on each site:
# Cross-Site NAKS Sync
SYNC_ADMIN_EMAIL=sync@stellarcons.com
SYNC_ADMIN_PASSWORD=YourSecurePassword
Important
: The same admin credentials must exist on all project sites.
2. Database Migration
Run the migration to create the sync state tracking table:
php artisan migrate
This creates the sync_states table that tracks sync progress for each module and source.
Usage
Command Options
# Sync ALL modules from all projects
php artisan naks:sync
# Sync specific module only
php artisan naks:sync --module=technology
php artisan naks:sync --module=welder
php artisan naks:sync --module=consumables
php artisan naks:sync --module=expert
php artisan naks:sync --module=equipment
# Sync specific project only
php artisan naks:sync --project=101
php artisan naks:sync --project=Cherepovets
# Combine options
php artisan naks:sync --module=welder --project=101
# Test mode (no changes)
php artisan naks:sync --dry-run
# Force sync all records (ignore last sync ID)
php artisan naks:sync --force
# Show sync status
php artisan naks:sync --status
php artisan naks:sync --status --module=welder
# Reset sync state
php artisan naks:sync --reset
php artisan naks:sync --reset --module=welder
php artisan naks:sync --reset --project=101
Example Output
╔════════════════════════════════════════════════════════════╗
║ NAKS Multi-Module Cross-Site Synchronization ║
╚════════════════════════════════════════════════════════════╝
📦 Available Modules:
+-------------+------------------+---------------------+----------------------------------+
| Key | Name | Table | Unique Keys |
+-------------+------------------+---------------------+----------------------------------+
| technology | NAKS Technology | naks_certificates | short_number + certificate_no |
| welder | NAKS Welder | naks_welders | naks_certificate_no + welder_id |
| consumables | NAKS Consumables | naks_consumables | naks_certificate_no + batch_num |
| expert | NAKS Expert | register_of_experts | certificate_no |
| equipment | NAKS Equipment | welding_equipment | attestation |
+-------------+------------------+---------------------+----------------------------------+
📋 Available Projects:
+---------------------------+-----------------------------------+
| Project Name | URL |
+---------------------------+-----------------------------------+
| 101-Cherepovets | https://101.qms.stellarcons.com |
| 102 - VIKSA OMK | https://viksaqms.stellarcons.com |
| 104 - Новокузнецк | https://104.qms.stellarcons.com |
+---------------------------+-----------------------------------+
🔄 Starting synchronization...
════════════════════════════════════════════════════════════
SYNC RESULTS
════════════════════════════════════════════════════════════
+---------------------+-------+
| Metric | Value |
+---------------------+-------+
| Total Projects | 5 |
| Successful Projects | 5 |
| Failed Projects | 0 |
| Duration | 120s |
+---------------------+-------+
📦 Module Results:
+------------------+--------+----------+---------+---------+------+
| Module | Synced | Inserted | Updated | Skipped | PDFs |
+------------------+--------+----------+---------+---------+------+
| NAKS Technology | 150 | 45 | 30 | 75 | 12 |
| NAKS Welder | 200 | 80 | 40 | 80 | 25 |
| NAKS Consumables | 100 | 30 | 20 | 50 | 5 |
| NAKS Expert | 50 | 15 | 10 | 25 | 8 |
| NAKS Equipment | 75 | 25 | 15 | 35 | 10 |
| ───────── | ───── | ──────── | ─────── | ─────── | ──── |
| TOTAL | 575 | 195 | 115 | 265 | 60 |
+------------------+--------+----------+---------+---------+------+
✅ Synchronization completed successfully!
Cron Schedule
The sync runs automatically every day at 02:00 AM. Configuration in app/Console/Kernel.php:
$schedule->command('naks:sync --module=all')
->daily()
->at('02:00')
->withoutOverlapping(120)
->appendOutputTo(storage_path('logs/naks-sync.log'));
Sync Logic
- Get Project List: Fetches available projects from
/api/project-app-urls - Authenticate: Logs in to each remote site once to get Bearer token
- For Each Module:
- Get last synced ID from
sync_statestable - Fetch records with ID > last_synced_id
- For each record:
- If not exists locally (by unique keys) → INSERT
- If exists and remote is newer → UPDATE
- If exists and local is newer → SKIP
- Download PDF if available
- Update sync state
- Get last synced ID from
Module Details
NAKS Technology (technology)
- Table:
naks_certificates - Unique Key:
short_number+certificate_no - Example: АЦСТ-149 + 00036
- PDF Path:
storage/documents/003_Welding_Database/0000_Naks Technology/
NAKS Welder (welder)
- Table:
naks_welders - Unique Key:
naks_certificate_no+welder_id - PDF Path:
storage/documents/003_Welding_Database/0003_Naks Welder/
NAKS Consumables (consumables)
- Table:
naks_consumables - Unique Key:
naks_certificate_no+batch_number - PDF Path:
storage/documents/003_Welding_Database/0002_Naks Consumables/
NAKS Expert (expert)
- Table:
register_of_experts - Unique Key:
certificate_no - PDF Path:
storage/documents/003_Welding_Database/0004_Naks Expert/
NAKS Equipment (equipment)
- Table:
welding_equipment - Unique Key:
attestation - PDF Path:
storage/documents/003_Welding_Database/0001_Naks Equipment/
Troubleshooting
| Issue | Solution |
|---|---|
| Authentication failed | Check SYNC_ADMIN_EMAIL/PASSWORD in .env |
| No projects found | Verify /api/project-app-urls endpoint |
| PDFs not downloading | Check storage permissions |
| Sync stuck | Run with --reset to clear state |
| Module not syncing | Check if table exists and has data |
Log Files
- Cron Output:
storage/logs/naks-sync.log - Application Log:
storage/logs/laravel.log
Türkçe
Genel Bakış
NAKS Sync sistemi, tüm NAKS ile ilgili verilerin birden fazla proje şantiyesi arasında otomatik senkronizasyonunu sağlar. Her şantiye bu sync işlemini çalıştırarak diğer şantiyelerden veri çeker ve tüm şantiyelerin aynı NAKS verisine sahip olmasını sağlar.
Desteklenen Modüller
| Modül Key | İsim | Tablo | Benzersiz Anahtar | PDF Klasörü |
|---|---|---|---|---|
technology |
NAKS Teknoloji | naks_certificates |
short_number + certificate_no |
0000_Naks Technology |
welder |
NAKS Kaynakçı | naks_welders |
naks_certificate_no + welder_id |
0003_Naks Welder |
consumables |
NAKS Sarf Malzeme | naks_consumables |
naks_certificate_no + batch_number |
0002_Naks Consumables |
expert |
NAKS Uzman | register_of_experts |
certificate_no |
0004_Naks Expert |
equipment |
NAKS Ekipman | welding_equipment |
attestation |
0001_Naks Equipment |
Mimari
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Şantiye 101 │ │ Şantiye 102 │ │ Şantiye 104 │
│ (Cherepovets) │ │ (Viksa OMK) │ │ (Novokuznetsk) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌────────────▼────────────┐
│ API İletişimi │
│ │
│ Her Modül İçin: │
│ • naks_certificates │
│ • naks_welders │
│ • naks_consumables │
│ • register_of_experts │
│ • welding_equipment │
└─────────────────────────┘
Temel Özellikler
- Çoklu Modül Desteği: Tek komutla 5 NAKS modülünü sync et
- Seçici Sync: Belirli modül(ler)i sync et
- Artımlı Sync: Sadece son sync'ten sonra eklenen/güncellenen kayıtları senkronize eder
- Çakışma Çözümü:
updated_atzaman damgası kullanır - yeni olan kazanır - PDF İndirme: Sertifika PDF dosyalarını otomatik indirir
- Çoklu Şantiye Desteği: Tüm kayıtlı proje şantiyeleriyle çalışır
- Deneme Modu: Değişiklik yapmadan sync'i test et
Kurulum
1. Ortam Yapılandırması
Her şantiyede .env dosyasına aşağıdakileri ekleyin:
# Şantiyeler Arası NAKS Sync
SYNC_ADMIN_EMAIL=sync@stellarcons.com
SYNC_ADMIN_PASSWORD=GuvenliSifreniz
Önemli: Aynı admin kimlik bilgileri tüm proje şantiyelerinde mevcut olmalıdır.
2. Veritabanı Migrasyonu
Sync durum takip tablosunu oluşturmak için migrasyonu çalıştırın:
php artisan migrate
Kullanım
Komut Seçenekleri
# TÜM modülleri tüm projelerden sync et
php artisan naks:sync
# Sadece belirli modülü sync et
php artisan naks:sync --module=technology
php artisan naks:sync --module=welder
php artisan naks:sync --module=consumables
php artisan naks:sync --module=expert
php artisan naks:sync --module=equipment
# Sadece belirli projeyi sync et
php artisan naks:sync --project=101
php artisan naks:sync --project=Cherepovets
# Seçenekleri birleştir
php artisan naks:sync --module=welder --project=101
# Test modu (değişiklik yapma)
php artisan naks:sync --dry-run
# Tüm kayıtları zorla sync et
php artisan naks:sync --force
# Sync durumunu göster
php artisan naks:sync --status
php artisan naks:sync --status --module=welder
# Sync durumunu sıfırla
php artisan naks:sync --reset
php artisan naks:sync --reset --module=welder
Cron Zamanlaması
Sync her gün sabah 02:00'de otomatik olarak çalışır. app/Console/Kernel.php içindeki yapılandırma:
$schedule->command('naks:sync --module=all')
->daily()
->at('02:00')
->withoutOverlapping(120)
->appendOutputTo(storage_path('logs/naks-sync.log'));
Sync Mantığı
- Proje Listesi Al:
/api/project-app-urls'den mevcut projeleri çeker - Kimlik Doğrula: Bearer token almak için her uzak şantiyeye bir kez giriş yapar
- Her Modül İçin:
sync_statestablosundan son sync edilen ID'yi al- ID > last_synced_id olan kayıtları çek
- Her kayıt için:
- Yerel'de yoksa (benzersiz anahtarlara göre) → EKLE
- Varsa ve uzaktaki daha yeniyse → GÜNCELLE
- Varsa ve yereldeki daha yeniyse → ATLA
- PDF varsa indir
- Sync durumunu güncelle
Modül Detayları
NAKS Teknoloji (technology)
- Tablo:
naks_certificates - Benzersiz Anahtar:
short_number+certificate_no - Örnek: АЦСТ-149 + 00036
- PDF Yolu:
storage/documents/003_Welding_Database/0000_Naks Technology/
NAKS Kaynakçı (welder)
- Tablo:
naks_welders - Benzersiz Anahtar:
naks_certificate_no+welder_id - PDF Yolu:
storage/documents/003_Welding_Database/0003_Naks Welder/
NAKS Sarf Malzeme (consumables)
- Tablo:
naks_consumables - Benzersiz Anahtar:
naks_certificate_no+batch_number - PDF Yolu:
storage/documents/003_Welding_Database/0002_Naks Consumables/
NAKS Uzman (expert)
- Tablo:
register_of_experts - Benzersiz Anahtar:
certificate_no - PDF Yolu:
storage/documents/003_Welding_Database/0004_Naks Expert/
NAKS Ekipman (equipment)
- Tablo:
welding_equipment - Benzersiz Anahtar:
attestation - PDF Yolu:
storage/documents/003_Welding_Database/0001_Naks Equipment/
Sorun Giderme
| Sorun | Çözüm |
|---|---|
| Kimlik doğrulama başarısız | .env'deki SYNC_ADMIN_EMAIL/PASSWORD'ü kontrol edin |
| Proje bulunamadı | /api/project-app-urls endpoint'ini doğrulayın |
| PDF'ler indirilmiyor | Storage izinlerini kontrol edin |
| Sync takıldı | Durumu temizlemek için --reset ile çalıştırın |
| Modül sync olmuyor | Tablonun var olduğunu ve veri içerdiğini kontrol edin |
Log Dosyaları
- Cron Çıktısı:
storage/logs/naks-sync.log - Uygulama Logu:
storage/logs/laravel.log
Files Reference
| File | Description |
|---|---|
app/Console/Commands/NaksSync.php |
Artisan command |
app/Services/NaksSyncService.php |
Multi-module sync service |
database/migrations/2025_01_07_000001_create_sync_states_table.php |
Migration |
app/Console/Kernel.php |
Cron schedule configuration |
API Endpoints Used
| Endpoint | Method | Description |
|---|---|---|
/api/login |
POST | Get Bearer token |
/api/project-app-urls |
GET | Get project list |
/api/{table}/read |
GET | Fetch records for each module |
Last Updated: January 2025