public async Task <ModuleEntity> GetModule(IOperation operation, int moduleId)
        {
            if (!await moduleStore.IsModuleExists(operation, moduleId))
            {
                throw CommonExceptions.ModuleWasNotFound(operation, moduleId);
            }

            var module = await moduleStore.GetModule(operation, moduleId);

            var fileIds = module.Configurations.Select(item => item.FileId).ToList();
            var files   = (await fileStore.Download(operation, fileIds)).ToList();

            foreach (var configuration in module.Configurations)
            {
                configuration.File = files.FirstOrDefault(file => file.Id == configuration.FileId);

                var fileConfiguration = ModuleConfigurationUtils.Parse(operation, configuration.File);
                if (!fileConfiguration.IsValid())
                {
                    throw CommonExceptions.ModuleConfigurationIsInvalid(operation);
                }

                configuration.OperatingSystems = fileConfiguration.Instructions.Where(item => item.OperatingSystem.HasValue).Select(item => item.OperatingSystem.Value);
            }

            return(module);
        }
            public override void Execute(IOperation operation, IOperationLogger logger)
            {
                if (!moduleStore.IsModuleExists(operation, ModuleId).Result)
                {
                    throw CommonExceptions.ModuleWasNotFound(operation, ModuleId);
                }

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Removing module").Wait();

                moduleStore.DeleteModule(operation, ModuleId).Wait();

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Module status was updated").Wait();
            }
            public override void Execute(IOperation operation, IOperationLogger logger)
            {
                if (!moduleStore.IsModuleExists(operation, ModuleId).Result)
                {
                    throw CommonExceptions.ModuleWasNotFound(operation, ModuleId);
                }

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Setting module status to \"{ModuleStatus.GetDescription()}\"").Wait();

                moduleStore.ChangeStatus(operation, ModuleId, ModuleStatus).Wait();

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Module status was updated").Wait();
            }
            public override void Execute(IOperation operation, IOperationLogger logger)
            {
                if (!moduleStore.IsModuleExists(operation, ModuleId).Result)
                {
                    throw CommonExceptions.ModuleWasNotFound(operation, ModuleId);
                }

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Module update didn't complete successfully, setting status to \"{ModuleStatus.GetDescription()}\"").Wait();

                moduleStore.ChangeStatus(operation, ModuleId, ModuleStatus).Wait();
                moduleStore.AddModuleHistoryRecord(operation, ModuleId, ErrorMessage).Wait();

                logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Module status was updated").Wait();
            }
        protected override void ExecuteWithFallback(IOperation operation, IOperationLogger logger)
        {
            if (!moduleStore.IsModuleExists(operation, ModuleId).Result)
            {
                throw CommonExceptions.ModuleWasNotFound(operation, ModuleId);
            }

            logger.Debug($"[Operation: {operation.ComplexOperationId}, module: {ModuleId}] Starting to download module file configuration").Wait();

            var module = moduleStore.GetModule(operation, ModuleId).Result;
            var fileId = (Regression ? Action switch
            {
                ActionType.Upgrade => module.PreviousConfiguration,
                ActionType.Downgrade => module.NextConfiguration,
                ActionType.NoChanges => module.CurrentConfiguration,
                _ => throw CommonExceptions.ModuleConfigurationWasNotFound(operation)
            } : module.CurrentConfiguration).FileId;