private MazeDTO BuildMazeDTOFromMaze(Maze maze, Guid userId) { int playersCount = _userMazeRepository.PlayersCountByMazeId(maze.MazeId); UserMaze userMaze = _userMazeRepository.FindOwnByMazeId(maze.MazeId); User user = _userRepository.FindById(userMaze.UserId); UserMaze userMazeSolved = _userMazeRepository.FindById(maze.MazeId, userId); bool solved = false; if (userMazeSolved != null) { solved = userMazeSolved.Solved; } return(MazeDTO.Builder() .Id(maze.MazeId) .Name(maze.Name) .OwnerId(user.UserId) .Owner(user.Username) .PlayersCount(playersCount) .Width(maze.Width) .Height(maze.Height) .State(maze.State.DecompressString()) .CreationTime(maze.CreationTime) .Solved(solved) .Build()); }
public MazeSolution GetMazeSolution(Guid mazeId, string userId) { Maze maze = _mazeRepository.FindById(mazeId); Guid userGuid = new Guid(userId); User user = _userRepository.FindById(userGuid); UserMaze userMaze = _userMazeRepository.FindById(mazeId, userGuid); if (userMaze != null) { _userMazeRepository.Update(maze.MazeId, user.UserId, "LOCKED", true); } else { userMaze = UserMaze.Create(user, maze, "LOCKED", true, 0, String.Empty.CompressString()); _userMazeRepository.Create(userMaze); } if (maze == null) { return(null); } return(new MazeSolution(maze.Solution.DecompressString(), maze.Width, '1')); }
public virtual UserMaze Update(Guid mazeId, Guid userId, string state, bool solved) { UserMaze userMaze = FindById(mazeId, userId); userMaze.State = state; userMaze.Solved = solved; _context.SaveChanges(); return(userMaze); }
public virtual UserMaze Create(UserMaze userMaze) { _context.UserMazes.Add(userMaze); var result = _context.SaveChanges(); // ensure UserMaze saved to db if (result > 0) { _logger.LogInformation("UserMaze with UserId {0} and MazeId {1} saved into database\n\n", userMaze.UserId, userMaze.MazeId); return(userMaze); } else { _logger.LogError("Server error! UserMaze with UserId {0} and MazeId {1} not saved into database\n\n", userMaze.UserId, userMaze.MazeId); return(null); } }
public Tuple <Score, MazeSolution> GetUserSolution(Guid mazeId, string userId) { Guid userGuid = new Guid(userId); UserMaze um = _userMazeRepository.FindById(mazeId, userGuid); if (um == null) { throw new ApiException(404, "User solution not found"); } string userSolution = um.UserSolution.DecompressString(); Maze maze = _mazeRepository.FindById(mazeId); MazeSolution sol = new MazeSolution(userSolution, maze.Width, '4'); Score userAccuracy = new Score(um.Accuracy.GetValueOrDefault()); return(new Tuple <Score, MazeSolution>(userAccuracy, sol)); }
private MazeDTO BuildMazeDTOFromMaze(Maze maze) { int playersCount = _userMazeRepository.PlayersCountByMazeId(maze.MazeId); UserMaze userMaze = _userMazeRepository.FindOwnByMazeId(maze.MazeId); User user = _userRepository.FindById(userMaze.UserId); return(MazeDTO.Builder() .Id(maze.MazeId) .Name(maze.Name) .OwnerId(user.UserId) .Owner(user.Username) .PlayersCount(playersCount) .Width(maze.Width) .Height(maze.Height) .State(maze.State.DecompressString()) .CreationTime(maze.CreationTime) .Build()); }
public MazeDTO CreateMazeByUserId(Guid userId, MazeFE maze) { User user = _userRepository.FindById(userId); if (user == null) { _logger.LogError("User with id " + userId.ToString() + " not in database\n\n"); throw new ApiException(404, "User with id " + userId.ToString() + " not in database"); } string solution; try { solution = _bfsService.ValidateMaze(maze); } catch (ApiException e) { _logger.LogError(e.Message); throw e; } Maze mazeBE = BuildMazeFromMazeFE(maze, solution); Maze storedMaze = CreateMaze(mazeBE); UserMaze userMaze = UserMaze.Create(user, storedMaze); UserMaze retUserMaze = _userMazeRepository.Create(userMaze); return(MazeDTO.Builder() .Id(storedMaze.MazeId) .Name(storedMaze.Name) .OwnerId(user.UserId) .Owner(user.Username) .PlayersCount(0) .Width(storedMaze.Width) .Height(storedMaze.Height) .State(storedMaze.State.DecompressString()) .CreationTime(storedMaze.CreationTime) .Build()); }
public Score Submit(Guid mazeId, string userId, MazeFE userSolution) { Guid userGuid = new Guid(userId); User user = _userRepository.FindById(userGuid); if (_userMazeRepository.FindById(mazeId, userGuid) != null) { throw new ApiException(403, "Already submitted solution for this maze"); } if (!ValidateUserSolution(userSolution)) { throw new ApiException(400, "Invalid solution"); } Maze maze = _mazeRepository.FindById(mazeId); int userSolutionSize = userSolution.PointList.Count(p => p.Value == 4); int solutionSize = maze.Solution.DecompressString().Count(c => c == '1'); int deviation = Convert.ToInt32((userSolutionSize - solutionSize) * 100 / solutionSize); int accuracy = Math.Max(0, 100 - deviation); string userSolutionString = ""; foreach (Point point in userSolution.PointList) { userSolutionString += point.Value; } UserMaze um = UserMaze.Create(user, maze, "LOCKED", true, accuracy, userSolutionString.CompressString()); _userMazeRepository.Create(um); return(new Score(accuracy)); }