Files
please-pay-me/mobile/lib/data/repositories/repositories.dart
T
2026-09-21 04:06:43 +03:00

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