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("Не удалось добавить компонент. Возможно в коде компонента имеются ошибки")); }
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("Не удалось удалить компонент. Возможно его используют другие компоненты")); }