Handler.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Domain.Entities.Developers;
  4. using Microsoft.EntityFrameworkCore;
  5. using SharedKernel.Results;
  6. namespace Application.Features.Api.Developers.Profile.UpsertProfile;
  7. internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command, Result<Response>>
  8. {
  9. public async Task<Result<Response>> Handle(Command request, CancellationToken ct)
  10. {
  11. if (string.IsNullOrWhiteSpace(request.CompanyName))
  12. {
  13. return Result.Failure<Response>(Error.Problem("Developer.CompanyNameRequired", "회사명은 필수입니다."));
  14. }
  15. if (string.IsNullOrWhiteSpace(request.BusinessNumber))
  16. {
  17. return Result.Failure<Response>(Error.Problem("Developer.BusinessNumberRequired", "사업자번호는 필수입니다."));
  18. }
  19. if (string.IsNullOrWhiteSpace(request.CeoName))
  20. {
  21. return Result.Failure<Response>(Error.Problem("Developer.CeoNameRequired", "대표자명은 필수입니다."));
  22. }
  23. if (string.IsNullOrWhiteSpace(request.ContactName))
  24. {
  25. return Result.Failure<Response>(Error.Problem("Developer.ContactNameRequired", "담당자명은 필수입니다."));
  26. }
  27. if (string.IsNullOrWhiteSpace(request.ContactPhone))
  28. {
  29. return Result.Failure<Response>(Error.Problem("Developer.ContactPhoneRequired", "담당자 휴대폰은 필수입니다."));
  30. }
  31. var existing = await db.Developer
  32. .AsTracking()
  33. .FirstOrDefaultAsync(c => c.MemberID == request.MemberID, ct);
  34. if (existing is null)
  35. {
  36. var newDev = Developer.Create(
  37. request.MemberID,
  38. request.CompanyName.Trim(),
  39. request.BusinessNumber.Trim(),
  40. request.CeoName.Trim(),
  41. request.ContactName.Trim(),
  42. request.ContactPhone.Trim()
  43. );
  44. await db.Developer.AddAsync(newDev, ct);
  45. await db.SaveChangesAsync(ct);
  46. return Result.Success(new Response(newDev.ID, true));
  47. }
  48. existing.UpdateCompanyInfo(
  49. request.CompanyName.Trim(),
  50. request.BusinessNumber.Trim(),
  51. request.CeoName.Trim(),
  52. request.ContactName.Trim(),
  53. request.ContactPhone.Trim()
  54. );
  55. await db.SaveChangesAsync(ct);
  56. return Result.Success(new Response(existing.ID, false));
  57. }
  58. }