Handler.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Data;
  3. using Domain.Entities.Wallets.ValueObject;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.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) return null;
  12. return new Response
  13. {
  14. ID = member.ID,
  15. SID = member.SID,
  16. Email = member.Email,
  17. Name = member.Name,
  18. FullName = member.FullName,
  19. FirstName = member.FirstName,
  20. LastName = member.LastName,
  21. Phone = member.Phone,
  22. Birthday = member.Birthday,
  23. Gender = member.Gender,
  24. Summary = member.Summary,
  25. Intro = member.Intro,
  26. Thumb = member.Thumb,
  27. Icon = member.Icon,
  28. MemberGradeID = member.MemberGradeID,
  29. GradeName = member.MemberGrade?.KorName,
  30. IsEmailVerified = member.IsEmailVerified,
  31. IsAuthCertified = member.IsAuthCertified,
  32. IsDenied = member.IsDenied,
  33. IsAdmin = member.IsAdmin,
  34. IsWithdraw = member.IsWithdraw,
  35. IsCreator = member.IsCreator,
  36. DeviceInfo = member.DeviceInfo,
  37. SignupIP = member.SignupIP,
  38. LastLoginIp = member.LastLoginIp,
  39. IpAddress = member.IpAddress,
  40. UserAgent = member.UserAgent,
  41. LastLoginAt = member.LastLoginAt,
  42. EmailVerifiedAt = member.EmailVerifiedAt,
  43. AuthCertifiedAt = member.AuthCertifiedAt,
  44. DeniedAt = member.DeniedAt,
  45. DeletedAt = member.DeletedAt,
  46. UpdatedAt = member.UpdatedAt,
  47. CreatedAt = member.CreatedAt,
  48. Following = member.MemberStats?.FollowingCount ?? 0,
  49. Followed = member.MemberStats?.FollowerCount ?? 0,
  50. Channel = member.Channel != null ? new Response.ChannelInfo
  51. {
  52. SID = member.Channel.SID,
  53. Name = member.Channel.Name,
  54. Handle = member.Channel.Handle,
  55. YouTubeUrl = member.Channel.YouTubeUrl
  56. } : null,
  57. Wallet = new Response.WalletInfo
  58. {
  59. Balance = (long)(member.Wallet?.GetTotalAvailable().Value ?? 0),
  60. CreditBalance = (long)(member.Wallet?.GetBalance(WalletBalanceType.Locked).Value ?? 0)
  61. }
  62. };
  63. }
  64. }