Handler.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using Domain.Entities.Wallets.ValueObject;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Admin.Member.List.Get;
  6. public sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Response?>
  7. {
  8. public async Task<Response?> Handle(Query request, CancellationToken ct)
  9. {
  10. var member = await db.Member.AsNoTracking().Include(x => x.MemberGrade).Include(x => x.MemberStats).Include(x => x.Channel).Include(x => x.Wallet).ThenInclude(w => w!.Balances).FirstOrDefaultAsync(x => x.ID == request.Id, ct);
  11. if (member is null)
  12. {
  13. return null;
  14. }
  15. return new Response
  16. {
  17. ID = member.ID,
  18. SID = member.SID,
  19. Email = member.Email,
  20. Name = member.Name,
  21. FullName = member.FullName,
  22. FirstName = member.FirstName,
  23. LastName = member.LastName,
  24. Phone = member.Phone,
  25. Birthday = member.Birthday,
  26. Gender = member.Gender,
  27. Summary = member.Summary,
  28. Intro = member.Intro,
  29. Thumb = member.Thumb,
  30. Icon = member.Icon,
  31. MemberGradeID = member.MemberGradeID,
  32. GradeName = member.MemberGrade?.KorName,
  33. IsEmailVerified = member.IsEmailVerified,
  34. IsAuthCertified = member.IsAuthCertified,
  35. IsDenied = member.IsDenied,
  36. IsAdmin = member.IsAdmin,
  37. IsWithdraw = member.IsWithdraw,
  38. IsCreator = member.IsCreator,
  39. DeviceInfo = member.DeviceInfo,
  40. SignupIP = member.SignupIP,
  41. LastLoginIp = member.LastLoginIp,
  42. IpAddress = member.IpAddress,
  43. UserAgent = member.UserAgent,
  44. LastLoginAt = member.LastLoginAt,
  45. EmailVerifiedAt = member.EmailVerifiedAt,
  46. AuthCertifiedAt = member.AuthCertifiedAt,
  47. DeniedAt = member.DeniedAt,
  48. DeletedAt = member.DeletedAt,
  49. UpdatedAt = member.UpdatedAt,
  50. CreatedAt = member.CreatedAt,
  51. Following = member.MemberStats?.FollowingCount ?? 0,
  52. Followed = member.MemberStats?.FollowerCount ?? 0,
  53. Channel = member.Channel != null ? new Response.ChannelInfo
  54. {
  55. SID = member.Channel.SID,
  56. Name = member.Channel.Name,
  57. Handle = member.Channel.Handle,
  58. YouTubeUrl = member.Channel.YouTubeUrl
  59. } : null,
  60. Wallet = new Response.WalletInfo
  61. {
  62. Balance = (long)(member.Wallet?.GetTotalAvailable().Value ?? 0),
  63. CreditBalance = (long)(member.Wallet?.GetBalance(WalletBalanceType.Locked).Value ?? 0)
  64. }
  65. };
  66. }
  67. }