profileShare

rasmusjy / splitapp-backend-microservices

Read-only snapshot

No repository description.

main default branch 501 files Expires Sep 13, 2026, 9:06 AM
InvitationAdminService.cs 2,791 bytes
1 using SplitApp.WebApp.Application.Contracts;
2 using SplitApp.WebApp.Application.DTO;
3 using SplitApp.WebApp.Application.Mappers;
4 using SplitApp.WebApp.Application.UsersService;
5
6 namespace SplitApp.WebApp.Application.Services.Admin;
7
8 public class InvitationAdminService : IInvitationAdminService
9 {
10 private readonly IAppUnitOfWork _uow;
11 private readonly IUsersServiceClient _usersService;
12
13 public InvitationAdminService(IAppUnitOfWork uow, IUsersServiceClient usersService)
14 {
15 _uow = uow;
16 _usersService = usersService;
17 }
18
19 public async Task<List<TripInvitationBllDto>> GetAllAsync(string? search)
20 {
21 var invitations = (await _uow.TripInvitations.GetAllAsync()).ToList();
22 if (!string.IsNullOrEmpty(search))
23 invitations = invitations.Where(i => i.Token.Contains(search)).ToList();
24 return InvitationBllDtoFactory.CreateList(invitations.OrderByDescending(i => i.Id));
25 }
26
27 public async Task<TripInvitationBllDto?> GetByIdAsync(Guid id)
28 {
29 var entity = await _uow.TripInvitations.GetByIdAsync(id);
30 return entity == null ? null : InvitationBllDtoFactory.Create(entity);
31 }
32
33 public async Task CreateAsync(TripInvitationBllDto entity)
34 {
35 var domainEntity = InvitationBllDtoFactory.ToEntity(entity);
36 domainEntity.Id = Guid.NewGuid();
37 if (string.IsNullOrEmpty(domainEntity.Token))
38 domainEntity.Token = Guid.NewGuid().ToString("N");
39 _uow.TripInvitations.Add(domainEntity);
40 await _uow.SaveChangesAsync();
41 }
42
43 public async Task UpdateAsync(TripInvitationBllDto entity)
44 {
45 var existing = await _uow.TripInvitations.GetByIdAsync(entity.Id);
46 if (existing == null) return;
47 existing.TripId = entity.TripId;
48 existing.InvitedByUserId = entity.InvitedByUserId;
49 existing.Token = entity.Token;
50 existing.Status = entity.Status;
51 existing.ExpiresAt = entity.ExpiresAt;
52 existing.RespondedAt = entity.RespondedAt;
53 _uow.TripInvitations.Update(existing);
54 await _uow.SaveChangesAsync();
55 }
56
57 public async Task DeleteAsync(Guid id)
58 {
59 await _uow.TripInvitations.RemoveAsync(id);
60 await _uow.SaveChangesAsync();
61 }
62
63 public async Task<List<TripBllDto>> GetTripsAsync()
64 {
65 var trips = await _uow.Trips.GetAllAsync();
66 return TripBllDtoFactory.CreateList(trips.OrderBy(t => t.Name));
67 }
68
69 public async Task<List<AppUserBllDto>> GetUsersAsync()
70 {
71 var users = await _usersService.ListUsersAsync();
72 return users.Select(u => new AppUserBllDto
73 {
74 Id = u.Id,
75 FirstName = u.FirstName,
76 LastName = u.LastName,
77 Email = u.Email,
78 }).ToList();
79 }
80 }
81