/// <summary> /// Create file file and add it in branch /// </summary> /// <param Metafile="metafile">Object represent a file</param> public async Task CreateFile(Metafile metafile) { // Search branch var branchToUpdate = await this.GetBranch(metafile.BranchId); if (branchToUpdate == null) { _logger.Log(LogLevel.Warn, LOG_CATEGORY, $"BranchNotFound : {metafile.BranchId} ", new { Environment.StackTrace }); throw new BranchException($"BranchNotFound: {metafile.BranchId}"); } // Update head var headFile = branchToUpdate.MetafilesHead.FirstOrDefault <MetafileHead>(mf => mf.Id == metafile.BranchId + "_" + metafile.Path + "_HEAD"); if (headFile != null) { _logger.Log(LogLevel.Warn, LOG_CATEGORY, $"File {metafile.Path} already exist on server ", new { }); headFile.Record = metafile; headFile.HeadFile = metafile.Id; headFile.IsActive = true; } else { _logger.Log(LogLevel.Warn, LOG_CATEGORY, $"File {metafile.Path} add on server ", new { }); //Add new head in branch and index file index flatten. var metaFileHead = new MetafileHead(); metaFileHead.Id = metafile.BranchId + "_" + metafile.Path + "_HEAD"; metaFileHead.HeadFile = metafile.Id; metaFileHead.IsActive = true; metaFileHead.Record = metafile; branchToUpdate.MetafilesHead.Add(metaFileHead); } // Remove branch in cache Task <Branch> removedTask; _branches.TryRemove(metafile.BranchId, out removedTask); //Update branch await this.AddOrUpdateBranch(branchToUpdate); //Update file await this.AddMetafile(metafile); }
/// <summary> /// Remove branch. /// </summary> /// <param BranchName="branchName">Name of branch</param> /// <param Path="path">Path in branch.</param> /// <returns>Return true if the file delete in database</returns> public async Task <bool> DeleteFile(string branchName, string path) { var branch = await this.GetBranch(branchName); if (branch == null) { _logger.Log(LogLevel.Warn, LOG_CATEGORY, $"BranchNotFound : {branchName} ", new { Environment.StackTrace }); throw new BranchException($"BranchNotFound : {branchName}"); } // Todo asset check si le head existe MetafileHead fileToDelete = branch.MetafilesHead.FirstOrDefault(mf => mf.Id == branchName + "_" + path + "_HEAD"); if (fileToDelete == null) { _logger.Log(LogLevel.Error, LOG_CATEGORY, $"Specified file not found on Elasticsearch", new { path }); throw new FileException($"Specified file not found on Elasticsearch. Original file : { path }"); } // Remove branch in cache Task <Branch> removedTask; _branches.TryRemove(branchName, out removedTask); // Todo asset mettre la branche en désactiver à la place de la supprimer // Try to update branch without file foreach (var mfh in branch.MetafilesHead) { if (mfh.Id == fileToDelete.Id) { mfh.IsActive = false; } } var updatedBranch = await this.AddOrUpdateBranch(branch); if (updatedBranch == null) { return(false); } return(true); }