using BudgetApp.Data.Entities; namespace BudgetApp.Data.Interfaces; public interface ITransactionRepository { Task> GetTransactionsAsync(string userId); Task> GetRecentTransactionsAsync(string userId, int count = 5); Task> GetUpcomingTransactionsAsync(string userId, int count = 5); Task> GetTransactionsInRangeAsync(string userId, DateTime from, DateTime to); Task> GetTransactionsByAccountAsync(int accountId, string userId); Task CreateTransactionAsync(Transaction transaction); Task UpdateTransactionAsync(int id, string userId, string description, decimal amount, DateTime date, TransactionType type, int accountId, int? categoryId, RecurrenceType recurrenceType = RecurrenceType.None, DateTime? recurrenceEndDate = null); Task DeleteTransactionAsync(int id, string userId); Task DeleteTransactionSeriesAsync(int id, string userId); Task MarkAsPaidAsync(int id, string userId, bool isPaid = true); Task MaterializeRecurringTransactionsAsync(string userId, DateTime? windowEnd = null); }