public ActionResult <MazeDTO> CreateMaze(Guid userId, [FromBody] MazeFE maze) { _logger.LogInformation("POST request for saving maze from user with id {0}\n\n", userId.ToString()); try { var accessToken = Request.Headers["Bearer"]; var payload = Authorize(accessToken); } catch (ApiException e) { return(Unauthorized(new UnauthorizedError(e.Message))); } try { MazeDTO retMazeDTO = _mazeService.CreateMazeByUserId(userId, maze); return(Created("Maze created", retMazeDTO)); } catch (ApiException e) { if (e.StatusCode == 400) { return(BadRequest(new BadRequestError(e.Message))); } return(NotFound(new NotFoundError(e.Message))); } }
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()); }
private UserDTO BuildUserDTOFromUser(User user) { user.UserMazes = _userMazeRepository.FindOwnMazesByUserId(user.UserId); List <MazeDTO> ownMazes = new List <MazeDTO>(); foreach (UserMaze um in user.UserMazes) { Maze m = _mazeRepository.FindById(um.MazeId); int playersCount = _userMazeRepository.PlayersCountByMazeId(m.MazeId); MazeDTO mDTO = MazeDTO.Builder() .Id(m.MazeId) .Name(m.Name) .PlayersCount(playersCount) .Width(m.Width) .Height(m.Height) .State(m.State.DecompressString()) .CreationTime(m.CreationTime) .Build(); ownMazes.Add(mDTO); } List <UserMaze> solvedMazes = _userMazeRepository.FindLockedMazesByUserId(user.UserId); int totalAccuracy = 0; foreach (UserMaze um in solvedMazes) { totalAccuracy += um.Accuracy.GetValueOrDefault(); } int accuracy = 0; if (solvedMazes.Count != 0) { accuracy = totalAccuracy / solvedMazes.Count; } return(UserDTO.Builder() .Id(user.UserId) .Username(user.Username) .Accuracy(accuracy) .OwnMazes(ownMazes) .SolvedMazesCount(solvedMazes.Count) .Build()); }
public ActionResult <MazeDTO> CreateNewMaze(MazeDTO mazeDTO) { // Handle error if no data is sent. if (mazeDTO == null) { return(BadRequest("Maze data must be set!")); } // Map the DTO to entity and save the entity Maze createdEntity = _service.Create(mazeDTO.ToEntity()); // According to the conventions, we have to return a HTTP 201 created repsonse, with // field "Location" in the header pointing to the created object return(CreatedAtAction( nameof(GetMaze), new { id = createdEntity.Id }, new MazeDTO(createdEntity))); }
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 IEnumerable<string> Get() //{ // return new string[] { "value1", "value2" }; //} public IHttpActionResult GetMaze() { //var maze = new Maze().GenerateMaze(); //var cons = maze.RoadsList.Select(x => new MazeDTO(x.FromStop.Id, x.ToStop.Id, x.Weight)); //Game.Init(); var maze = Game.Maze; var cons = new MazeDTO(); if (maze == null) { return(Ok()); } cons.StopsList = maze?.StopsList.Where(x => !x.IsHidden).ToList(); cons.RoadsList = maze?.RoadsList.Where(x => !x.FromStop.IsHidden).ToList(); cons.MineList = maze?.MineLocations; cons.StartStop = maze?.StartStop; return(Ok(cons)); }
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 ActionResult UpdateMaze(string id, MazeDTO mazeDTO) { // Handle error if no data is sent. if (mazeDTO == null) { return(BadRequest("Maze data must be set!")); } try { // Map the DTO to entity and save it _service.Update(id, mazeDTO.ToEntity()); // According to the conventions, we have to return HTTP 204 No Content. return(NoContent()); } catch (DocumentDoesntExistsException) { // Handle error if the maze to update doesn't exists. return(BadRequest("No Maze exists with the given ID!")); } }
public ActionResult <List <MazeDTO> > GetMazeById(Guid id) { _logger.LogInformation("GET request for maze with Id {0}\n\n", id); IDictionary <string, object> payload; try { var accessToken = Request.Headers["Bearer"]; payload = Authorize(accessToken); } catch (ApiException e) { return(Unauthorized(new UnauthorizedError(e.Message))); } MazeDTO retMazeDTO = _mazeService.GetMazeById(id, (string)payload["userId"]); if (retMazeDTO != null) { return(Ok(retMazeDTO)); } return(NotFound(new NotFoundError("Maze with id " + id.ToString() + " not in database"))); }