81 lines
1.9 KiB
Dart
81 lines
1.9 KiB
Dart
import 'package:please_pay_me/data/models/auth_user.dart';
|
|
import 'package:please_pay_me/data/models/budget.dart';
|
|
import 'package:please_pay_me/data/models/expense.dart';
|
|
import 'package:please_pay_me/data/models/job.dart';
|
|
|
|
/// Contracts the UI depends on. Implemented by the REST backend and by the
|
|
/// in-memory demo backend used for previews and tests.
|
|
abstract interface class BudgetRepository {
|
|
Future<List<BudgetStatus>> list();
|
|
|
|
Future<BudgetStatus> status({int? budgetId});
|
|
|
|
Future<BudgetStatus> create({
|
|
required String name,
|
|
required double totalAmount,
|
|
required DateTime endDate,
|
|
DateTime? startDate,
|
|
});
|
|
|
|
Future<BudgetStatus> update({
|
|
required int budgetId,
|
|
String? name,
|
|
double? totalAmount,
|
|
DateTime? endDate,
|
|
DateTime? startDate,
|
|
bool resetExpenses = false,
|
|
});
|
|
|
|
Future<BudgetStatus> select(int budgetId);
|
|
|
|
Future<BudgetStatus> setActive(int budgetId, {required bool isActive});
|
|
|
|
Future<void> delete(int budgetId);
|
|
}
|
|
|
|
abstract interface class ExpenseRepository {
|
|
Future<ExpensesPage> page({
|
|
required int page,
|
|
int pageSize = 20,
|
|
int? budgetId,
|
|
bool all = false,
|
|
});
|
|
|
|
Future<BudgetStatus> create({
|
|
required double amount,
|
|
String? note,
|
|
DateTime? spentAt,
|
|
int? budgetId,
|
|
});
|
|
|
|
Future<double> undoLast({int? budgetId});
|
|
}
|
|
|
|
abstract interface class JobRepository {
|
|
Future<List<Job>> list();
|
|
|
|
Future<Job> create({
|
|
required String name,
|
|
required double salaryAmount,
|
|
required List<int> payDays,
|
|
required double firstPayPercent,
|
|
required WeekendPolicy weekendPolicy,
|
|
});
|
|
|
|
Future<Job> update({
|
|
required int jobId,
|
|
required String name,
|
|
required double salaryAmount,
|
|
required List<int> payDays,
|
|
required double firstPayPercent,
|
|
required WeekendPolicy weekendPolicy,
|
|
bool isActive = true,
|
|
});
|
|
|
|
Future<void> delete(int jobId);
|
|
}
|
|
|
|
abstract interface class UserRepository {
|
|
Future<AuthUser> me();
|
|
}
|