예제 #1
0
        public async Task <PonyMoveResponseModel> MovePony(string mazeId, PonyMoveRequestModel ponyMoveRequestModel)
        {
            if (!mazes.ContainsKey(mazeId))
            {
                return(new PonyMoveResponseModel
                {
                    IsSuccessful = false,
                    MoveResult = Resources.MazeService.WrongMazeMessage
                });
            }

            if (ponyMoveRequestModel.Direction.Equals(Resources.MazeService.Automatically))
            {
                ponyMoveRequestModel.Direction = mazes[mazeId].GetMoveDirection();
            }
            else
            {
                mazes[mazeId].ShouldSolveAgain = true;
            }

            var moveResponse = await httpClient.PostAsync($"{ponyApiUri}/{mazeId}", new StringContent(
                                                              JsonConvert.SerializeObject(ponyMoveRequestModel).ToString(),
                                                              Encoding.UTF8,
                                                              "application/json"
                                                              ));

            var moveResponseContent = await moveResponse.Content.ReadAsStringAsync();

            var ponyMoveResponseModel = JsonConvert.DeserializeObject <PonyMoveResponseModel>(moveResponseContent);
            var isMoveSuccessful      = ponyMoveResponseModel.MoveResult.Equals(Resources.MazeService.MoveAccepted);

            if (!isMoveSuccessful)
            {
                ponyMoveResponseModel.IsSuccessful = false;

                return(ponyMoveResponseModel);
            }

            var mazeDataResponse = await httpClient.GetAsync($"{ponyApiUri}/{mazeId}");

            var mazeDataResponseContent = await mazeDataResponse.Content.ReadAsStringAsync();

            var mazeDataResponseModel = JsonConvert.DeserializeObject <MazeDataResponseModel>(mazeDataResponseContent);

            ponyMoveResponseModel.IsSuccessful = true;
            ponyMoveResponseModel.MazeData     = mazeDataResponseModel;
            mazes[mazeId].UpdatePonyLocation(ponyMoveRequestModel.Direction);

            return(ponyMoveResponseModel);
        }
 public async Task <PonyMoveResponseModel> Post(string mazeId, [FromBody] PonyMoveRequestModel ponyMoveRequestModel)
 {
     return(await mazeService.MovePony(mazeId, ponyMoveRequestModel));
 }