add CharaDataAttemptRestore
This commit is contained in:
		
							
								
								
									
										2
									
								
								MareAPI
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								MareAPI
									
									
									
									
									
								
							 Submodule MareAPI updated: 4d8c380dab...fef2365280
									
								
							| @@ -124,6 +124,55 @@ public partial class MareHub | |||||||
|         return [.. ownCharaData.Select(GetCharaDataFullDto)]; |         return [.. ownCharaData.Select(GetCharaDataFullDto)]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     [Authorize(Policy = "Identified")] | ||||||
|  |     public async Task<CharaDataFullDto?> CharaDataAttemptRestore(string id) | ||||||
|  |     { | ||||||
|  |         _logger.LogCallInfo(MareHubLogger.Args(id)); | ||||||
|  |         var charaData = await DbContext.CharaData | ||||||
|  |             .Include(u => u.Files) | ||||||
|  |             .Include(u => u.FileSwaps) | ||||||
|  |             .Include(u => u.OriginalFiles) | ||||||
|  |             .Include(u => u.AllowedIndividiuals) | ||||||
|  |             .ThenInclude(u => u.AllowedUser) | ||||||
|  |             .Include(u => u.AllowedIndividiuals) | ||||||
|  |             .ThenInclude(u => u.AllowedGroup) | ||||||
|  |             .Include(u => u.Poses) | ||||||
|  |             .AsSplitQuery() | ||||||
|  |             .SingleOrDefaultAsync(s => s.Id == id && s.UploaderUID == UserUID) | ||||||
|  |             .ConfigureAwait(false); | ||||||
|  |         if (charaData == null) | ||||||
|  |             return null; | ||||||
|  |  | ||||||
|  |         var currentHashes = charaData.Files.Select(f => f.FileCacheHash).ToList(); | ||||||
|  |         var missingFiles = charaData.OriginalFiles.Where(c => !currentHashes.Contains(c.Hash, StringComparer.Ordinal)).ToList(); | ||||||
|  |  | ||||||
|  |         // now let's see what's on the db still | ||||||
|  |         var existingDbFiles = await DbContext.Files | ||||||
|  |             .Where(f => missingFiles.Select(k => k.Hash).Distinct().Contains(f.Hash)) | ||||||
|  |             .ToListAsync() | ||||||
|  |             .ConfigureAwait(false); | ||||||
|  |  | ||||||
|  |         // now shove it all back into the db | ||||||
|  |         foreach (var dbFile in existingDbFiles) | ||||||
|  |         { | ||||||
|  |             var missingFileEntry = missingFiles.First(f => string.Equals(f.Hash, dbFile.Hash, StringComparison.Ordinal)); | ||||||
|  |             charaData.Files.Add(new CharaDataFile() | ||||||
|  |             { | ||||||
|  |                 FileCache = dbFile, | ||||||
|  |                 GamePath = missingFileEntry.GamePath, | ||||||
|  |                 Parent = charaData | ||||||
|  |             }); | ||||||
|  |             missingFiles.Remove(missingFileEntry); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (existingDbFiles.Any()) | ||||||
|  |         { | ||||||
|  |             await DbContext.SaveChangesAsync().ConfigureAwait(false); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return GetCharaDataFullDto(charaData); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     [Authorize(Policy = "Identified")] |     [Authorize(Policy = "Identified")] | ||||||
|     public async Task<List<CharaDataMetaInfoDto>> CharaDataGetShared() |     public async Task<List<CharaDataMetaInfoDto>> CharaDataGetShared() | ||||||
|     { |     { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Stanley Dimant
					Stanley Dimant