MİMARİ & TASARIM KARARLARI
Bölüm 1 — Neden modüler monolit ve nasıl inşa edildi
Mimari önceden tasarlanmadı — ortaya çıktı. Veritabanı her modül inşa edildikçe gelişti. Framework seçimleri pragmatik nedenlerle yapıldı: geliştirme hızı, GUI işini ortadan kaldıran bileşen kütüphaneleri ve tek bir Mac Mini üzerinden fabrika zemininde çalışabilme yeteneği. Bu doküman neyin seçildiğini, neden seçildiğini ve ödün vermelerin ne olduğunu kaydeder.
MONOLİT
+ React
→ Postgres
API Yolu
İÇİNDEKİLER
1. MİMARİ: MODÜLER MONOLİT
Sistem bir Modüler Monolit’tir — açıkça ayrılmış dahili modüllere sahip, tek bir veritabanını paylaşan tek bir uygulama. Mikroservis değil. Geleneksel monolit değil. Aradaki ideal nokta.
Geleneksel Monolit
Tek kod tabanı, modül ayrımı yok. Her şey iç içe. Bu değil.
Modüler Monolit ← BU
Tek uygulama, net modül sınırları, paylaşılan veritabanı. 10–12 makineli ve sınırlı eş zamanlı kullanıcılı bir fabrika için doğru ölçekte.
Mikroservisler
Ayrı veritabanlarına sahip bağımsız servisler. Bu ölçek için aşırı. Ağ gecikmesi, dağıtık işlem karmaşıklığı ve operasyonel yük ekler.
Neden Mikroservis Değil?
- Ölçek gerektirmiyor. 10–12 makine, düzinelerce kullanıcı, günde yüzlerce (milyonlarca değil) işlem. Tek bir proses bunu rahatlıkla kaldırır.
- Modüller arası ACID işlemler. Sipariş oluşturulduğunda malzemeler hesaplanır, iş kartları üretilir, stok tahsis edilir — hepsi tek bir veritabanı işleminde. Mikroservislerle bu, dağıtık saga kabusu olur.
- Tek geliştirici. Mikroservisler deployment, izleme, service mesh ve servisler arası iletişimi yönetmek için bir ekip gerektirir. Solo geliştiricinin basitliğe ihtiyacı vardır.
- Fabrika ağı, bulut değil. Bu, Kubernetes kümesinde değil, fabrika zeminindeki Mac Mini’de çalışır. Tek proses, tek veritabanı, tek deployment hedefi.
Ödün verme bilinmektedir: Veritabanı çöktüğünde her şey çöker. Tüm modüller tek bir SQLite/PostgreSQL örneğini paylaşır — tek bir arıza noktası vardır. Yerinde donanıma sahip bir fabrika ERP’si için bu kabul edilebilir bir ödün vermedir.
2. TEKNOLOJİ STACK’İ
Backend
| Katman | Teknoloji | Versiyon | Neden |
|---|---|---|---|
| Framework | FastAPI | ≥0.110 | Async Python, otomatik OpenAPI dokümantasyonu, dahili dependency injection |
| Sunucu | Uvicorn | ≥0.27 | ASGI sunucu, async + WebSocket desteği |
| ORM | SQLAlchemy 2.0 | ≥2.0.25 | Veritabanı bağımsız — aynı kod SQLite ve PostgreSQL’de çalışır |
| Validasyon | Pydantic 2 | ≥2.6 | Tip güvenli istek/yanıt doğrulaması, otomatik JSON serileştirme |
| Auth | python-jose + passlib | — | JWT token (HS256), bcrypt şifre hashleme, 12s erişim / 7g yenileme |
| Veritabanı (dev) | SQLite | — | Sıfır konfigurüasyon, dosya tabanlı, tek sunucu deployment için ideal |
| Veritabanı (prod) | PostgreSQL 15 | 15.x | Bağlantı havuzu (20 temel + 40 taşma), üretim düzeyi |
| QR Kod | qrcode + Pillow | ≥7.4 | Malzeme takibi — her sepet/makaraya basılı QR etiketi |
| Yazdırma | reportlab + socket | — | Fabrika ağı üzerinden doğrudan Epson termal yazıcı iletişimi |
Frontend
| Katman | Teknoloji | Versiyon | Neden |
|---|---|---|---|
| Framework | React | 19.1 | Bileşen tabanlı UI, geniş ekosistem |
| Dil | TypeScript | 5.x | Tüm frontend’te tip güvenliği |
| UI Kütüphanesi | Ant Design Pro 6 | 6.0 | Kurumsal bileşenler — tablolar, formlar, layoutlar, grafikler kutudan çıkar |
| Build | UmiJS Max | 4.0.7 | Ant Design Pro’nun build sistemi — yönlendirme, durum yönetimi, istek işleme |
| Grafikler | ECharts | 6.0 | Üretim panoları, stok projeksiyonları, makine kullanımı |
| Sürükle Bırak | react-dnd | 16.x | Kablo tasarım playground’u, palet düzenleme |
Neden Ant Design Pro? En önemli tek framework seçimi. Kablo fabrikası ERP’si %80 tablo, form ve CRUD ekranıdır. Ant Design Pro bunların hepsini dahili Türkçe yerelleshtirme, responsive layoutlar, rol tabanlı menüler ve karanlık mod ile üretim hazır olarak sunar. Bunları sıfırdan yazmak aylarca eklerdi.
3. TASARIM KURALLARI
Kural 1: Türkçe-Öncelikli Arayüz
Her UI etiketi, her hata mesajı, her bildirim Türkçe. Fabrika operatörleri İngilizce konuşmaz. Ant Design yerel ayarı Türkçe’ye kilitli. AI promptları Türkçe.
Kural 2: Her Şeye QR Kod
Fabrikada hareket eden her fiziksel nesne girişte QR kod basılır. Ham bakır sepetleri, kalaylı bakır sepetleri, makaralar, bitmiş kablolar — hepsi taranabilir. QR kod, o nesnenin sistemdeki tüm geçmişine bağlantı sağlar.
Kural 3: Üç Kullanıcı Rolü, Fazlası Yok
| Rol | Erişim | Arayüz | Cihaz |
|---|---|---|---|
| Süper Admin | Her şey — ham veritabanı sorguları, zorla silme, AI ayarları dahil | Masaüstü | PC |
| Lab Kullanıcısı | Test standartları, test sonuçları, malzeme denetimi, kalite kontrol | Masaüstü | PC |
| Operatör | Üretim oturumları, malzeme tarama, makineye özel görünümler | Mobil-öncelikli | Telefon/Tablet |
Kural 4: Tasarım Üretimi Yönlendirir
Kablo tasarımı tek doğruluk kaynağıdır. Bir tasarım Cable Playground’da oluşturulduğunda, tüm üretim akışını kodlar — her makine adımı, her malzeme gereksinimi, her test. Siparişler tasarımlara referans verir. İş kartları tasarımlardan üretilir. Hiçbir şey sipariş başına manuel konfigure edilmez.
Kural 5: Erken Optimizasyon Yok
Geliştirmede SQLite. Gerektiğinde PostgreSQL. Ölçülmüş bir performans problemi olana kadar Redis cache yok. Senkron işlemenin yetersiz olduğu kanıtlanana kadar mesaj kuyruğu yok. Çalışan en basit şeyi inşa et, ölç, sonra optimize et.
4. API TASARIMI
Backend, port 8000’de çalışan tek bir FastAPI uygulamasına monte edilmiş 25’ten fazla router grubu sunar. Her endpoint aynı deseni izler:
@router.get("/endpoint") async def get_something( db: Session = Depends(get_database), # DB oturumu enjekte edilir current_user: User = Depends(get_current_user) # Auth enjekte edilir ): # İş mantığı burada return result
Temel Desenler
- Her şey için dependency injection. Veritabanı oturumları
Depends(get_database), kimlik doğrulamaDepends(get_current_user), rol kontrolleriDepends(require_super_admin). Global state yok. - Validasyon için Pydantic şemaları. Her istek gövdesi ve yanıtın tip güvenli şeması var. Model başına Create, Update ve Response varyantları.
- İş mantığı için servis katmanı. Karmaşık hesaplamalar (malzeme gereksinimleri, iş kartı üretimi, stok projeksiyonları) route handler’larda değil
services/’da yaşar. - Fabrika ağı CORS. CORS konfigürasyonu, 192.168.x.x ve 10.0.0.x fabrika ağlarındaki herhangi bir cihazdan HTTP ve HTTPS erişimini desteklemek için 1000’den fazla origin kombinasyonu üretir.
5. VERİTABANI STRATEJİSİ
Veritabanı önceden tasarlanmadı. Her modül inşa edildikçe organik olarak büyüdü. Bu kasıtlıdır — alan, anlaşılmadan önce bir şema tasarlamak için çok karmaşıktı.
Geliştirme
Üretim
Gerekirse
SQLAlchemy ORM, aynı Python kodunun her iki veritabanına karşı çalışmasını sağlar. Geçiş yalnızca DATABASE_URL ortam değişkenini değiştirmeyi gerektirir.
Neden Alembic değil? Şemanın hızla geliştiği tek geliştiricili bir sistem için, IF NOT EXISTS korumalarıyla elle yazılmış migration scriptleri, otomatik üretilen migration’lardan daha basit ve öngörülebilirdir.
6. FRONTEND MİMARİSİ
Frontend, Ant Design Pro ile inşa edilmiş, rol tabanlı menüler aracılığıyla tüm modüllere hizmet veren tek bir React uygulamasıdır.
src/pages/ ├── Dashboard/ # Ana Panel — genel bakış + AI sohbet ├── Lab/ # Laboratuvar — testler, malzeme denetimi ├── Teknik/ # Teknik — kablo tasarımı, makineler, standartlar ├── Siparis/ # Sipariş — siparişler, müşteriler ├── Production/ # Üretim — planlama, makine arayüzleri ├── Stok/ # Stok — projeksiyonlar, ürün stoğu ├── Hammadde/ # Hammadde — malzeme girişi, siparişler └── Admin/ # Admin — yazıcılar, kullanıcılar, AI ayarları
7. AI ENTEGRASYONU
Ayrı bir Python servisi, panodan erişilebilen AI destekli arama ve sohbet sağlar. AI, 92 API endpoint aracı üzerinden tüm veritabanına salt okunur erişime sahiptir.
Çok Sağlayıcılı
Düzinelerce API sağlayıcısı destekleniyor. Temel sınıf ve model kayıt sistemi ile sağlayıcı-bağımsız mimari.
Araç Tabanlı Erişim
AI veritabanını doğrudan sorgulamaz. Frontend’in kullandığı aynı REST API endpointlerini çağırır, ancak özel salt okunur servis hesabıyla.
Denetim Günlüğü
Her AI sorgusu, her araç çağrısı, her yanıt ai_audit_logs tablosuna kaydedilir. AI’nın neye eriştiğinin tam izlenebilirliği.
Neden salt okunur? Bir fabrikada üretim verilerini değiştirebilen bir AI asistanı sorumluluktur. Bir halüsinasyon sonucu malzeme silme üretimi durdurabilir. AI arama yapabilir, özetleyebilir ve soruları yanıtlayabilir — ancak şimdilik hiçbir şey oluşturamaz, güncelleyemez veya silemez.
8. AĞ & DEPLOYMENT
Sistem, fabrika zeminindeki bir Mac Mini’de çalışır ve yerel ağdaki tüm cihazlara erişilebilir.
Operatörler QR kod taramak ve üretim kaydetmek için telefon/tabletlerde mobil Chrome kullanır. Yöneticiler sipariş yönetimi, tasarım ve raporlama için masaüstü tarayıcıları kullanır.
9. EVRİM YOLU
Mimari, ölçek gerektirdiğinde planlı bir evrim yoluna sahiptir:
MODÜLER
MONOLİT
Mevcut
VERİTABANI
AYRIMI
Modül başına DB
SERVİS
ÇIKARIMI
Kritik modüller
GERÇEK
MİKROSERVİS
Sadece gerekirse
Her aşama bir yedek planıdır, hedef değil. Modüler monolit, belirli ölçülmüş problemler bir sonraki aşamayı gerektirmedikçe mimari olarak kalmalıdır. Bozuk olmayanı düzeltme.