Handler.cs 2.8 KB

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