b883530f76
- /api/periods: liste, açık dönem, aç, detay, düzenle - Kurallar: tek açık dönem, çakışma yok, bitiş hariç, en fazla 62 gün, kapalı dönem salt okunur - Tarih daraltılırken dışarıda harcama kalırsa engellenir - Haftalar Pazartesi başlangıçlı, kısmi haftalar ayrı (takvim yardımcıları) - Otomatik dönem adı: "Aralık 2026" / "15 Ara 2026 – 14 Oca 2027" - Testler: takvim (4), dönem kuralları (2), entegrasyon (5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
173 lines
5.8 KiB
HTTP
173 lines
5.8 KiB
HTTP
### 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
|
||
}
|