Update projects controller to transfer async

What does this MR do and why?

Update projects controller to transfer async

Changes are behind groups_and_projects_async_transfer feature flag

Closes #586547 (closed)

References

Screenshots or screen recordings

Before After

How to set up and validate locally

In rails console:

# 1. Enable the feature flag
Feature.enable(:groups_and_projects_async_transfer)

# 2. Create test data
user = User.find_by(username: "root")

group = Groups::CreateService.new(user, {
  name: "Transfer Target",
  path: "transfer-target",
  organization_id: Organizations::Organization.default_organization.id
}).execute[:group]

project = Projects::CreateService.new(user, {
  name: "Transfer Test",
  path: "transfer-test",
  namespace_id: user.namespace.id,
  organization_id: Organizations::Organization.default_organization.id
}).execute

# 3. Schedule async transfer
service = Projects::TransferService.new(project, user)
result = service.schedule_async_transfer(group)

result                                          # => true
project.project_namespace.reload.state          # => "transfer_scheduled"
service.error                                   # => nil

# 4. Verify worker completed the transfer (wait ~10 seconds)
sleep 10
project.reload
project.full_path                               # => "transfer-target/transfer-test"
project.namespace.full_path                     # => "transfer-target"
project.project_namespace.state                 # => "ancestor_inherited"

# 5. Test failure path
project.project_namespace.update_column(:state, Namespace.states[:creation_in_progress])
service = Projects::TransferService.new(project, user)
result = service.schedule_async_transfer(group)

result                                          # => false
service.error                                   # => "Unable to initiate transfer. The project may already have a transfer in progress."

# Reset state
project.project_namespace.update_column(:state, Namespace.states[:ancestor_inherited])

# 6. Clean up
Project.find_by(path: "transfer-test")&.destroy!
Group.find_by(path: "transfer-target")&.destroy!
Feature.disable(:groups_and_projects_async_transfer)

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Shubham Kumar

Merge request reports

Loading
Loading