Exemplo n.º 1
0
        public async Task <IActionResult> Create(IFormFile componentFile)
        {
            string sourceCodeChecker;

            using (var sr = new StreamReader(componentFile.OpenReadStream()))
            {
                sourceCodeChecker = await sr.ReadToEndAsync();
            }
            var checkerList = ComponentList.GetList();
            var fileName    = componentFile.FileName;
            var className   = fileName.Substring(0, fileName.IndexOf(".cs", StringComparison.Ordinal));
            await ComponentList.Add(sourceCodeChecker, fileName);

            var noError = false;

            try
            {
                noError = await ComponentList.ReloadActions();
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
            finally
            {
                var newCheckerList = ComponentList.GetList();
                var newCheckers    = newCheckerList.Except(checkerList).ToList();
                //Только один чекер может быть добавлен
                //Имя файла с чекером должно быть аналогично имени класса
                if (newCheckers.Count == 0 || newCheckers.Count > 1 || className != newCheckers[0])
                {
                    noError = false;
                    ModuleGovernor.AllowBuild();
                    await Delete(className);
                }
            }
            ModuleGovernor.AllowBuild();
            if (noError)
            {
                return(Ok("Пользовательский компонент успешно добавлен"));
            }
            await ComponentList.Delete(componentFile.FileName);

            return(BadRequest("Не удалось добавить компонент. Возможно в коде компонента имеются ошибки"));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Delete([FromHeader] string nameComponent)
        {
            var    noError = false;
            string backUpComponentCode;

            try
            {
                backUpComponentCode = await ComponentList.Delete($"{nameComponent}.cs");
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }

            try
            {
                noError = await ComponentList.ReloadActions();
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
            finally
            {
                if (!noError)
                {
                    await ComponentList.Add(backUpComponentCode, $"{nameComponent}.cs");
                }
            }
            ModuleGovernor.AllowBuild();
            if (noError)
            {
                await DeleteComponentFromDataBase(nameComponent);

                return(Ok("Пользовательский компонент успешно удалён"));
            }
            return(BadRequest("Не удалось удалить компонент. Возможно его используют другие компоненты"));
        }