part of 'finans.model.dart'; // Dövizler (Fiat ve Kripto döviz cinsleri) @Collection() class Kategori { Kategori(); Id id = Isar.autoIncrement; String? ismi; String? simge; String? kod; String? aciklama; int? renk; // Varsayılan beyaz @ignore Color get rengi => renk == null ? Colors.blue : Color(renk!); set rengi(Color yeniRenk) => renk = yeniRenk.toARGB32(); final ustKategori = IsarLink(); // Üst kategori referansı @Backlink(to: "ustKategori") final altKategoriler = IsarLinks(); // Alt kategoriler listesi @Backlink(to: "kategoriler") final sahibi = IsarLink(); @ignore bool get bosMu { return (ismi == null || ismi!.isEmpty) && (kod == null || kod!.isEmpty) && (simge == null || simge!.isEmpty); } factory Kategori.fromJson(Map json) { return Kategori() ..ismi = json['ismi'] ..simge = json['simge'] ..kod = json['kod'] ..rengi = Color(json['rengi']) ..ustKategori.value = json['ustKategori'] != null ? Kategori.fromJson(json['ustKategori']) : null; } /// Veritabanına kaydeder. /// /// Bütün ilişkileri de kaydeder. /// /// İlişkiler: /// - sahibi: Kayıt edilecek olan kullanıcı /// - ustKategori: Üst kategori (null olabilir) /// - altKategoriler: Alt kategorilerin listesi (null olabilir) Future save({Isar? isar, Kullanici? sahibi, Kategori? ustKategori, List>? altKategoriler}) async { await isar?.kategoris.put(this); this.sahibi.value = sahibi; this.ustKategori.value = ustKategori; await this.sahibi.save(); await this.ustKategori.save(); if (altKategoriler == null) return; for (var altKategori in altKategoriler) { await Kategori.fromJson(altKategori).save(isar: isar, sahibi: sahibi, ustKategori: this); } } }