complete budget page

This commit is contained in:
2024-03-01 22:53:19 +01:00
parent 979fecb60a
commit f86c4cd18b
16 changed files with 547 additions and 164 deletions

View File

@@ -1,19 +1,31 @@
import 'dart:async';
import 'dart:convert';
import 'package:tunas/clients/storage/storage_client.dart';
import 'package:tunas/clients/storage/json_storage_client.dart';
import 'package:tunas/repositories/json/models/json.dart';
class JsonRepository {
String accountFile = 'tunas_main_account.json';
final StorageClient _storageClient;
final JsonStorageClient _storageClient;
Map<String, Timer> saveTimerMap = {};
JsonRepository({
required storageClient,
}) : _storageClient = storageClient;
saveJson(Json json) async {
await _storageClient.save(json.getJsonFileName(), jsonEncode(json.toJson()));
void saveJson(Json json) {
Timer? saveTimer = saveTimerMap[json.getJsonFileName()];
if (saveTimer != null) {
saveTimer.cancel();
}
saveTimer = Timer(const Duration(milliseconds: 500), () {
saveTimerMap.remove(json.getJsonFileName());
_storageClient.save(json.getJsonFileName(), jsonEncode(json.toJson()));
});
}
Future<T> loadJson<T extends Json>(Json json, JsonFactory<T> jsonFactory) async {

View File

@@ -45,37 +45,37 @@ class MetadataRepository {
_broadcastMetadata(metadata);
}
Future<List<Category>> saveCategories(List<Category> categories) async {
List<Category> saveCategories(List<Category> categories) {
Metadata metadata = _constructMetadataFromControllers();
metadata.categories = categories;
await _jsonRepository.saveJson(metadata);
_jsonRepository.saveJson(metadata);
_categoriesController.add(categories);
return categories;
}
Future<List<Budget>> saveBudgets(List<Budget> budgets) async {
List<Budget> saveBudgets(List<Budget> budgets) {
Metadata metadata = _constructMetadataFromControllers();
metadata.budgets = budgets;
await _jsonRepository.saveJson(metadata);
_jsonRepository.saveJson(metadata);
_budgetController.add(budgets);
return budgets;
}
Future<List<Account>> saveAccounts(List<Account> accounts) async {
List<Account> saveAccounts(List<Account> accounts) {
Metadata metadata = _constructMetadataFromControllers();
metadata.accounts = accounts;
await _jsonRepository.saveJson(metadata);
_jsonRepository.saveJson(metadata);
_accountController.add(accounts);
return accounts;
}
deleteMetadata() async {
void deleteMetadata() {
Metadata metadata = Metadata();
await _jsonRepository.saveJson(metadata);
_jsonRepository.saveJson(metadata);
_broadcastMetadata(metadata);
}
_broadcastMetadata(Metadata metadata) {
void _broadcastMetadata(Metadata metadata) {
_categoriesController.add(metadata.categories);
_budgetController.add(metadata.budgets);
_accountController.add(metadata.accounts);

View File

@@ -20,20 +20,20 @@ class TransactionsRepository {
return _transactionsController.asBroadcastStream();
}
loadTransactions() async {
Future<void> loadTransactions() async {
Transactions transactions = await _jsonRepository.loadJson(Transactions(), TransactionsFactory());
_transactionsController.add(transactions.transactions);
}
saveTransactions(List<Transaction> transactionsList) async {
void saveTransactions(List<Transaction> transactionsList) {
Transactions transactions = Transactions(transactions: transactionsList);
await _jsonRepository.saveJson(transactions);
_jsonRepository.saveJson(transactions);
_transactionsController.add(transactionsList);
}
deleteTransactions() async {
void deleteTransactions() {
Transactions transactions = Transactions();
await _jsonRepository.saveJson(transactions);
_jsonRepository.saveJson(transactions);
_transactionsController.add([]);
}
}