public void Edit(EditWebRequestRequestModel model)
 {
     _editRequestRepository.Edit(model.SongRequestId,
                                 string.IsNullOrWhiteSpace(model.Artist) && string.IsNullOrWhiteSpace(model.SelectedInstrument) ?
                                 model.Title :
                                 $"{model.Artist} - {model.Title} ({model.SelectedInstrument})",
                                 model.Username, model.IsMod);
 }
        public IActionResult EditSong([FromBody] RequestSongModel requestData)
        {
            if (User.Identity.IsAuthenticated)
            {
                var requestModel = new EditWebRequestRequestModel
                {
                    SongRequestId      = int.Parse(requestData.SongRequestId),
                    Title              = requestData.Title,
                    Artist             = requestData.Artist,
                    SelectedInstrument = requestData.SelectedInstrument,
                    IsVip              = requestData.IsVip,
                    IsSuperVip         = requestData.IsSuperVip,
                    Username           = User.Identity.Name.ToLower(),
                    IsMod              = _modService.IsUserModerator(User.Identity.Name)
                };

                var editRequestResult =
                    _playlistApiClient.EditWebRequest(requestModel).Result.EditResult;

                switch (editRequestResult)
                {
                case EditRequestResult.Success:
                    return(Ok());

                case EditRequestResult.NoRequestEntered:
                    return(BadRequest(new
                    {
                        Message = "You haven't entered a request. Please enter a Song name and/or Artist"
                    }));

                case EditRequestResult.NotYourRequest:
                    return(BadRequest(new
                    {
                        Message = "This doesn't seem to be your request. Please try again"
                    }));

                case EditRequestResult.RequestAlreadyRemoved:
                    return(BadRequest(new
                    {
                        Message = "It seems like this song has been played or removed from the list"
                    }));

                default:
                    return(BadRequest(new
                    {
                        Message = "An error occurred, please wait until the issue is resolved"
                    }));
                }
            }

            return(BadRequest(new { Message = "It looks like you're not logged in, log in and try again" }));
        }
        public async Task <EditWebRequestResponse> EditWebRequest(EditWebRequestRequestModel editWebRequestRequestModel)
        {
            try
            {
                var result = await _playlistClient.PostAsync("EditWebRequest",
                                                             HttpClientHelper.GetJsonData(editWebRequestRequestModel));

                return(JsonConvert.DeserializeObject <EditWebRequestResponse>(await result.Content.ReadAsStringAsync()));
            }
            catch (Exception e)
            {
                return(HttpClientHelper.LogError <EditWebRequestResponse>(_logger, e, new object[] { editWebRequestRequestModel }));
            }
        }
        public IActionResult EditWebRequest([FromBody] EditWebRequestRequestModel editWebRequestRequestModel)
        {
            try
            {
                var result = _playlistService.EditWebRequest(editWebRequestRequestModel);

                // Need a new EditWebRequestResponse model to hold the edit result enum
                var responseModel = new EditWebRequestResponse
                {
                    EditResult = result
                };

                return(new JsonResult(responseModel));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error in EditWebRequest", editWebRequestRequestModel);
                return(BadRequest());
            }
        }
        public EditRequestResult EditWebRequest(EditWebRequestRequestModel editWebRequestRequestModel)
        {
            if (editWebRequestRequestModel == null)
            {
                return(EditRequestResult.NoRequestEntered);
            }

            try
            {
                _editRequestCommand.Edit(editWebRequestRequestModel);

                UpdateFullPlaylist();

                return(EditRequestResult.Success);
            }
            catch (UnauthorizedAccessException)
            {
                return(EditRequestResult.NotYourRequest);
            }
            catch (Exception)
            {
                return(EditRequestResult.UnSuccessful);
            }
        }
        public bool EditRequest(string username, string commandText, bool isMod, out string songRequestText, out bool syntaxError)
        {
            if (string.IsNullOrWhiteSpace(commandText))
            {
                songRequestText = string.Empty;
                syntaxError     = true;
                return(false);
            }

            var commandTextTerms = commandText.Trim().Split(" ");

            SongRequestType   editRequestType;
            EditRequestResult result;

            // If the command text doesn't parse, we should attempt to edit a regular request
            if (!int.TryParse(commandTextTerms[0].Trim(), out var playlistIndex))
            {
                songRequestText = commandText;

                // edit regular request if it exists
                if (_getUsersCurrentRequestCountsQuery.GetUsersCurrentRequestCounts(username,
                                                                                    SongRequestType.Regular) == 1)
                {
                    editRequestType = SongRequestType.Regular;
                }
                // if true return, otherwise attempt to edit and refund a single vip
                else if (_getUsersCurrentRequestCountsQuery.GetUsersCurrentRequestCounts(username, SongRequestType.Vip) == 1)
                {
                    editRequestType = SongRequestType.Vip;
                }

                else if (_getUsersCurrentRequestCountsQuery.GetUsersCurrentRequestCounts(username,
                                                                                         SongRequestType.SuperVip) == 1)
                {
                    editRequestType = SongRequestType.SuperVip;
                }
                else
                {
                    songRequestText = string.Empty;
                    syntaxError     = true;
                    return(false);
                }

                var formattedRequest =
                    FormattedRequest.GetFormattedRequest(songRequestText);

                var songRequestId    = _getSingleSongRequestIdRepository.Get(username, editRequestType);
                var editRequestModel = new EditWebRequestRequestModel
                {
                    SongRequestId      = songRequestId,
                    Title              = formattedRequest?.SongName ?? songRequestText,
                    Artist             = formattedRequest?.SongArtist ?? string.Empty,
                    SelectedInstrument = formattedRequest?.InstrumentName ?? string.Empty,
                    IsVip              = editRequestType == SongRequestType.Vip,
                    IsSuperVip         = editRequestType == SongRequestType.SuperVip,
                    Username           = username,
                    IsMod              = isMod
                };

                result = EditWebRequest(editRequestModel);
            }
            else
            {
                songRequestText = string.Join(' ', commandTextTerms);

                // Edit request at position playlistIndex
                var songRequest = _getUsersRequestAtPlaylistIndexQuery.Get(username, playlistIndex,
                                                                           _currentRequest.isSuperVip || _currentRequest.isVip);

                if (songRequest == null)
                {
                    syntaxError     = true;
                    songRequestText = string.Empty;
                    return(false);
                }

                var formattedRequest =
                    FormattedRequest.GetFormattedRequest(commandText);
                var editRequestModel = new EditWebRequestRequestModel
                {
                    SongRequestId      = songRequest.SongRequestId,
                    Title              = formattedRequest?.SongName ?? songRequestText,
                    Artist             = formattedRequest?.SongArtist ?? string.Empty,
                    SelectedInstrument = formattedRequest?.InstrumentName ?? string.Empty,
                    IsVip              = songRequest.IsVip,
                    IsSuperVip         = songRequest.IsSuperVip,
                    Username           = username,
                    IsMod              = isMod
                };

                result = EditWebRequest(editRequestModel);
            }

            switch (result)
            {
            case EditRequestResult.NoRequestEntered:
            case EditRequestResult.NotYourRequest:
            case EditRequestResult.RequestAlreadyRemoved:
                syntaxError = true;
                break;

            default:
                syntaxError = false;
                break;
            }

            return(result == EditRequestResult.Success);
        }