Пример #1
0
        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));
        }