Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ tamamlandı. Ardından `main` üzerinde cila turları (fixroll), hoşgeldin
senkronu yapıldı. **1.0.0**, Cycle 9 akademik teslim sürümüdür
(`pyproject.toml` ile hizalı).

**Final metrikler (1.0.0):** 16 router · 67 endpoint · 15 ORM tablo ·
4 Alembic migration · 4 rol · 6 demo hesap · 17 bitki türü ·
**586 backend pytest passed** (+64 schemathesis fuzz lokalde skip) ·
**74 frontend Vitest** · coverage %95 (eşik %80) · ruff+format temiz ·
bandit medium+ 0.

---

### REBUILD Faz 2-6 + 81-il temizliği (19-22 May 2026, ✅)
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,9 @@ gözlem modu olarak konumlandırıldı. Detaylar: `REBUILD_ROADMAP.md`.

## 📊 Proje Metrikleri

> **Güncel (sürüm 1.0.0):** 16 router · **66 endpoint** · 15 ORM tablo · 4 Alembic migration ·
> **650 backend** (586 + 64 fuzz) + **59 frontend** test · coverage %95 (eşik %80) ·
> **3 CI workflow** (`ci` + `security` + `a11y`) · çiftçi-odaklı demo seed (5 kullanıcı / 3 çiftlik / 6 tarla).
> **Güncel (sürüm 1.0.0):** 16 router · **67 endpoint** · 15 ORM tablo · 4 Alembic migration · 4 rol ·
> **586 backend** pytest passed (+64 schemathesis fuzz lokalde skip) + **74 frontend** Vitest · coverage %95 (eşik %80) ·
> **3 CI workflow** (`ci` + `security` + `a11y`) · çiftçi-odaklı demo seed (6 demo hesap / 3 çiftlik / 6 tarla).

Aşağıdaki tablo **Cycle 6 sonu tarihsel snapshot'ıdır** — REBUILD pivotunda ölçek
ulusal (81 il) hedeften çiftçi-odaklıya çekildi; güncel değerler için yukarıdaki bloğa bakın.
Expand Down
34 changes: 25 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
[![A11y](https://github.com/Ohualtex/Smart_Farming_Data_Analysis_Platform/actions/workflows/a11y.yml/badge.svg)](https://github.com/Ohualtex/Smart_Farming_Data_Analysis_Platform/actions/workflows/a11y.yml)
![Python 3.12+](https://img.shields.io/badge/Python-3.12+-blue)
![Coverage 95%](https://img.shields.io/badge/Coverage-95%25-brightgreen)
![Tests](https://img.shields.io/badge/Tests-650%20backend%20%2B%2059%20frontend-success)
![Tests](https://img.shields.io/badge/Tests-586%20backend%20%2B%2074%20frontend-success)
![Version 1.0.0](https://img.shields.io/badge/version-1.0.0-blue)
![License MIT](https://img.shields.io/badge/license-MIT-green)

Expand All @@ -29,6 +29,7 @@
- [Test ve Kalite](#-test-ve-kalite)
- [Geliştirme](#-geliştirme)
- [Production Deploy](#-production-deploy)
- [Bilinen Sınırlamalar](#-bilinen-sınırlamalar)
- [Proje Durumu](#-proje-durumu)
- [Anahtar Dokümanlar](#-anahtar-dokümanlar)
- [Ekip & Lisans](#-ekip)
Expand Down Expand Up @@ -137,7 +138,7 @@ Sistem dört kullanıcı türünü destekler — her rol kendi dashboard görün
└─ APScheduler (her gece hava fetch · haftalık sensör arşivleme)
```

**Ölçek:** 16 router · **66 endpoint** · 15 ORM tablo · 4 Alembic migration · çiftçi-odaklı demo seed (birkaç çiftçi · çoklu çiftlik/tarla · 17 bitki türü).
**Ölçek:** 16 router · **67 endpoint** · 15 ORM tablo · 4 Alembic migration · 4 rol (farmer/developer/overseer/admin) · 6 demo hesap · çiftçi-odaklı demo seed (çoklu çiftlik/tarla · 17 bitki türü).

> **Frontend notu:** Üretimde Vite bundle servis edilmez — FastAPI `frontend/` kökünü `/dashboard` altına mount eder, tarayıcı ham ES modüllerini (`src/main.js` + `src/lib/*`) ve Chart.js/Leaflet'i CDN'den yükler. Vite yalnızca yerel geliştirme (`:5173` proxy) ve test/build aracıdır.

Expand All @@ -151,7 +152,7 @@ Sistem dört kullanıcı türünü destekler — her rol kendi dashboard görün
app/
├── main.py # FastAPI app: middleware + router include + static mount
├── config.py # pydantic-settings; production fail-fast guard'lar
├── routers/ # 16 router · 66 endpoint (farms, fields, sensors, irrigation, …)
├── routers/ # 16 router · 67 endpoint (farms, fields, sensors, irrigation, …)
├── services/ # iş mantığı (weather, fertilizer, sensor_archiver, report, mqtt, …)
├── ml/ # irrigation_model (RandomForest) · plant_disease_model · eval
├── models/models.py # 15 SQLAlchemy ORM tablosu
Expand All @@ -160,8 +161,8 @@ app/
└── tasks/scheduler.py # APScheduler cron işleri
frontend/
├── index.html # markup (inline style/script yok)
├── src/main.js # SPA giriş noktası
├── src/lib/*.js # 8 modül (api, router, map, charts, render, skeleton, utils, ui_helpers)
├── src/main.js # SPA giriş noktası (264 satır — modüllere bölündü)
├── src/lib/*.js # 11 modül (api, router, map, charts, render, skeleton, utils, ui_helpers, session, nav, filiz)
└── src/styles/*.css # 10 modül (variables → … → welcome → filiz → theme)
alembic/versions/ # 4 migration (initial → aggregate → RBAC → FK index)
database/ # seed_data.py · turkey_data.py · sfdap_schema.sql (DDL dump)
Expand Down Expand Up @@ -199,8 +200,8 @@ Hatalar tutarlı **SFDAPError zarfı** ile döner: `{error_code, message, detail

| Kategori | Değer | Komut |
|:--|:--|:--|
| Backend test | **650** (586 + 64 Schemathesis fuzz) | `make test` |
| Frontend test | **59** (Vitest + jsdom) | `cd frontend && npm test` |
| Backend test | **586** pytest passed (+64 Schemathesis fuzz, lokalde skip edilebilir) | `make test` |
| Frontend test | **74** (Vitest + jsdom) | `cd frontend && npm test` |
| Coverage | **%95** (CI eşiği %80) | `make test` |
| Lint + format | Ruff temiz (17 kural grubu) | `make lint && make format` |
| Source security | bandit (medium+) → 0 issue | `make audit` |
Expand Down Expand Up @@ -254,10 +255,25 @@ docker compose exec api alembic upgrade head # Migration uygula

---

## ⚠️ Bilinen Sınırlamalar

Akademik kapsamlı bir teslim olduğu için bazı yetenekler bilinçli olarak basitleştirilmiş veya kapsam dışı bırakılmıştır:

- **Bitki hastalığı modeli demo seviyesinde:** ONNX CNN çalıştırma yolu hazırdır, ancak depo ile eğitilmiş bir model dosyası gelmez. Model bulunmazsa tespit, Pillow tabanlı HSV renk-analizi **sezgisel (heuristic)** moduna düşer — üretim doğruluğu garanti edilmez.
- **Sulama modeli sentetik/demo veriyle eğitilmiştir:** `RandomForestRegressor` (n_estimators=100, max_depth=10) gerçek tarla geçmişiyle yeniden eğitilmeden saha kararı için kullanılmamalıdır.
- **Pazar/fiyat entegrasyonu yok:** Ürün fiyatı, hal/borsa verisi veya ekonomik karar desteği kapsam dışıdır.
- **Tek-makine deploy:** docker compose tek host içindir; yatay ölçekleme, yük dengeleme veya yönetilen veritabanı (managed DB) yapılandırması içermez.
- **Hava durumu API key opsiyonel:** OpenWeatherMap key tanımlı değilse sistem demo/sentetik hava verisiyle çalışır.
- **Demo hesaplar yalnız yerel kullanım içindir:** Tüm seed hesaplarının şifresi ortaktır (`123456`) ve production'da kullanılmamalıdır.
- **Gerçek IoT donanımı dahil değildir:** Sensör akışı `paho-mqtt` ile desteklenir, ancak depo sentetik/seed okumalarla gelir; fiziksel cihaz entegrasyonu kullanıcıya bırakılmıştır.

---

## 📋 Proje Durumu

- **Sürüm:** 1.0.0 (Cycle 9 — akademik teslim)
- **Branch akışı:** `rebuild` sprint'i `main`'e merge edildi; güncel polish çalışması feature branch'lerde (örn. `feature/welcome-screen`) yürür ve PR ile `main`'e alınır.
- **Sürüm:** 1.0.0 (Cycle 9 kapandı — 7 Haziran 2026, akademik teslim)
- **Son eklenenler:** Frontend tema (light/dark mavi-yeşil), rol-duyarlı görünürlük ve tema-duyarlı grafikler (PR #39–42 merged).
- **Branch akışı:** `rebuild` sprint'i `main`'e merge edildi; polish çalışmaları feature branch'lerde yürür ve PR ile `main`'e alınır.
- **Yol haritası & geçmiş:** [`docs/REBUILD_ROADMAP.md`](docs/REBUILD_ROADMAP.md) · cycle bazlı görev tablosu [`projeakisi.md`](projeakisi.md)

---
Expand Down
2 changes: 1 addition & 1 deletion database/seed_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
ve sunum demosu için yeterli küçük bir veri seti üretir.

Üretilen:
- 5 kullanıcı: admin, gözetmen (overseer) + 3 çiftçi (ahmet/ayşe/mehmet)
- 6 kullanıcı: admin, gözetmen (overseer), geliştirici (developer) + 3 çiftçi (ahmet/ayşe/mehmet)
- 3 çiftlik (farklı bölgeler) · 6 tarla
- Tarla başına 1 sensör + ~15 diurnal toprak nemi okuması
- Çiftlik başına hava durumu kayıtları
Expand Down
46 changes: 28 additions & 18 deletions docs/FINAL_REPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

**Tek satır:** SFDAP, sensör ve hava durumu verilerini ML modelleriyle birleştirerek çiftçilere sulama, gübreleme ve bitki sağlığı önerileri sunan kapsamlı bir veri analizi ve karar destek platformudur.

**Ölçek:** Çiftçi-odaklı demo seed — 5 kullanıcı (3 çiftçi + admin + gözetmen), 3 çiftlik (farklı bölgeler), 6 tarla, 6 sensör, ~90 sensör okuması, hava/sulama/hastalık/toprak/uyarı kayıtları. (Üretim ölçeği kullanıcı sayısıyla doğrusal büyür; sistem 81-il "ulusal" iddiasından vazgeçti.)
**Ölçek:** Çiftçi-odaklı demo seed — 6 kullanıcı (3 çiftçi + admin + gözetmen + geliştirici), 3 çiftlik (farklı bölgeler), 6 tarla, 6 sensör, ~90 sensör okuması, hava/sulama/hastalık/toprak/uyarı kayıtları. (Üretim ölçeği kullanıcı sayısıyla doğrusal büyür; sistem 81-il "ulusal" iddiasından vazgeçti.)

## 2. Hedefler ve Kapsam

Expand Down Expand Up @@ -120,16 +120,16 @@ eyleme yönelik akış yok). Karar: "81 il / ulusal bakanlık paneli" çerçeves
zaman (fertilizer), komşulara göre durum (admin/gözetmen analytics), haberim olur mu
(bildirim çanı). **Geri-dönüş güvencesi:** `v0.9.0-pre-rebuild` tag'i.

**Metrikler (güncel):** pytest **650** (586 + 64 fuzz) · Vitest **59** · coverage %95 (eşik %80) ·
ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı / 3 çiftlik / 6 tarla).
**Metrikler (güncel):** pytest **586** passed (+64 schemathesis fuzz lokalde skip) · Vitest **74** · coverage %95 (eşik %80) ·
ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (6 demo hesap / 3 çiftlik / 6 tarla).

## 4. Mimari

> 🚧 **TODO Cycle 9 — Miraç:** `docs/architecture.md`'den Mermaid diyagramları + açıklama paragrafları aktar.

**Üst düzey:**
- **Frontend katmanı:** Vanilla JS ESM SPA — `index.html` (markup) + `src/main.js` + `src/lib/*.js` (8 modül) + `src/styles/*.css` (10 modül); üretimde ham ESM + CDN servis edilir, Vite yalnız dev/build aracıdır
- **API katmanı:** FastAPI Gateway → 16 router × 66 endpoint (REBUILD sonrası: dashboard/fields/onboarding router'ları + CRUD + RBAC user mgmt eklendi)
- **API katmanı:** FastAPI Gateway → 16 router × 67 endpoint (REBUILD sonrası: dashboard/fields/onboarding router'ları + CRUD + RBAC user mgmt eklendi)
- **İş katmanı:** Servisler (`weather_service`, `fertilizer_service`, `mqtt_listener`, `sensor_archiver`, `report_service`, `data_quality`)
- **ML katmanı:** RandomForest (sulama) + heuristic+ONNX (bitki hastalığı) + APScheduler periyodik görevler
- **Veri katmanı:** SQLAlchemy 2.0 ORM, SQLite (dev) / PostgreSQL (prod), Alembic migration
Expand All @@ -153,7 +153,7 @@ ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı /

## 6. API Endpoint'leri

**66 endpoint × 16 router** (REBUILD sonrası dashboard/fields/onboarding + CRUD + RBAC user mgmt dahil)**:**
**67 endpoint × 16 router** (REBUILD sonrası dashboard/fields/onboarding + CRUD + RBAC user mgmt dahil)**:**

| Router | Endpoint | Anahtar Yetenek |
|:--|:--:|:--|
Expand All @@ -176,10 +176,15 @@ ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı /

## 7. Makine Öğrenimi Bileşenleri

> 🚧 **TODO Cycle 9 — Ayşe:** Model performans metrikleri tablosu (accuracy, MAE), eğitim setleri, drift detection sonuçları.
> **Özet:** Sulama modeli RandomForestRegressor (sentetik eğitim seti, deterministic
> seed=42); bitki hastalığı tespiti Pillow HSV heuristic + ONNX-ready iskelet
> (gerçek CNN eğitimi yapılmadı — bkz. §14). Her tahmin `ModelPerformanceLog`'a
> sessizce kaydedilir; drift detection son N gün vs. baseline karşılaştırmasıyla
> eşik aşımında `SystemAlert` üretir. Gerçek-veri accuracy/MAE ölçümü, harici
> dataset entegrasyonu sonrası anlamlı olacağından gelecek çalışmalara bırakıldı.

### 7.1 Sulama Optimizasyon Modeli
- **Algoritma:** RandomForestRegressor (sklearn 1.8.0)
- **Algoritma:** RandomForestRegressor (scikit-learn; `n_estimators=100`, `max_depth=10`)
- **Girdi:** soil_moisture, soil_temperature, humidity, temperature, precipitation
- **Çıktı:** önerilen su miktarı (litre), aciliyet seviyesi
- **Eğitim:** 1000 sentetik örnek, deterministic seed=42
Expand All @@ -198,7 +203,7 @@ ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı /

> 🚧 **TODO Cycle 9 — Ecenur:** Ekran görüntüleri + sayfa-sayfa anlatım.

**Mevcut yapı:** Tek dosya SPA, ~3 100 satır, 9 sayfa, dark/light tema, Chart.js, vanilla JS.
**Mevcut yapı:** Modüler vanilla-JS ESM SPA — markup-only `index.html` + `src/main.js` (264 satır) + `src/lib/*.js` (11 modül) + `src/styles/*.css` (10 modül); dark/light tema, Chart.js, Leaflet. Üretimde ham ESM + CDN servis edilir (Vite yalnız dev/build aracı).

**Filiz maskotu** (Cycle 7 — Miraç):
- Inline SVG, idle/blink/mood animasyonları
Expand All @@ -219,8 +224,8 @@ ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı /
**Çok katmanlı savunma:**
| Katman | Mekanizma | Cycle |
|:--|:--|:--:|
| Yetkilendirme | `X-API-Key` header (writes) | 4 |
| Yetkilendirme | JWT bearer (HS256) + bcrypt | 8 |
| Yetkilendirme | JWT bearer (HS256) + bcrypt — tüm API | 8 |
| Yetkilendirme (legacy) | `X-API-Key` — yalnız `/api/model-performance` (2 route) | 4 |
| Hız sınırlama | slowapi 30/min STRICT + 10/min AUTH (17 endpoint) | 8 |
| TLS | nginx reverse proxy + Let's Encrypt | 8 |
| **Response header'lar** | **CSP + HSTS (prod) + XFO + XCTO + Referrer-Policy + Permissions-Policy** | **shiftFinal** |
Expand All @@ -234,11 +239,12 @@ ruff+format temiz · bandit medium+ 0 · seed çiftçi-odaklı (5 kullanıcı /
## 10. Test, Coverage ve CI/CD

```
Test sayısı: 650 backend (586 + 64 fuzz) + 59 frontend (Vitest)
Test sayısı: 586 backend pytest passed (+64 schemathesis fuzz,
lokalde skip) + 74 frontend (Vitest)
246 → 313 → 425 → 485 (shiftFinal kapanış)
→ 499 (REBUILD Faz 1 RBAC) → 565 (Faz 3.5 admin user mgmt)
605 (Faz 4 CRUD) → 613 (Faz 5 bildirim) → 622 (Faz 6 onboarding)
→ 650 (cila/fixroll); frontend Vitest 32 → 59
586 (Faz 4-6 CRUD/bildirim/onboarding + cila);
frontend Vitest 32 → 74
Coverage: %95+ (CI gate %80; Cycle 8 ölçümü %95.04)
Linter: Ruff (17 kural grubu) — All checks passed
Source security: Bandit medium+ — 0 issue
Expand Down Expand Up @@ -373,15 +379,13 @@ fırlatıyor — fail-fast.

> Tüm 4 maddenin kapsamlı testleri `tests/test_jti_blacklist.py`,
> `tests/test_security_headers.py` ve `tests/test_edge_cases.py` içinde
> yaşıyor (toplam **475+ pytest** + **32 Vitest** test).
> yaşıyor (güncel toplam **586 pytest** + **74 Vitest** test).

## 14. Gelecek Çalışmalar

**Bilinen teknik borçlar (Cycle 9 ve sonrası için):**
- `bcrypt 5.0` geçişi (passlib yeni sürümünü bekliyoruz)
- RBAC (role-based access control) — kullanıcı bazlı izolasyon
- Refresh token + JWT blacklist Redis'e taşıma
- Frontend Vitest birim test scaffold'u — şu an sadece axe-core E2E var
- pip-audit lokal venv subprocess hatası (CI'da temiz, dev makine env sorunu)
- `.venv` recreate yardımcısı — eski mutlak path shebang'leri kaldıktan
sonra Python script'leri (`bandit`, `pip-audit`) `python -m` üzerinden
Expand Down Expand Up @@ -427,8 +431,14 @@ fırlatıyor — fail-fast.
- [`docs/database/Veritabani_Semasi_Tasarimi.md`](database/Veritabani_Semasi_Tasarimi.md) — DB şema detayı
- [`docs/research/`](research/) — Cycle 1-2 araştırma raporları

**Akademik kaynaklar:**
> 🚧 **TODO Cycle 9:** Kullanılan kütüphane referansları (FastAPI, SQLAlchemy, scikit-learn, ONNX, Chart.js, ...), ilgili makaleler, dataset kaynakları.
**Kullanılan başlıca kütüphaneler ve araçlar:**
- **Backend:** FastAPI, Starlette, Pydantic v2, SQLAlchemy 2.0, Alembic, Uvicorn
- **ML:** scikit-learn (RandomForestRegressor — sulama), ONNX Runtime + Pillow (bitki hastalığı heuristic + ONNX-ready), NumPy
- **Veri/altyapı:** SQLite (dev) / PostgreSQL (prod), paho-mqtt, APScheduler, python-jose (JWT), passlib + bcrypt
- **Frontend:** Vanilla JS (ESM), Chart.js, Leaflet, Vite (dev/build), Vitest + jsdom (test)
- **Kalite/CI:** pytest + pytest-cov, Ruff, Bandit, pip-audit, Schemathesis, axe-core, pre-commit, GitHub Actions

> **Not:** Sistem sentetik/heuristik veri ve modellerle çalışır; harici akademik dataset (örn. PlantVillage) ve hakemli makale referansları gelecek çalışmalar kapsamındadır (bkz. §14).

---

Expand Down
Loading
Loading