Oral Health Tracker

Kullanıcıların günlük ağız ve diş sağlığı rutinlerini takip edip hedef belirleyebileceği Next.js & .NET tabanlı uygulama.

Oral Health Tracker

Oral Health Tracker

Ağız ve diş sağlığı alışkanlıklarınızı takip etmenizi, hedefler belirlemenizi ve ilerlemenizi görselleştirmenizi sağlayan kişisel sağlık uygulaması. Diş fırçalama, diş ipi kullanımı, ağız gargarası gibi günlük rutinlerinizi kaydedin, sağlıklı alışkanlıklar edinin.

Neler Yapabilirsiniz?

  • 🦷 Günlük Takip: Diş fırçalama, diş ipi, gargara alışkanlıklarınızı kaydedin
  • 📊 İlerleme Grafikleri: Haftalık, aylık ilerlemenizi görselleştirin
  • 🎯 Hedef Belirleme: "Günde 2 kez fırçalama" gibi hedefler koyun, başarılarınızı takip edin
  • 📅 Hatırlatıcılar: Fırçalama zamanları için bildirimler ayarlayın
  • 📈 İstatistikler: Streak (art arda günler), başarı oranı, toplam aktivite
  • 📝 Notlar: Her aktiviteye not ekleyin (diş eti kanaması, hassasiyet vb.)

Kullanıcı Senaryoları

Senaryo 1: Sabah Rutini

Kullanıcı sabah kalkar, diş fırçalar. Uygulamayı açar, "Diş Fırçalama" aktivitesini işaretler. "Sabah" ve "2 dakika" seçeneklerini işaretler. Not kısmına "Arka azı dişlerinde hassasiyet var" yazar. Sistem bunu kaydeder ve streak sayacını 1 artırır.

Senaryo 2: Hedef Takibi

Kullanıcı "Günde 2 kez diş fırçalama" hedefi oluşturur. Her sabah ve akşam fırçalama yaptığında işaretler. Hafta sonunda dashboard'da %85 başarı oranı görür. Grafik gösterir ki Cuma günü akşam fırçalamayı atlamış.

Senaryo 3: İlerleme Analizi

Kullanıcı 30 gün sonra aylık raporu açar. Diş ipi kullanımında %60 başarı oranı görür. Grafik gösterir ki hafta sonları daha düşük. Buna göre hafta sonu için özel hatırlatıcı ekler.

Mimari ve Tasarım Kararları

Clean Architecture Implementation

Katman Ayrımı:

  1. API (Presentation): Controllers, DTO'lar, middleware
  2. Business: Use cases, iş kuralları, validasyon
  3. DataAccess: Repository implementations, EF Core context
  4. Core: Interfaces, abstract classes, domain services
  5. Entity: Domain models (User, Activity, Goal, Reminder)

Neden bu mimari?

  • Bağımsızlık: Her katman kendi sorumluluğuna odaklı
  • Test Edilebilirlik: Business logic izole test edilebiliyor
  • Maintainability: Bir katmandaki değişiklik diğerlerini etkilemiyor
  • Domain-Centric: İş mantığı merkez, teknik detaylar çevrede

Repository Pattern

Veritabanı işlemleri için Generic Repository + Unit of Work:

IRepository<T> → Generic CRUD operations
IActivityRepository → Custom queries (GetByDateRange, GetStatistics)
IUnitOfWork → Transaction management

Faydası: Veritabanı değişse bile (MSSQL → PostgreSQL) sadece DataAccess katmanı güncellenir.

Use Case Driven Design

Her özellik bir use case olarak modellendi:

  • CreateActivityUseCase: Aktivite kaydetme
  • CalculateStreakUseCase: Streak hesaplama
  • GenerateReportUseCase: Rapor oluşturma

Bu yaklaşım iş süreçlerini koddan net görebilmeyi sağlıyor.

UML Documentation

Proje UML diyagramları ile dokümante edildi:

  • Use Case Diagrams: Kullanıcı senaryoları
  • Sequence Diagrams: API flow, aktivite kaydetme süreci
  • Class Diagrams: Entity ilişkileri, katman yapısı

Teknik Detaylar (Geliştiriciler İçin)

Teknoloji Stack

Frontend:

  • Next.js 14 (Pages Router)
  • JavaScript (ES6+)
  • Chart.js - Grafik görselleştirme
  • Date-fns - Tarih işlemleri
  • React Hook Form - Form yönetimi

Backend:

  • ASP.NET Core 8 Web API
  • Entity Framework Core 8
  • Microsoft SQL Server
  • AutoMapper - Object mapping
  • FluentValidation - Input validation

Veri Modeli

Entities:

  • User: Kullanıcı bilgileri, profil
  • Activity: Aktivite kayıtları (type, date, duration, notes)
  • Goal: Kullanıcı hedefleri (target, frequency, progress)
  • Reminder: Hatırlatıcı ayarları (time, days, enabled)
  • Streak: Art arda gün hesaplamaları

İlişkiler:

  • User 1:N Activity (bir kullanıcının birçok aktivitesi)
  • User 1:N Goal (bir kullanıcının birçok hedefi)
  • Goal 1:N Activity (bir hedefe bağlı aktiviteler)

İş Kuralları

Streak Hesaplama:

1. Son aktivite tarihi alınır
2. Bugünün tarihi ile karşılaştırılır
3. Eğer dün aktivite varsa streak devam
4. Eğer dünden önce varsa streak sıfırlanır
5. Eğer bugün aktivite eklenirse streak +1

Hedef Başarı Oranı:

Hedef: "Günde 2 kez fırçalama" (7 gün)
Beklenen: 7 gün × 2 = 14 aktivite
Gerçekleşen: 12 aktivite
Başarı: 12 / 14 = %85,7

Performans

  • Indexing: ActivityDate, UserId, GoalId alanlarına index
  • Lazy Loading: Grafik verileri ihtiyaç anında yüklenir
  • Caching: Kullanıcı profili ve hedefler cache'lenir
  • Pagination: Aktivite listesi sayfalı (50 kayıt/sayfa)

Testing

  • Unit Tests: Business logic katmanı (xUnit)
  • Integration Tests: API endpoints (WebApplicationFactory)
  • Mock Objects: Database bağımlılıkları mock'landı (Moq)
  • Test Coverage: %80+ kod coverage

Proje eğitim amaçlıdır ve Clean Architecture öğrenmek için ideal bir örnek teşkil etmektedir.