Refactored json storage
This commit is contained in:
39
lib/repositories/transactions/models/transaction.dart
Normal file
39
lib/repositories/transactions/models/transaction.dart
Normal 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(),
|
||||
};
|
||||
}
|
||||
29
lib/repositories/transactions/models/transactions.dart
Normal file
29
lib/repositories/transactions/models/transactions.dart
Normal 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))),
|
||||
);
|
||||
}
|
||||
}
|
||||
35
lib/repositories/transactions/transactions_repository.dart
Normal file
35
lib/repositories/transactions/transactions_repository.dart
Normal 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([]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user