Handler.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Domain.Entities.Developers.ValueObject;
  4. using Microsoft.EntityFrameworkCore;
  5. using Microsoft.Extensions.Configuration;
  6. using SharedKernel.Results;
  7. namespace Application.Features.Admin.Developers.Accounts.ApproveDeveloper;
  8. internal sealed class Handler(IAppDbContext db, IConfiguration config) : ICommandHandler<Command, Result>
  9. {
  10. public async Task<Result> Handle(Command request, CancellationToken ct)
  11. {
  12. var dev = await db.Developer
  13. .AsTracking()
  14. .FirstOrDefaultAsync(c => c.ID == request.DeveloperID, ct);
  15. if (dev is null)
  16. {
  17. return Result.Failure(Error.NotFound("Developer.NotFound", "개발자 정보를 찾을 수 없습니다."));
  18. }
  19. // dev 환경: Developers:SkipKyc=true 이면 KYC 검증 우회 (NICE/다날 미연동 상태에서도 진행 가능).
  20. // production 에는 이 설정을 두지 말 것.
  21. var skipKyc = config.GetValue<bool>("Developers:SkipKyc", false);
  22. if (!skipKyc && dev.KycStatus != KycStatus.Verified)
  23. {
  24. return Result.Failure(Error.Problem("Developer.KycRequired", "본인인증이 완료되지 않은 계정은 승인할 수 없습니다."));
  25. }
  26. dev.Approve(request.AdminID);
  27. await db.SaveChangesAsync(ct);
  28. return Result.Success();
  29. }
  30. }