ChatCal Docs
Başlangıç

Flutter Mimari

ChatCal mobil uygulama katmanları, kritik akışlar ve backend eşlemesi.

ChatCal Flutter uygulaması Provider state, go_router navigasyon ve *ApiService HTTP katmanı üzerinden NestJS backend ile konuşur.

Tam referans (mermaid diyagramları dahil): monorepo docs/architecture.md

Katman özeti

screens/ + widgets/  →  providers/  →  services/*ApiService  →  ApiService  →  BACKEND_URL
KatmanDizinRol
UIchatcalmobile/lib/screens/, chatcalmobile/lib/widgets/Ekranlar ve bileşenler
Statechatcalmobile/lib/providers/AppProvider, SubscriptionProvider, UsageQuotaProvider, …
APIchatcalmobile/lib/services/HTTP, auth, platform SDK
Modelchatcalmobile/lib/models/Domain tipleri
Routingchatcalmobile/lib/router/app_router.dartAuth redirect + shell layout

Provider'lar

ProviderSorumluluk
AppProviderProfil, öğün/egzersiz, chat, tarih, Apple Health, streak, AI mesaj
SubscriptionProviderRevenueCat Plus, paywall
UsageQuotaProviderGünlük mesaj/foto/ses kotası
NetworkStatusProviderBağlantı banner'ı

AppProvider geniş bir sınıftır (~2700 satır). Yeni özelliklerde mümkünse ilgili *ApiService + dar state değişikliği tercih edin.

Route'lar

PathEkran
/onboardingİlk kurulum
/dashboard, /chatShell (HomeScreen altında)
/profile, /settingsProfil ve ayarlar
/settings/appearance, /settings/apple-healthAlt ayarlar
/settings/legal/:typeYasal metinler

Kritik akışlar

Auth

  1. AuthService.signInWithApple() / signInWithGoogle()
  2. POST /api/auth/apple/login veya google/login
  3. Token'lar FlutterSecureStorage'a yazılır
  4. ApiService isteklerde Bearer token kullanır; süre dolunca POST /api/auth/refresh

Chat / AI

  1. ChatScreenAppProvider.handleSendMessage()
  2. UsageLimitsService — kota kontrolü
  3. Optimistic user message (temp id)
  4. Metin mesajı: OpenAIApiService.sendMessageToAIStream()POST /api/responses/send-message/stream (SSE)
  5. Foto / tool: sendMessageToAI()POST /api/responses/send-message
  6. Stream event'leri: AIStreamTextDelta, AIStreamFinal, AIStreamError

Öğün / egzersiz proposal

  1. AI yanıtında MealProposalCard / ExerciseProposalCard
  2. Onay: handleConfirmMeal() / handleConfirmExercise()
  3. POST /api/food-events veya /api/exercise-events
  4. Chat geçmişi ve dashboard verisi backend'den yeniden yüklenir

Abonelik ve limitler

  • RevenueCatSubscriptionProvider → paywall UI
  • Backend /api/usage/*UsageLimitsServiceUsageQuotaProvider
  • Chat gönderimi öncesi _ensureCanSendAiRequest() kota kontrolü yapar

i18n

app_tr.arb + app_en.arb + app_es.arbflutter gen-l10nAppLocalizations

Backend eşlemesi

Base URL: BACKEND_URL env → ApiService.baseUrl

Flutter servisBackend
AuthService/api/auth/*
OpenAIApiService/api/responses/*
ChatApiService/api/chat-messages
MealsApiService/api/food-events
ExercisesApiService/api/exercise-events
UserApiService/api/users/*
UsageApiService/api/usage/*
SpeechApiService/api/speech/*
HealthSummaryApiService/api/health/summaries
LegalPolicyApiService/api/legal/policies/:type
LiveActivityService/api/notifications/live-activities/register

Endpoint detayları ve deneme: API Reference

OpenAPI spec sync:

npm run docs:sync

AppProvider sorumluluk alanları

AlanÖrnek metodlar
Startupinit(), _initialize(), reloadFromBackend()
ProfilsetUserProfile(), handleOnboardingComplete()
ChathandleSendMessage(), submitMessageFeedback()
Öğün / egzersizhandleConfirmMeal(), handleUpdateExercise(), …
Apple HealthsyncAppleHealthForSelectedDate()
Oturumlogout(), resetAllData()

Yeni özellik checklist

  1. Backend endpoint var mı? → ilgili *ApiService
  2. UI string → üç ARB dosyası
  3. Cross-screen state → dar AppProvider metodu veya yeni provider
  4. Route değişikliği → app_router.dart
  5. Mimari değişiklik → docs/architecture.md güncelle

Test

flutter test

İlgili sayfalar

On this page