### Kakeibo API — örnek istekler (VS Code REST Client eklentisi) ### Satırın üstündeki "Send Request" bağlantısına tıklayın. ### ┌──────────────────────────────────────────────────────────────────────┐ ### │ GİRİŞ İÇİN HAZIR HESAPLAR (yalnızca yerel geliştirme veritabanı): │ ### │ demo@ornek.com / demo12345 → hane sahibi (Demo Hanesi) │ ### │ es@ornek.com / demo12345 → üye (aynı hane) │ ### └──────────────────────────────────────────────────────────────────────┘ @baseUrl = http://localhost:8080/api ### Sağlık kontrolü (DB erişilemezse 503 + "db": "error") GET {{baseUrl}}/health # ─────────────────────────── Kimlik doğrulama ─────────────────────────── # REST Client cookie'leri otomatik saklar: kayıt/giriş sonrası diğer istekler oturumlu gider. ### KAYIT ÖRNEĞİ — bu bir hesap DEĞİL, hesap OLUŞTURMA isteğidir. ### Hesap ancak bu isteği gönderince oluşur (kullanıcı + hane + örnek kategoriler/ödeme türleri). ### Aynı e-postayla ikinci kez gönderirseniz 409 "zaten kayıtlı" alırsınız. ### REGISTRATION=invite_only (varsayılan): sistemde zaten hane varsa davetsiz kayıt 403 "registration_closed" döner ### → aşağıdaki "Davet koduyla kayıt" örneğini kullanın (kodu hane sahibi oluşturur). POST {{baseUrl}}/auth/register Content-Type: application/json { "name": "Suphi", "email": "yeni@ornek.com", "password": "gizli-sifre-123", "household_name": "Çakır Hanesi" } ### Davet koduyla kayıt (mevcut haneye "member" olarak katılır; household_name yok sayılır) # Kod büyük/küçük harf ve tireden bağımsızdır: "abcd-efgh" = "ABCDEFGH" POST {{baseUrl}}/auth/register Content-Type: application/json { "name": "Ayşe", "email": "ayse@ornek.com", "password": "gizli-sifre-123", "invite_code": "BURAYA-KOD" } ### Giriş ("remember_me": true → 30 gün, false → tarayıcı kapanınca biter) POST {{baseUrl}}/auth/login Content-Type: application/json { "email": "demo@ornek.com", "password": "gizli-sifre-123", "remember_me": true } ### Kayıt politikası: yeni hane kurulabilir mi? (oturum gerektirmez) GET {{baseUrl}}/auth/registration ### Ben kimim? (oturum yoksa 401) GET {{baseUrl}}/auth/me ### Çıkış POST {{baseUrl}}/auth/logout # ─────────────────────────── Hane ve davetler ─────────────────────────── ### Hane bilgisi ve üyeler GET {{baseUrl}}/household ### Yeni davet kodu (yalnızca hane sahibi; 7 gün geçerli, tek kullanımlık) POST {{baseUrl}}/household/invites ### Aktif davetler (yalnızca hane sahibi) GET {{baseUrl}}/household/invites ### Daveti iptal et (yalnızca hane sahibi) — id'yi yukarıdaki listeden alın DELETE {{baseUrl}}/household/invites/BURAYA-ID # ─────────────────────────── Kategoriler ─────────────────────────── # Gruplar: needs (Zorunlu) · wants (İstek) · culture (Kültürel) · unexpected (Beklenmeyen) # Silme yok; "is_active": false ile pasife alınır. ### Kategoriler (aktif olanlar; pasifler için ?include_inactive=true) GET {{baseUrl}}/categories ### Kategori ekle (grubun sonuna eklenir) POST {{baseUrl}}/categories Content-Type: application/json { "group": "needs", "name": "Aidat", "emoji": "🏢" } ### Kategori düzenle / pasife al — "version": listede gördüğünüz sürüm (başkası değiştirdiyse 409) PATCH {{baseUrl}}/categories/BURAYA-ID Content-Type: application/json { "name": "Site Aidatı", "is_active": true, "version": 1 } ### Grup içi sıralama — gruptaki TÜM kimlikler (pasifler dahil), istenen sırada PUT {{baseUrl}}/categories/order Content-Type: application/json { "group": "culture", "ids": ["ID-1", "ID-2", "ID-3"] } # ─────────────────────────── Ödeme türleri ─────────────────────────── ### Ödeme türleri GET {{baseUrl}}/payment-methods ### Ödeme türü ekle POST {{baseUrl}}/payment-methods Content-Type: application/json { "name": "Yemek Kartı", "emoji": "🍽️" } ### Ödeme türü düzenle / pasife al PATCH {{baseUrl}}/payment-methods/BURAYA-ID Content-Type: application/json { "is_active": false } ### Ödeme türü sıralama — TÜM kimlikler PUT {{baseUrl}}/payment-methods/order Content-Type: application/json { "ids": ["ID-1", "ID-2", "ID-3", "ID-4"] } # ─────────────────────────── Dönemler ─────────────────────────── # Bitiş tarihi HARİÇ: Aralık 2026 = "2026-12-01" → "2027-01-01". Hanede tek açık dönem. ### Açık dönem (yoksa null) GET {{baseUrl}}/periods/current ### Tüm dönemler (en yeni başta) GET {{baseUrl}}/periods ### Dönem aç — ad boşsa otomatik ("Aralık 2026"); savings_goal kuruş (5.000,00 ₺ = 500000) POST {{baseUrl}}/periods Content-Type: application/json { "start_date": "2026-12-01", "end_date": "2027-01-01", "savings_goal": 500000 } ### Dönem detayı (haftalar dahil) GET {{baseUrl}}/periods/BURAYA-ID ### Dönemi düzenle — "version": son gördüğünüz sürüm (başkası değiştirdiyse 409) PATCH {{baseUrl}}/periods/BURAYA-ID Content-Type: application/json { "savings_goal": 750000, "version": 1 }