69 lines
1.7 KiB
Dart
69 lines
1.7 KiB
Dart
import 'package:seshat/data/services/api_client.dart';
|
|
import 'package:seshat/domain/models/bal.dart';
|
|
import 'package:seshat/utils/result.dart';
|
|
|
|
class BalRepository {
|
|
BalRepository({required ApiClient apiClient}) : _apiClient = apiClient;
|
|
|
|
final ApiClient _apiClient;
|
|
List<Bal>? _bals;
|
|
|
|
Future<Result<List<Bal>>> getBals() async {
|
|
if (_bals != null) {
|
|
return Result.ok(_bals!);
|
|
}
|
|
final result = await _apiClient.getBals();
|
|
switch (result) {
|
|
case Ok():
|
|
_bals = result.value;
|
|
return Result.ok(result.value);
|
|
case Error():
|
|
return result;
|
|
}
|
|
}
|
|
|
|
Future<Result<List<Bal>>> _getBalsNoCache() async {
|
|
final result = await _apiClient.getBals();
|
|
switch (result) {
|
|
case Ok():
|
|
_bals = result.value;
|
|
return Result.ok(result.value);
|
|
case Error():
|
|
return result;
|
|
}
|
|
}
|
|
|
|
Future<Result<Bal>> balById(int id) async {
|
|
if (_bals == null) {
|
|
await getBals();
|
|
}
|
|
Bal? bal = _bals!.where((bal) => bal.id == id).firstOrNull;
|
|
if (bal != null) {
|
|
return Result.ok(bal);
|
|
}
|
|
final result = await _apiClient.getBalById(id);
|
|
switch (result) {
|
|
case Ok():
|
|
return Result.ok(result.value);
|
|
case Error():
|
|
return result;
|
|
}
|
|
}
|
|
|
|
Future<Result<Bal>> editBal(
|
|
int id,
|
|
String name,
|
|
DateTime start,
|
|
DateTime end,
|
|
) async {
|
|
final result = await _apiClient.editBal(id, name, start, end);
|
|
_getBalsNoCache();
|
|
return result;
|
|
}
|
|
|
|
Future<Result<void>> addBal(String name, DateTime start, DateTime end) async {
|
|
final result = await _apiClient.addBal(name, start, end);
|
|
_getBalsNoCache();
|
|
return result;
|
|
}
|
|
}
|