public async Task SeedGamesAsync() { var httpClient = new HttpClient(); for (var i = 0; i <= 300; i += 100) { var teseraGames = await httpClient.GetFromJsonAsync <GameTeseraResource[]>( $"https://api.tesera.ru/games?offset={i}&limit=100"); teseraGames = teseraGames.Where(g => g.TeseraId.ToString() != g.Title).ToArray(); foreach (var teseraGame in teseraGames) { if (await _mnpContext.Games.AnyAsync(g => g.Name == teseraGame.Title)) { continue; } var game = teseraGame.ToGame(); await _mnpContext.Games.AddAsync(game); //TODO: Implement file upload; } } await _mnpContext.SaveChangesAsync(); }
public async Task <Guid> AddLobbyAsync(Lobby lobby) { lobby.CreationDate = DateTime.Now; lobby.IsActive = true; var currentUserId = await _userService.GetCurrentUserIdAsync(); lobby.LobbyPlayers = new List <LobbyPlayer> { new() { PlayerId = currentUserId, IsCreator = true } }; await _mnpContext.AddAsync(lobby); await _mnpContext.SaveChangesAsync(); return(lobby.Id); }
public async Task <File> UploadFileAsync(Stream stream, FileInfo fileInfo, bool needToSaveChanges = true) { EnsureArgumentsAreValid(stream, fileInfo); var fileHash = fileInfo.Hash; if (fileHash.IsNullOrWhiteSpace()) { fileHash = ComputeMd5Hash(stream); } var fileInDb = await _mnpContext.Files.AsNoTracking().SingleOrDefaultAsync(f => f.Hash == fileHash); if (fileInDb != null) { _logger.LogInformation($"File with hash {fileHash} already uploaded."); return(fileInDb); } var mimeType = fileInfo.MimeType ?? MimeTypes.GetMimeType(fileInfo.Extension); var filePath = BuildFilePath(fileHash); var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write); await stream.CopyToAsync(fileStream); await fileStream.DisposeAsync(); var file = new File { CreationDate = DateTime.Now, FileLink = "/Files/" + fileHash, Filename = fileInfo.Filename ?? fileHash, Hash = fileHash, MimeType = mimeType }; if (needToSaveChanges) { await _mnpContext.AddAsync(file); await _mnpContext.SaveChangesAsync(); } return(file); }