Ejemplo n.º 1
0
        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)));
            }
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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)));
        }
Ejemplo n.º 5
0
        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());
        }
Ejemplo n.º 6
0
        //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));
        }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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!"));
            }
        }
Ejemplo n.º 9
0
        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")));
        }