profileShare

rasmusjy / splitapp-backend-clean-onion

Read-only snapshot

No repository description.

main default branch 429 files Expires Sep 13, 2026, 9:06 AM
ExpenseRepository.cs 1,704 bytes
1 using App.Domain;
2 using App.Domain.Contracts;
3 using Microsoft.EntityFrameworkCore;
4
5 namespace App.DAL.EF.Repositories;
6
7 public class ExpenseRepository : BaseRepository<Expense>, IExpenseRepository
8 {
9 public ExpenseRepository(AppDbContext dbContext) : base(dbContext)
10 {
11 }
12
13 public override async Task<IEnumerable<Expense>> GetAllAsync()
14 {
15 return await DbContext.Expenses
16 .Include(e => e.Trip)
17 .Include(e => e.PaidByUser)
18 .Include(e => e.BudgetCategory)
19 .Include(e => e.Currency)
20 .OrderByDescending(e => e.ExpenseDate)
21 .ToListAsync();
22 }
23
24 public override async Task<Expense?> GetByIdAsync(Guid id)
25 {
26 return await DbContext.Expenses
27 .Include(e => e.Trip)
28 .Include(e => e.PaidByUser)
29 .Include(e => e.BudgetCategory)
30 .Include(e => e.Currency)
31 .FirstOrDefaultAsync(e => e.Id == id);
32 }
33
34 public async Task<IEnumerable<Expense>> GetByTripIdAsync(Guid tripId)
35 {
36 return await DbContext.Expenses
37 .Where(e => e.TripId == tripId)
38 .OrderByDescending(e => e.ExpenseDate)
39 .Include(e => e.PaidByUser)
40 .Include(e => e.BudgetCategory)
41 .Include(e => e.Currency)
42 .ToListAsync();
43 }
44
45 public async Task<Expense?> GetByIdWithDetailsAsync(Guid id)
46 {
47 return await DbContext.Expenses
48 .Include(e => e.PaidByUser)
49 .Include(e => e.BudgetCategory)
50 .Include(e => e.Currency)
51 .Include(e => e.Splits!)
52 .ThenInclude(s => s.User)
53 .FirstOrDefaultAsync(e => e.Id == id);
54 }
55 }
56