AddRemoteUseCase.cs 1.2 KB

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