public IEnumerable <SongDto> Get(SongMarkDto searchMarkDto, int desiredSongs) { var songsSelected = new List <SongDto>(); var songDistance = new List <Tuple <Song, double> >(); var songs = _repositoryHolder .SongRepository .Get(); foreach (var song in songs) { songDistance.Add( new Tuple <Song, double>( song, _songMarkCalculator .GetDistance( searchMarkDto, new SongMarkDto() { Energy = song.MeanEnergy, Tempo = song.MeanTempo } ) ) ); } return(songDistance .OrderBy(e => e.Item2) .Take(desiredSongs) .Select(e => ToSongDto(e.Item1))); }
public void Insert(SongMarkDto songMarkDto) { var song = _repositoryHolder.SongRepository.Get(songMarkDto.SongId); var newSongMark = new SongMark() { Energy = Convert.ToInt32(songMarkDto.Energy), Tempo = Convert.ToInt32(songMarkDto.Tempo), Song = song }; song.SongMarks.Add(newSongMark); RecalculateMeanForSong(song); _repositoryHolder.SongRepository.Update(songMarkDto.SongId, song); _uof.Save(); }
public string Post([FromUri] SongMarkDto songMarkDto) { _songMarksService.Insert(songMarkDto); return("Successfully inserted"); }
internal double GetDistance(SongMarkDto searchMarkDto, SongMarkDto songMarkDto) { return(Math.Sqrt( Math.Pow(searchMarkDto.Energy - songMarkDto.Energy, 2) + Math.Pow(searchMarkDto.Tempo - songMarkDto.Tempo, 2))); }