public async Task <bool> SaveFTPEntriesTree(string PathId, FTPEntriesTreeParam rootEntry) { var entriesToAdd = new HashSet <FTPEntry>(); var sw = new Stopwatch(); sw.Start(); //var entry = // _entryRepo.ExistsByNameAndPathAndIsDirectoryAndIsArchive(rootEntry.Name, PathId, rootEntry.IsDirectory, rootEntry.IsArchive)? // _entryRepo.GetByNameAndPathAndIsDirectoryAndIsArchive(rootEntry.Name, PathId, rootEntry.IsDirectory, rootEntry.IsArchive) : null; FTPEntry entry = null; var res = _putEntry(entry, rootEntry, null, PathId, entriesToAdd); await _logger.Log($"Сохранил корень: {sw.Elapsed.Minutes}:{sw.Elapsed.Seconds}"); sw.Restart(); _saveTree(res, rootEntry.Children, PathId, entriesToAdd); await _logger.Log($"Обошел дерево {sw.Elapsed.Minutes}:{sw.Elapsed.Seconds}"); sw.Restart(); if (entriesToAdd.Count > 0) { await _entryRepo.BulkInsert(entriesToAdd); } await _logger.Log($"Записал новые файлы в базу {sw.Elapsed.Minutes}:{sw.Elapsed.Seconds}"); sw.Stop(); return(true); }
public async Task <IActionResult> AddFileTree([FromQuery] string pathId, [FromBody] FTPEntriesTreeParam entries) { if (!_idProvider.IsIdValid(pathId)) { return(BadRequest("Неверный идентификатор пути")); } if (!_pathRepo.Exists(pathId)) { return(BadRequest("Путь не найден")); } var sw = new Stopwatch(); var b = await _treeSaverService.SaveFTPEntriesTree(pathId, entries); await _logger.Log($"Сохранил дерево файлов {sw.Elapsed}"); sw.Stop(); return(Ok("")); }
private string _putEntry(FTPEntry o, FTPEntriesTreeParam n, string parent, string pathId, ISet <FTPEntry> entriesToAdd) { var sw = new Stopwatch(); sw.Start(); string res; //if (o == null) { res = _idProvider.GenerateId(); var entry = new FTPEntry() { Id = res, Name = n.Name, IsDirectory = n.IsDirectory, IsArchive = n.IsArchive, Size = n.Size, Modified = n.Modified, Path = pathId, Parent = parent, State = StateFile.New }; entriesToAdd.Add(entry); } //else //{ // var modified = n.Size != o.Size || n.Modified != o.Modified; // if (modified) // { // o.Size = n.Size; // o.Modified = n.Modified; // o.State = StateFile.Modified; // _entryRepo.Update(o); // } // res = o.Id; //} _logger.Log($"Добавил элемент {sw.ElapsedMilliseconds}"); sw.Stop(); return(res ?? throw new InvalidOperationException($"Ошибка при сохранении пути {n.Name}. Идентификатор сохраненного объекта оказался null")); }