Handler.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Application.Abstractions.Data;
  2. using Domain.Entities.Members;
  3. using MemberEntity = Domain.Entities.Members.Member;
  4. using MediatR;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace Application.Features.Member.List.Create;
  7. public sealed class Handler(IAppDbContext db) : IRequestHandler<Command>
  8. {
  9. public async Task Handle(Command request, CancellationToken ct)
  10. {
  11. // 이메일 중복 체크
  12. if (await db.Member.AnyAsync(x => x.Email == request.Email, ct))
  13. {
  14. throw new InvalidOperationException("이미 등록된 이메일입니다.");
  15. }
  16. // 별명 중복 체크
  17. if (request.Name is not null && await db.Member.AnyAsync(x => x.Name == request.Name, ct))
  18. {
  19. throw new InvalidOperationException("이미 등록된 별명입니다.");
  20. }
  21. // 회원 생성
  22. var member = MemberEntity.Create(request.Email);
  23. await db.Member.AddAsync(member, ct);
  24. await db.SaveChangesAsync(ct);
  25. // 기본 정보 업데이트
  26. await db.Member.Where(x => x.ID == member.ID).ExecuteUpdateAsync(s => s
  27. .SetProperty(x => x.MemberGradeID, request.MemberGradeID)
  28. .SetProperty(x => x.Name, request.Name)
  29. .SetProperty(x => x.Password, request.Password)
  30. .SetProperty(x => x.FirstName, request.FirstName)
  31. .SetProperty(x => x.LastName, request.LastName)
  32. .SetProperty(x => x.Intro, request.Intro)
  33. .SetProperty(x => x.Summary, request.Summary)
  34. .SetProperty(x => x.Phone, request.Phone)
  35. .SetProperty(x => x.Birthday, request.Birthday)
  36. .SetProperty(x => x.Gender, request.Gender)
  37. .SetProperty(x => x.Thumb, request.ThumbUrl)
  38. .SetProperty(x => x.Icon, request.IconUrl)
  39. .SetProperty(x => x.IsEmailVerified, request.IsEmailVerified)
  40. .SetProperty(x => x.IsAuthCertified, request.IsAuthCertified)
  41. .SetProperty(x => x.IsDenied, request.IsDenied)
  42. .SetProperty(x => x.IsAdmin, request.IsAdmin)
  43. .SetProperty(x => x.IsWithdraw, request.IsWithdraw),
  44. ct);
  45. // MemberApprove 생성
  46. await db.MemberApprove.AddAsync(
  47. MemberApprove.Create(member.ID)
  48. , ct);
  49. // YouTube 채널 정보가 있는 경우
  50. if (!string.IsNullOrWhiteSpace(request.YouTubeSID) &&
  51. !string.IsNullOrWhiteSpace(request.YouTubeName) &&
  52. !string.IsNullOrWhiteSpace(request.YouTubeUrl))
  53. {
  54. await db.Channel.AddAsync(Channel.Create(
  55. member.ID,
  56. request.YouTubeSID,
  57. request.YouTubeName,
  58. request.YouTubeUrl
  59. ), ct);
  60. }
  61. await db.SaveChangesAsync(ct);
  62. }
  63. }