AddRemoteUseCase.cs 1007 B

12345678910111213141516171819202122232425262728293031323334
  1. namespace RackPeek.Domain.Git.UseCases;
  2. public interface IAddRemoteUseCase
  3. {
  4. Task<string?> ExecuteAsync(string url);
  5. }
  6. public class AddRemoteUseCase(IGitRepository repo) : IAddRemoteUseCase
  7. {
  8. public Task<string?> ExecuteAsync(string url)
  9. {
  10. if (!repo.IsAvailable)
  11. return Task.FromResult<string?>("Git is not available.");
  12. if (string.IsNullOrWhiteSpace(url))
  13. return Task.FromResult<string?>("URL is required.");
  14. if (!url.Trim().StartsWith("https://", StringComparison.OrdinalIgnoreCase))
  15. return Task.FromResult<string?>("Only HTTPS URLs are supported.");
  16. if (repo.HasRemote())
  17. return Task.FromResult<string?>("Remote already configured.");
  18. try
  19. {
  20. repo.AddRemote("origin", url.Trim());
  21. return Task.FromResult<string?>(null);
  22. }
  23. catch (Exception ex)
  24. {
  25. return Task.FromResult<string?>($"Add remote failed: {ex.Message}");
  26. }
  27. }
  28. }