public async Task <FolderListViewModel> Create(FolderCreateViewModel model, string agentId) { if (string.IsNullOrEmpty(agentId)) { throw new NotAuthorizedUserException("Само потребители могат да качват файлове!"); } if (!await _userManager.IsInRoleAsync(agentId, Enum.GetName(typeof(Role), Role.Administrator)) && !await _userManager.IsInRoleAsync(agentId, Enum.GetName(typeof(Role), Role.Agent)) && !await _userManager.IsInRoleAsync(agentId, Enum.GetName(typeof(Role), Role.Maintenance))) { throw new NotAuthorizedUserException("Нямате право да извършвате това действие!"); } if (await Exist(folderName: model.Name, parentId: model.ParentId)) { throw new ArgumentException("Съществува файл с това име в системата!"); } var folderPath = model.Name; if (model.ParentId != null) { folderPath = Path.Combine(await _dbContext.Folders .Where(f => f.Id == model.ParentId).Select(f => f.RelativePath) .FirstOrDefaultAsync() ?? "", folderPath); } else { folderPath = Path.Combine(_baseMaterialsPath, folderPath); } var physicalFilePath = Path.Combine(HttpRuntime.AppDomainAppPath.TrimEnd('\\'), folderPath.Replace('/', '\\').TrimStart('\\')); Directory.CreateDirectory(physicalFilePath); var folder = new Folders { Name = Path.GetFileName(folderPath), ParentId = model.ParentId, AgentId = agentId, RelativePath = folderPath }; try { _dbContext.Folders.Add(folder); await _dbContext.SaveChangesAsync(); } catch (Exception) { File.Delete(physicalFilePath); throw; } return(await Get(folder.Id, agentId)); }
public async Task <ActionResult> CreateFolder(FolderCreateViewModel model) { if (!ModelState.IsValid) { return(Json(ModelState.ToDictionary())); } var createdFolder = await _folderManager.Create(model, User.Identity.GetUserId()); return(Json(createdFolder)); }