3f60efdc33
- TCMB (döviz alış kuru) ve xaus.com (altın) saatlik arka planda çekilir, gün başına saklanır - Kaynak erişilemezse son kur geçerli; altın için son USD kuru kullanılır - Elle kur girişi/silme; aynı gün elle girilen kur önceliklidir - GET /portfolio: güncel değer, kâr/zarar, toplamlar, son kur çekimi - RATES_REFRESH_MINUTES ayarı Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
944 B
Rust
31 lines
944 B
Rust
//! `exchange_rates` — kurlar (DATA_MODEL.md §3.14). Değer: 1 birim varlık = `rate_e6` / 1e6 TL.
|
||
//!
|
||
//! `household_id: null` → otomatik (tüm haneler, TCMB / xaus.com); dolu → hanenin elle girdiği kur.
|
||
//! Otomatik kurlar gün başına tek kayıt (aynı gün yeniden çekilince güncellenir) → günlük geçmiş.
|
||
|
||
use mongodb::bson::{DateTime, Uuid};
|
||
use serde::Deserialize;
|
||
|
||
#[derive(Debug, Clone, Deserialize)]
|
||
pub struct Rate {
|
||
#[serde(rename = "_id")]
|
||
pub id: Uuid,
|
||
#[serde(default)]
|
||
pub household_id: Option<Uuid>,
|
||
/// Varlık kodu: `USD`, `XAU_GRAM`…
|
||
pub code: String,
|
||
/// TL × 1e6, birim başına
|
||
pub rate_e6: i64,
|
||
/// `tcmb` · `xaus` · `manual`
|
||
pub source: String,
|
||
/// Kurun geçerli olduğu gün (TCMB: bülten tarihi)
|
||
pub rate_date: String,
|
||
pub fetched_at: DateTime,
|
||
}
|
||
|
||
impl Rate {
|
||
pub fn is_manual(&self) -> bool {
|
||
self.household_id.is_some()
|
||
}
|
||
}
|