GetAllVersionedFiles.kt

package com.sebastmar.module.report.internal.domain

import com.sebastmar.module.report.info.VersionedFile
import com.sebastmar.module.report.info.VersionedFile.Status.Created
import com.sebastmar.module.report.info.VersionedFile.Status.Deleted
import com.sebastmar.module.report.info.VersionedFile.Status.Modified
import com.sebastmar.module.report.internal.system.SystemWrapper

/**
 * Retrieves a list of all files that have been updated (created, modified, or deleted)
 * in the current pull request.
 */
internal interface GetAllVersionedFiles {
    operator fun invoke(): List<VersionedFile>
}

/**
 * Combines the results of created, modified, and deleted files obtained from [GetVersionedFiles]
 * to produce an exhaustive list of all versioned files.
 */
internal class GetAllVersionedFilesImpl(
    private val systemWrapper: SystemWrapper,
    private val getVersionedFiles: GetVersionedFiles,
) : GetAllVersionedFiles {

    override fun invoke(): List<VersionedFile> {
        return buildList {
            addAll(getVersionedFiles(systemWrapper.createdFiles(), Created))
            addAll(getVersionedFiles(systemWrapper.modifiedFiles(), Modified))
            addAll(getVersionedFiles(systemWrapper.deletedFiles(), Deleted))
        }
    }
}