Refactored json storage

This commit is contained in:
2024-02-17 14:16:07 +01:00
parent 1a7f28703a
commit b2da8436e4
29 changed files with 389 additions and 235 deletions

View File

@@ -0,0 +1,39 @@
import 'package:uuid/uuid.dart';
class Transaction {
String uuid;
DateTime date;
String category;
String description;
String account;
double value;
Transaction({
required this.uuid,
required this.date,
required this.category,
required this.description,
required this.account,
required this.value
});
factory Transaction.fromJson(Map<String, dynamic> json) {
return Transaction(
uuid: json['uuid'] ?? const Uuid().v8(),
date: DateTime.parse(json['date']),
category: json['category'],
description: json['description'],
account: json['account'],
value: double.parse(json['value']),
);
}
Map<String, String> toJson() => {
'uuid': uuid,
'date': date.toIso8601String(),
'category': category,
'description': description,
'account': account,
'value': value.toString(),
};
}

View File

@@ -0,0 +1,29 @@
import 'package:tunas/repositories/json/models/json.dart';
import 'package:tunas/repositories/transactions/models/transaction.dart';
class Transactions implements Json {
List<Transaction> transactions;
Transactions({
this.transactions = const [],
});
@override
Map<String, dynamic> toJson() => {
'transactions': transactions.map((transaction) => transaction.toJson()).toList(),
};
@override
String getJsonFileName() {
return 'transactions.json';
}
}
class TransactionsFactory implements JsonFactory<Transactions> {
@override
Transactions fromJson(Map<String, dynamic> json) {
return Transactions(
transactions: List<Transaction>.from(json['transactions']?.map((transaction) => Transaction.fromJson(transaction))),
);
}
}

View File

@@ -0,0 +1,35 @@
import 'package:rxdart/subjects.dart';
import 'package:tunas/repositories/json/json_repository.dart';
import 'package:tunas/repositories/transactions/models/transaction.dart';
import 'package:tunas/repositories/transactions/models/transactions.dart';
class TransactionsRepository {
final JsonRepository _jsonRepository;
final _transactionsController = BehaviorSubject<List<Transaction>>.seeded(const []);
TransactionsRepository({
required jsonRepository,
}) : _jsonRepository = jsonRepository;
Stream<List<Transaction>> getTransactionsStream() {
return _transactionsController.asBroadcastStream();
}
loadTransactions() async {
Transactions transactions = await _jsonRepository.loadJson(Transactions(), TransactionsFactory());
_transactionsController.add(transactions.transactions);
}
saveTransactions(List<Transaction> transactionsList) async {
Transactions transactions = Transactions(transactions: transactionsList);
await _jsonRepository.saveJson(transactions);
_transactionsController.add(transactionsList);
}
deleteTransactions() async {
Transactions transactions = Transactions();
await _jsonRepository.saveJson(transactions);
_transactionsController.add([]);
}
}