private async Task <IGame> CreateGame(string language, int boardId, IUser player01, IUser player02) { var lexicon = await lexiconService.GetDictionary(language); if (lexicon == null) { throw new ApplicationException($"Invalid language [{language}]"); } var board = await GetBoard(boardId); if (board == null) { throw new ApplicationException($"Invalid board [{boardId}]"); } var p1Details = await userRepository.GetDetails(player01.UserName); var p2Details = await userRepository.GetDetails(player02.UserName); var letterbag = new LetterBag(language); var game = new Game { Id = Guid.NewGuid().ToString().Replace("-", "").ToUpper(), Language = language, CreationDate = DateTime.UtcNow, Board = board, LetterBag = letterbag, PlayMoves = new List <IPlayMove>(), Player01 = new GamePlayer { UserName = player01.UserName, FirstName = p1Details.FirstName, LastName = p1Details.LastName, Rack = letterbag.TakeLetters(7), Score = 0 }, Player02 = new GamePlayer { UserName = player02.UserName, FirstName = p2Details.FirstName, LastName = p2Details.LastName, Rack = letterbag.TakeLetters(7), Score = 0 }, CurrentPlayer = player01.UserName, Status = GameStatus.Ongoing, CurrentStart = DateTime.UtcNow, AvailableLetters = lexicon.Language.GetLettersOnly() }; return(game); }