private bool ProcessEdit(string songRequestText, GetAllSongsResponse currentSongs, string username, ProcessEditArgsResult action, int songIndex = 0) { var vipRequestsWithIndex = currentSongs.VipList.Select((sr, index) => new { Index = index + 1, SongRequest = sr }).ToList(); using (var context = _contextFactory.Create()) { PlaylistItem request; switch (action) { case ProcessEditArgsResult.OneRequestEdit: request = currentSongs.RegularList.SingleOrDefault(rs => rs.songRequester == username) ?? currentSongs.VipList.SingleOrDefault(vs => vs.songRequester == username); break; case ProcessEditArgsResult.RegularRequest: request = currentSongs.RegularList.SingleOrDefault(rs => rs.songRequester == username); break; case ProcessEditArgsResult.VipRequestNoIndex: request = currentSongs.VipList.SingleOrDefault(rs => rs.songRequester == username); break; case ProcessEditArgsResult.VipRequestWithIndex: request = vipRequestsWithIndex .SingleOrDefault(rs => rs.SongRequest.songRequester == username && rs.Index == songIndex)? .SongRequest; break; default: request = null; break; } if (request == null) { return(false); } var dbReq = context.SongRequests.SingleOrDefault( sr => sr.SongRequestId == request.songRequestId); if (dbReq == null) { return(false); } dbReq.RequestText = songRequestText; dbReq.InDrive = false; context.SaveChanges(); return(true); } }
private ProcessEditArgsResult ProcessEditArgs(string username, string commandText, GetAllSongsResponse currentSongs, out string songRequestText) { var vipRequestsWithIndex = currentSongs.VipList.Select((sr, index) => new { Index = index + 1, SongRequest = sr }).ToList(); songRequestText = string.Empty; if (currentSongs.RegularList.All(rs => rs.songRequester != username) && currentSongs.VipList.All(vs => vs.songRequester != username)) { return(ProcessEditArgsResult.NoRequestInList); } var splitCommandText = commandText.Split(' ').ToList(); int.TryParse(splitCommandText[0].Trim(), out var playlistIndex); if (playlistIndex != 0) { splitCommandText.RemoveAt(0); } songRequestText = string.Join(" ", splitCommandText); var totalRequestCount = (currentSongs.RegularList.Count(rs => rs.songRequester == username) + vipRequestsWithIndex.Count(vs => vs.SongRequest.songRequester == username)); var doesUserHaveRegularRequest = currentSongs.RegularList.Any(rs => rs.songRequester == username); var userVips = vipRequestsWithIndex.Where(req => req.SongRequest.songRequester == username).ToList(); if (string.IsNullOrWhiteSpace(songRequestText)) { return(ProcessEditArgsResult.NoRequestProvided); } if (totalRequestCount == 1) { return(ProcessEdit(songRequestText, currentSongs, username, ProcessEditArgsResult.OneRequestEdit) ? ProcessEditArgsResult.OneRequestEdit : ProcessEditArgsResult.ArgumentError); // We can change this request regardless } if (playlistIndex != 0) { if (userVips.Count == 0) { return(ProcessEditArgsResult.ArgumentError); } return(ProcessEdit(songRequestText, currentSongs, username, ProcessEditArgsResult.VipRequestWithIndex, playlistIndex) ? ProcessEditArgsResult.VipRequestWithIndex : ProcessEditArgsResult.ArgumentError); } if (doesUserHaveRegularRequest) { return(ProcessEdit(songRequestText, currentSongs, username, ProcessEditArgsResult.RegularRequest) ? ProcessEditArgsResult.RegularRequest : ProcessEditArgsResult.ArgumentError); } switch (userVips.Count) { case 1: return(ProcessEdit(songRequestText, currentSongs, username, ProcessEditArgsResult.VipRequestNoIndex) ? ProcessEditArgsResult.VipRequestNoIndex : ProcessEditArgsResult.ArgumentError); default: return(ProcessEditArgsResult.ArgumentError); } }