Introduce MergeTrain::BaseService

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

The following discussion from !51433 (merged) should be addressed:

  • @allison.browne started a discussion: (+1 comment)

    If we don't pass or use project, user or params I don't think it still makes sense to inherit from BaseService. Instead we could create a new MergeTrain::BaseService class or include BaseServiceUtility directly in MergeTrains::RefreshService so that this perform method looks like:

    def perform(target_project_id, target_branch)
     ::MergeTrains::RefreshService
            .new
            .execute(target_project_id, target_branch)
    end

    See the note in the base service:

    # TODO: New services should consider inheriting from
    #       BaseContainerService, or create new base class:
    #       https://gitlab.com/gitlab-org/gitlab/-/issues/216672

    or alternately if we do use BaseService we can pass target_project on initialization:

     ::MergeTrains::RefreshService
            .new(target_project)
            .execute(target_branch)

    My preference would be to prefer composition over inheritance and use include BaseServiceUtility directly in MergeTrain::RefreshService.

Edited by 🤖 GitLab Bot 🤖