public async Task <Result <Game, NewGameError> > NewGameAsync(WorldId worldId) { var worldFilePath = System.IO.Path.Combine(_environment.ContentRootPath, "Worlds", $"{worldId}.png"); if (!System.IO.File.Exists(worldFilePath)) { return(NewGameError.WorldNotFound); } List <Event> worldCreationEvents; await using (var worldStream = System.IO.File.OpenRead(worldFilePath)) { worldCreationEvents = _worldSerializer.Deserialize(worldId, worldStream).ToList(); } var newGameId = Guid.NewGuid().ToString(); var gameCreationEvents = worldCreationEvents.Prepend(new RandomSeedSet(new Random().Next())); await _eventRepository.AddEventsAsync(newGameId, gameCreationEvents); var result = await _gameRepository.GetGameAsync(newGameId); if (result.TryGetSuccessValue(out var game)) { return(Convert(game)); } else { throw new InvalidOperationException("Game should been created"); } }