This repository has been archived on 2025-08-25. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
Seshat/lib/data/repositories/bal_repository.dart
2025-08-14 00:27:39 +02:00

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;
}
}