public IActionResult PutSongOfSinger(string singerIdOrName, string songIdOrName, [FromBody] SongDtoForEdit songOfSinger)
        {
            if (songOfSinger == null)
            {
                return(BadRequest());
            }
            if (songOfSinger.Description == songOfSinger.Name)
            {
                ModelState.AddModelError("Description", "The provided description should be diffrent from the name");
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            //SingerDto singerToReturn;
            //if (IsInt(singerIdOrName))
            //{
            //    singerToReturn = SingersDataStore.Current.Singers.FirstOrDefault(singer => singer.Id == Convert.ToInt32(singerIdOrName));
            //}
            //else
            //{
            //    singerToReturn = SingersDataStore.Current.Singers.FirstOrDefault(singer => singer.Name.ToLower().Replace(" ", "") == singerIdOrName.Replace("-", " ").ToLower().Replace(" ", ""));
            //}
            //if (singerToReturn == null)
            //{
            //    return NotFound();
            //}
            bool flagSingerExists;

            if (IsInt(singerIdOrName))
            {
                flagSingerExists = _musesRepository.SingerExistsAsync(Convert.ToInt32(singerIdOrName)).Result;
            }
            else
            {
                flagSingerExists = _musesRepository.SingerExistsAsync(singerIdOrName).Result;
            }
            if (!flagSingerExists)
            {
                return(NotFound());
            }
            else
            {
                if (!_musesRepository.SongExistsAsync(songOfSinger.Name).Result)
                {
                    return(NotFound("This song doesn't exist"));
                }
                //SongDto songToReturn;
                //if (IsInt(songIdOrName))
                //{
                //    songToReturn = singerToReturn.Songs.FirstOrDefault(song => song.Id == Convert.ToInt32(songIdOrName));
                //}
                //else
                //{
                //    songToReturn = singerToReturn.Songs.FirstOrDefault(song => song.Name.ToLower().Replace(" ", "") == songIdOrName.Replace("-", " ").ToLower().Replace(" ", ""));
                //}

                //if(songToReturn == null) {
                //    return NotFound();
                //}

                Song songEntity;
                if (IsInt(songIdOrName))
                {
                    songEntity = _musesRepository.GetSongAsync(Convert.ToInt32(songIdOrName), false).Result;
                }
                else
                {
                    songEntity = _musesRepository.GetSongAsync(songIdOrName, false).Result;
                }
                _mapper.Map(songOfSinger, songEntity);

                //songToReturn.Name = songOfSinger.Name;
                //songToReturn.TranslatedName = songOfSinger.TranslatedName;
                //songToReturn.Author = songOfSinger.Author;
                //songToReturn.Composer = songOfSinger.Composer;
                //songToReturn.Language = songOfSinger.Language;
                //songToReturn.Description = songOfSinger.Description;
                if (!_musesRepository.SaveAsync().Result)
                {
                    return(StatusCode(500, "A problem happened while handling your request."));
                }

                return(NoContent());
            }
        }
        public async Task <IActionResult> PostSongOfSinger(string singerIdOrName, [FromBody] SongDtoForEdit songOfSinger)
        {
            if (songOfSinger == null)
            {
                return(BadRequest());
            }
            if (songOfSinger.Description == songOfSinger.Name)
            {
                ModelState.AddModelError("Description", "The provided description should be diffrent from the name");
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //SingerDto singerToReturn;
            //if (IsInt(singerIdOrName))
            //{
            //    singerToReturn = SingersDataStore.Current.Singers.FirstOrDefault(singer => singer.Id == Convert.ToInt32(singerIdOrName));
            //}
            //else
            //{
            //    singerToReturn = SingersDataStore.Current.Singers.FirstOrDefault(singer => singer.Name.ToLower().Replace(" ", "") == singerIdOrName.Replace("-", " ").ToLower().Replace(" ", ""));
            //}

            bool flagSingerExists;

            if (IsInt(singerIdOrName))
            {
                //flagSingerExists = _musesRepository.SingerExistsAsync(Convert.ToInt32(singerIdOrName)).Result;
                flagSingerExists = await _musesRepository.SingerExistsAsync(Convert.ToInt32(singerIdOrName));
            }
            else
            {
                flagSingerExists = await _musesRepository.SingerExistsAsync(singerIdOrName);
            }
            if (!flagSingerExists)
            {
                return(NotFound());
            }
            else
            {
                if (await _musesRepository.SongExistsAsync(songOfSinger.Name))
                {
                    _logger.LogWarning("This song already exists: " + songOfSinger.Name);
                    return(BadRequest("This song already exists: " + songOfSinger.Name));
                }
                //var maxSongOfSingerId = SingersDataStore.Current.Singers.SelectMany(s => s.Songs).Max(s => s.Id);
                var finalSongOfSinger = _mapper.Map <Entities.Song>(songOfSinger);
                //singerToReturn.Songs.Add(finalSongOfSinger);

                if (IsInt(singerIdOrName))
                {
                    await _musesRepository.AddSongForSingerAsync(Convert.ToInt32(singerIdOrName), finalSongOfSinger);
                }
                else
                {
                    await _musesRepository.AddSongForSingerAsync(singerIdOrName, finalSongOfSinger);
                }


                if (!await _musesRepository.SaveAsync())
                {
                    return(StatusCode(500, "A problem happened while handling your request."));
                }
                var createdSongofSingerToReturn = _mapper.Map <Models.SongWithoutSingersDto>(finalSongOfSinger);

                return(CreatedAtRoute("GetSongOfSinger", new { singerIdOrName = singerIdOrName, songIdOrName = createdSongofSingerToReturn.Name }, createdSongofSingerToReturn));
            }
        }