POSTERAPP_V1/phase1

449 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

yeni bir proje fikrim var. Bu projenin akisi hakkinda dusuncelerim var, ama teknolojiye karar veremedim. Projeyi anlatiyorum.
Bu proje postaci uygulamasi. Postaci telefonu ile bizim web sitemize giris yapar. kullanici adi ve passwordu ile giris yaptikdan sonra kendine ait dashboardu acilir.
Dashboard daki paneller = Yeni rota olustur, rotalarim, benim kutum, gecmis olacak.
Yeni rota olustur a tiklandiginda telefonun camerasina erisim izni istenecek. telefonun camerasiyla belge uzerindeki adres alinacak. kaydedilecek. kayittan sonra teyit edilecek. "adres (ornek sokak no 11 4552 derendingen) gibi. teyit sirasinda 2 buton olacak, devam, bitir.
Eger devam secenegi secilirse camera yeniden acilacak, yeni adresin oldugu belge taranacak, adres kaydedilecek. ve yeniden teyit etrani acilacak.
Eger bitir secenegi secilirse kaydedilen tum adresler listelenecek. ve uzerinde degisiklik yapilabilecek. Istenirse adres manuel olarak elle giris yapilarak duzenlenebilecek.
Kayit edilen adres listesinin altinda bir buton olacak, (rotayi optimize et). Bu secenek secildiginde kayit edilen tum adresler birbirine en yakin konum olacak sekilde siralanacak. Siralamadan sonra olusan yeni liste rotanin olusturuldugu tarih ile rotalarima kayit edilecek.
Eger dashboarddan Rotalarim secenegi secilirse optimize edilmis liste gosterilecek. Ve Suruse basla butonu olacak. Suruse basla secenegi secildiginde optimize edilmis adreslerin birinci sirasindaki adrese harita kordunasyonuna yonlendirme yapicalak. kullanici adrese ulasmasi icin harita uzerindeki konuma yonlendirilecek. Ayni zaman konum surekli takip edilecek. Eger konum ilk adrese ulasmissa yada kullanici web sayfasindan devam secenegine tiklarsa optimize edilmis listedeki ikinci konuma yonlendirilecek.
Bunlarin yaninda kullanici olarak belirlenen grupsefi de olmali. Kendine bagli olan kullanicinin olusturdugu adreslere ve konumuna erisebilmeli.
ve tabikide admin. Tum kullanicilari ve grupseflerini organize kontrol ve yardimi saglayabilmeli.
Bu projede kullanacağın teknoloji stack'ini belirlemek için önce ihtiyaçları belirleyelim:
Ana Gereksinimler:
Kullanıcı yönetimi (Postacı, Grup Şefi, Admin)
Kamera erişimi (Telefon kamerasıyla belge üzerindeki adresi taramak)
Adres işleme (OCR ile metin tanıma ve teyit mekanizması)
Rota optimizasyonu (Adresleri en kısa mesafeye göre sıralama)
Harita entegrasyonu (Konum takibi ve navigasyon yönlendirmesi)
Gerçek zamanlı takip (Postacı konumunu canlı olarak gösterme)
Yetkilendirme ve erişim seviyeleri (Admin, Grup Şefi, Postacı rollerine uygun erişim)
Mobil dostu arayüz (Postacıların web arayüzü üzerinden kolayca işlemleri yapabilmesi)
Teknoloji Seçimi
Projeni mobil dostu bir web uygulaması olarak geliştirmek mantıklı olur. Progressive Web App (PWA) ile çalışırsan, uygulamanın bir mobil uygulama gibi çalışmasını sağlayabilirsin.
Frontend (Kullanıcı Arayüzü)
React.js + Next.js: Hızlı, SEO dostu ve SSR desteği olan bir framework.
React Native (Eğer mobil app istiyorsan): Hem iOS hem de Android için native uygulama geliştirme.
Tailwind CSS veya Material UI: Modern ve hızlı tasarım bileşenleri.
Backend (İş Mantığı)
Node.js + Express.js (Hızlı ve REST API geliştirmek için uygun)
Django + FastAPI (Eğer Python tercih ediyorsan, OCR ve veri işleme için güçlü)
Firebase Authentication veya Keycloak (Kullanıcı yönetimi için)
PostgreSQL veya MongoDB (Veri saklama, adreslerin kaydı ve rota optimizasyonu için)
OCR ile Adres Okuma
Tesseract.js (Tarayıcı içinde OCR yapmak için)
Google Cloud Vision API veya AWS Textract (Daha güçlü ve hızlı OCR çözümü)
Rota Optimizasyonu
Google Maps API (Navigasyon ve mesafe hesaplama)
OpenRouteService API (Ücretsiz ve esnek alternatif)
GraphHopper veya OSRM (Açık kaynak yönlendirme çözümleri)
Konum Takibi & Navigasyon
Google Maps API veya Mapbox API (Postacının bulunduğu konumu canlı izleme)
Geolocation API (Tarayıcıdan konum verisi almak)
Gerçek Zamanlı İletişim
WebSockets veya Firebase Realtime Database (Grup Şefi'nin postacıları takip edebilmesi için)
MQTT (Mosquitto Broker) (Daha az bant genişliği kullanarak canlı konum takibi)
Hosting & Deployment
Linode, DigitalOcean, AWS veya Vercel (Backend & Web app barındırmak için)
Docker & Kubernetes (Eğer ölçeklenebilir bir sistem istiyorsan)
Proje Akışı
Giriş Ekranı → Kullanıcı (Postacı, Grup Şefi, Admin) giriş yapar.
Dashboard → Kullanıcının rolüne göre uygun paneller açılır.
Yeni Rota Oluştur
Kamera açılır ve belge taranır (OCR ile adres bilgisi çekilir).
Teyit ekranı gelir (Adresin doğru olup olmadığı sorulur).
Yeni belge taramak için Devam, işlemi bitirmek için Bitir butonu var.
Adresler kaydedilir ve manuel düzenlenebilir.
Rota Optimizasyonu
Kayıtlı adresler en kısa mesafeye göre sıralanır.
Optimize edilen rota "Rotalarım" sekmesine kaydedilir.
Rotalarım Ekranı
Optimize edilmiş liste gösterilir.
Sürüşe Başla butonuna basıldığında haritaya yönlendirilir.
Konum takibi başlar, her adres tamamlandığında otomatik olarak sonraki adres açılır.
Grup Şefi Paneli
Kendi ekibindeki postacıların rotalarını ve canlı konumlarını takip edebilir.
Admin Paneli
Tüm kullanıcıları yönetir, grupları oluşturur ve kontrol sağlar.
Alternatif Çözümler
Eğer sadece bir mobil uygulama istiyorsan React Native + Firebase kullanabilirsin.
Eğer web tabanlı olacaksa Next.js + Node.js öneririm.
Eğer konum takibi önemliyse, MQTT veya WebSockets ile daha verimli hale getirebilirsin.
1. Kullanıcı Yönetimi
Sistemde 3 farklı kullanıcı tipi olacak:
Postacı → Rota oluşturur, optimize eder, sürüş başlatır, haritaya yönlendirilir.
Grup Şefi → Kendisine bağlı postacıları ve rotalarını takip eder.
Admin → Sistemdeki tüm kullanıcıları ve grup yapılarını yönetir.
Kullanıcı Yetkilendirme
Kimlik Doğrulama:
Firebase Authentication (Eğer Google veya sosyal giriş istenirse)
Keycloak (Kurumsal kimlik doğrulama için)
Yetkilendirme Seviyeleri:
Postacı: Sadece kendi verilerine erişebilir.
Grup Şefi: Kendi ekibindeki postacıları yönetebilir.
Admin: Tüm sistem üzerinde kontrol sahibidir.
2. Dashboard ve Ana Akış
Dashboard'da 4 ana panel olacak:
Yeni Rota Oluştur
Rotalarım
Benim Kutum (Son teslimatlar, bildirimler vb.)
Geçmiş (Tamamlanan rotaların geçmiş kaydı)
3. Yeni Rota Oluştur Modülü
📌 Amaç: Postacı, belgelerden adres tarayarak yeni bir teslimat rotası oluşturur.
İşleyiş:
Kullanıcı "Yeni Rota Oluştur" butonuna tıklar.
Kamera erişimi izni istenir.
📸 Telefon kamerasıılır, belge taranır.
OCR ile adres (Örnek Sokak No: 11, 4552 Derendingen) çıkarılır.
Adres Teyit Ekranıılır:
Doğru mu? (İki buton: Devam | Bitir)
Eğer "Devam" seçilirse:
Yeni belge taranır.
Adres tekrar çıkarılır ve teyit ekranıılır.
Eğer "Bitir" seçilirse:
Kaydedilen adresler listelenir.
Kullanıcı manuel adres girişi yapabilir veya yanlış adresleri düzenleyebilir.
Liste tamamlandıktan sonra "Rotayı Optimize Et" butonuna basılır.
Adresler en kısa mesafe sırasına göre yeniden düzenlenir.
Yeni rota "Rotalarım" sekmesine kaydedilir.
Teknolojiler:
✅ Kamera ve OCR: Tesseract.js veya Google Cloud Vision
✅ Adres Saklama: PostgreSQL veya MongoDB
✅ Rota Optimizasyonu: Google Maps API veya OpenRouteService
4. Rotalarım Modülü
📌 Amaç: Postacı, oluşturduğu optimize edilmiş rotaları burada görür ve sürüş başlatabilir.
İşleyiş:
Kullanıcı "Rotalarım" sekmesini açar.
Kendi oluşturduğu rota listesi görünür.
Kullanıcı bir rotayı seçer ve "Sürüşe Başla" butonuna basar.
📍 Harita yönlendirmesi başlar:
Kullanıcı ilk adrese yönlendirilir.
Konum takip edilir (Google Maps veya OpenStreetMap üzerinden).
Kullanıcı adrese ulaştığında veya "Devam" butonuna bastığında sıradaki adrese yönlendirilir.
Tüm adresler tamamlandığında rota kapanır.
Teknolojiler:
✅ Harita Entegrasyonu: Google Maps API veya Mapbox
✅ Konum Takibi: Geolocation API + WebSockets
5. Konum Takip ve Grup Şefi Paneli
📌 Amaç: Grup Şefi, postacıların rotalarını ve canlı konumlarını takip eder.
İşleyiş:
Grup Şefi, kendi ekibindeki postacıları liste halinde görür.
Postacının anlık konumu harita üzerinde gösterilir.
Rotası hangi aşamada? (Kaçıncı adrese ulaşıldı, kalan adres sayısı vs.)
İlgili rotayı detaylı inceleme:
Tüm duraklar gösterilir.
"Canlı Konumunu İzle" seçeneği sunulur.
Teknolojiler:
✅ Canlı Konum: WebSockets veya Firebase Realtime Database
✅ Harita Görselleştirme: Google Maps API veya Leaflet.js
6. Admin Paneli
📌 Amaç: Admin, tüm sistemde kullanıcıları ve rotaları yönetebilir.
Özellikler:
Kullanıcı Yönetimi
Postacı ve Grup Şefi ekleme/çıkarma
Yetkilendirme ve grup atamaları
Sistem Yönetimi
Rotaların durumlarını takip etme
Sistem loglarını inceleme
İstatistikler ve Analiz
Postacıların teslim süreleri
Hangi rotaların daha verimli olduğu
Günlük teslimat verileri
Teknolojiler:
✅ Admin Paneli UI: React + Material UI
✅ Veri Saklama: PostgreSQL veya Firebase
✅ Kullanıcı Rolleri: Keycloak veya Firebase Auth
7. Kullanıcı Rolleri ve Erişim Seviyeleri
📌 Amaç: Her kullanıcının yetkisi dahilinde işlem yapmasını sağlamak.
Kullanıcı Tipi Yetkiler
Postacı Kendi rotasını oluşturur, optimize eder, sürüş başlatır.
Grup Şefi Kendi ekibindeki postacıları takip eder, adres ve konumlarını izleyebilir.
Admin Tüm sistem üzerinde yetkilidir, kullanıcıları yönetir.
8. Ek Özellikler
✅ Bildirimler: Postacı adres teslimatını bitirdiğinde Grup Şefi'ne bildirim gidebilir.
✅ Offline Mod: Eğer internet bağlantısı yoksa adresler yerel olarak kaydedilip sonra yüklenebilir.
✅ Raporlama: Teslim edilen adres sayıları, ortalama teslim süresi gibi veriler toplanabilir.
Sonuç: Teknoloji Stack Önerisi
Bölüm Teknoloji
Frontend React.js (Web) veya React Native (Mobil)
Backend Node.js + Express veya FastAPI (Python)
Veritabanı PostgreSQL veya Firebase Realtime DB
Kullanıcı Yönetimi Firebase Auth veya Keycloak
Harita API Google Maps API veya OpenStreetMap
Konum Takibi WebSockets + Geolocation API
Rota Optimizasyonu Google Maps veya OpenRouteService
Teknoloji Stack (Ücretsiz ve Self-Hosted Çözümler)
Bölüm Teknoloji Açıklama
Frontend React.js + Next.js Hızlı, SEO dostu, SSR destekli
Mobil Alternatif React Native Eğer ileride mobil uygulama istenirse
Backend FastAPI (Python) Hafif, hızlı ve async destekli API
Veritabanı PostgreSQL (Self-hosted) Ücretsiz ve Linode üzerinde barındırılabilir
Kimlik Doğrulama Keycloak (Self-hosted) Open-source kimlik doğrulama çözümü
OCR (Adres Okuma) Tesseract.js (Self-hosted) Ücretsiz ve açık kaynak OCR kütüphanesi
Harita & Navigasyon OpenStreetMap + OSRM Ücretsiz ve self-hosted yönlendirme API'si
Konum Takibi WebSockets + Geolocation API Ücretsiz, canlı konum güncellenmesi için
Rota Optimizasyonu GraphHopper (Self-hosted) Ücretsiz açık kaynak optimizasyon API'si
Bildirimler Firebase Cloud Messaging (Ücretsiz) Mobil ve web push bildirimleri için
Depolama MinIO (S3 Alternatifi) Self-hosted dosya saklama (eğer gerekirse)
Detaylı Akış
1. Kullanıcı Yönetimi
Kimlik doğrulama: Keycloak ile kullanıcı girişleri yönetilecek.
Roller: Postacı, Grup Şefi, Admin yetkileri olacak.
JWT Token Kullanımı: API güvenliği için.
2. Yeni Rota Oluştur (Adres Okuma ve Kaydetme)
Postacı kamera açar → Tesseract.js OCR ile belge üzerindeki adres okunur.
Teyit ekranıılır → Adres doğru mu?
Devam edilirse → Yeni belge taranır ve adres listesine eklenir.
Bitir seçilirse → Kaydedilen adresler listelenir ve manuel düzenlenebilir.
"Rotayı Optimize Et" butonuna basıldığında → GraphHopper kullanılarak en iyi sıra oluşturulur.
3. Rotalarım (Optimizasyon Sonrası Gösterim)
Kullanıcı optimize edilmiş rotalarını burada görür.
Rotalardan birine tıklayarak "Sürüşe Başla" butonuna basar.
İlk adrese yönlendirme yapılır.
4. Harita ve Navigasyon (Ücretsiz Çözüm)
Google Maps API yerine OpenStreetMap ve OSRM kullanılacak.
Kullanıcının mevcut konumu Geolocation API ile alınır ve OSRM yönlendirme sağlar.
Harita üzerinde anlık olarak güncellenen konum gösterilir.
Kullanıcı adresi tamamladığında sıradaki konuma yönlendirilir.
5. Grup Şefi Paneli (Postacıları Takip Etme)
Harita üzerinde postacıların canlı konumu gösterilir.
Grup Şefi, hangi postacının hangi adreste olduğunu görebilir.
Rota değişikliği veya acil yönlendirme yapabilir.
6. Admin Paneli (Genel Yönetim)
Tüm postacılar ve grup şeflerini yönetir.
Hangi postacının hangi adresleri ziyaret ettiğini görebilir.
Sistemin genel loglarını inceleyebilir.
Self-Hosted Sistemleri Linode Üzerinde Çalıştırma
Veritabanı: PostgreSQL
Kimlik Doğrulama: Keycloak
OCR Servisi: Tesseract.js veya self-hosted Tesseract OCR
Rota Optimizasyonu: GraphHopper (Docker ile Linode üzerinde çalıştırılabilir)
Harita API & Navigasyon: OpenStreetMap + OSRM
Gerçek Zamanlı Konum Takibi: WebSockets
Backend API: FastAPI (Linode sunucusunda çalıştırılacak)
Postacı Uygulaması - Yol Haritası ve Bölümler
Bu yol haritası, projeyi modüllere ayırarak geliştirme sürecini daha sistematik hale getirecek. Her modül bağımsız olarak test edilebilir ve geliştirilebilir. 🚀
📌 Bölüm 1: Altyapı Kurulumu ve Temel Yapı
⏳ Süre: 1-2 Hafta
✅ 1.1 Linode Sunucu Kurulumu
Linode üzerinde yeni bir Ubuntu 22.04 LTS sunucusu oluştur.
SSH bağlantısını yapılandır ve güvenlik önlemlerini al.
Docker ve Docker Compose yükle (Self-hosted servisleri konteyner içinde çalıştırmak için).
PostgreSQL kurulumu (Kimlik doğrulama ve adres saklama için).
Keycloak kurulumu ve yapılandırması (JWT tabanlı kimlik doğrulama için).
✅ 1.2 Backend API Yapısı
FastAPI kurulumu ve temel yapı
Swagger UI entegrasyonu (API dökümantasyonu için)
PostgreSQL bağlantısını ayarla
✅ 1.3 Kimlik Doğrulama (User Management)
Keycloak ile kullanıcı yönetimi entegrasyonu
Postacı, Grup Şefi ve Admin rolleri oluştur
JWT token doğrulama mekanizmasını geliştir
📌 Bölüm 2: Kullanıcı Arayüzü ve Dashboard
⏳ Süre: 2-3 Hafta
✅ 2.1 React.js Frontend Kurulumu
Next.js proje kurulumu
Tailwind CSS veya Material UI ile tasarım oluştur
React Query veya SWR ile API çağrıları yönet
✅ 2.2 Kullanıcı Girişi & Yetkilendirme
Kullanıcı giriş ve kayıt ekranlarını oluştur
Yetkilendirme sonrası Dashboarda yönlendirme ekle
✅ 2.3 Dashboard ve Paneller
Dashboard tasarımını yap
Yeni Rota Oluştur, Rotalarım, Benim Kutum, Geçmiş sekmelerini ekle
📌 Bölüm 3: Adres Tanıma ve Rota Optimizasyonu
⏳ Süre: 2-3 Hafta
✅ 3.1 Kamera & OCR ile Adres Okuma
Tarayıcı veya mobil kamera erişimi sağla
Tesseract.js veya OpenCV ile OCR entegrasyonu yap
OCR sonrası kullanıcıya adres doğrulama ekranı göster
✅ 3.2 Adres Yönetimi
Adresleri veritabanına kaydet
Manuel adres girişi ekle (OCR hataları için düzeltme opsiyonu)
✅ 3.3 Rota Optimizasyonu
GraphHopper veya OSRM kullanarak mesafe bazlı sıralama yap
Optimize edilen rotayı "Rotalarım" sekmesine kaydet
📌 Bölüm 4: Harita ve Konum Takibi
⏳ Süre: 3-4 Hafta
✅ 4.1 Harita Entegrasyonu
Google Maps yerine OpenStreetMap API kullan
React Leaflet.js ile harita gösterimi ekle
Haritada optimize edilen rotaları işaretle
✅ 4.2 Gerçek Zamanlı Konum Takibi
Postacıların konumlarını almak için Geolocation API kullan
WebSockets ile canlı konum verisini backende gönder
Grup Şefi panelinde postacıların hareketlerini harita üzerinden göster
✅ 4.3 Navigasyon ve Yönlendirme
Sürüşe Başla butonuna basıldığında ilk adrese yönlendir
Kullanıcı ilk adrese ulaştığında veya "Devam" seçtiğinde bir sonraki konuma yönlendir
📌 Bölüm 5: Grup Şefi ve Admin Paneli
⏳ Süre: 2-3 Hafta
✅ 5.1 Grup Şefi Paneli
Bağlı olduğu postacıları listele
Hangi postacı hangi adrese gidiyor, kaç adres kaldı gibi detayları göster
Harita üzerinde postacı konumlarını canlı göster
✅ 5.2 Admin Paneli
Sistemdeki tüm kullanıcıları listele
Yeni kullanıcı ekleme/çıkarma mekanizması
Hangi grup şefine hangi postacılar atanmış, bunları yönetebilme
📌 Bölüm 6: Son Testler ve Yayına Alma
⏳ Süre: 2-3 Hafta
✅ 6.1 Backend Testleri
API testleri için Postman koleksiyonu oluştur
Hataları ve eksik endpointleri tamamla
✅ 6.2 Frontend Testleri
Cypress veya Jest ile UI testleri yap
Mobil cihazlarda test et (PWA olarak çalışmalı)
✅ 6.3 Yayınlama ve Deployment
Linodeda backend için Nginx reverse proxy yapılandır
React/Next.js frontendi Linode sunucusunda çalıştır
SSL sertifikaları ekle ve HTTPS ayarlarını yap
🎯 Genel Zaman Çizelgesi
Aşama Süre
1. Altyapı Kurulumu 1-2 Hafta
2. Kullanıcı Arayüzü & Dashboard 2-3 Hafta
3. Adres Tanıma & Rota Optimizasyonu 2-3 Hafta
4. Harita & Konum Takibi 3-4 Hafta
5. Grup Şefi & Admin Paneli 2-3 Hafta
6. Testler & Yayına Alma 2-3 Hafta
Toplam Tahmini Süre 12-15 Hafta (Yaklaşık 3-4 Ay)