When max similarity count is set to 0, return nothing instead of everything
This commit is contained in:
@@ -29,80 +29,83 @@
|
|||||||
|
|
||||||
namespace Recommendation {
|
namespace Recommendation {
|
||||||
|
|
||||||
using namespace Database;
|
using namespace Database;
|
||||||
|
|
||||||
std::unique_ptr<IEngine> createClustersEngine(Db& db)
|
std::unique_ptr<IEngine> createClustersEngine(Db& db)
|
||||||
{
|
{
|
||||||
return std::make_unique<ClusterEngine>(db);
|
return std::make_unique<ClusterEngine>(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackContainer
|
TrackContainer ClusterEngine::findSimilarTracks(const std::vector<TrackId>& trackIds, std::size_t maxCount) const
|
||||||
ClusterEngine::findSimilarTracks(const std::vector<TrackId>& trackIds, std::size_t maxCount) const
|
{
|
||||||
{
|
if (maxCount == 0)
|
||||||
Session& dbSession {_db.getTLSSession()};
|
return {};
|
||||||
|
|
||||||
auto transaction {dbSession.createSharedTransaction()};
|
Session& dbSession{ _db.getTLSSession() };
|
||||||
|
auto transaction{ dbSession.createSharedTransaction() };
|
||||||
|
|
||||||
const auto similarTrackIds {Track::findSimilarTracks(dbSession, trackIds, Range {0, maxCount})};
|
const auto similarTrackIds{ Track::findSimilarTracks(dbSession, trackIds, Range {0, maxCount}) };
|
||||||
return std::move(similarTrackIds.results);
|
return std::move(similarTrackIds.results);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackContainer
|
TrackContainer ClusterEngine::findSimilarTracksFromTrackList(TrackListId tracklistId, std::size_t maxCount) const
|
||||||
ClusterEngine::findSimilarTracksFromTrackList(TrackListId tracklistId, std::size_t maxCount) const
|
{
|
||||||
{
|
TrackContainer res;
|
||||||
Session& dbSession {_db.getTLSSession()};
|
if (maxCount == 0)
|
||||||
|
return res;
|
||||||
|
|
||||||
TrackContainer res;
|
{
|
||||||
|
Session& dbSession{ _db.getTLSSession() };
|
||||||
|
auto transaction{ dbSession.createSharedTransaction() };
|
||||||
|
|
||||||
{
|
const TrackList::pointer trackList{ TrackList::find(dbSession, tracklistId) };
|
||||||
auto transaction {dbSession.createSharedTransaction()};
|
if (!trackList)
|
||||||
|
return res;
|
||||||
|
|
||||||
const TrackList::pointer trackList {TrackList::find(dbSession, tracklistId)};
|
const auto tracks{ trackList->getSimilarTracks(0, maxCount) };
|
||||||
if (!trackList)
|
res.reserve(tracks.size());
|
||||||
return res;
|
std::transform(std::cbegin(tracks), std::cend(tracks), std::back_inserter(res), [](const auto& track) { return track->getId(); });
|
||||||
|
}
|
||||||
|
|
||||||
const auto tracks {trackList->getSimilarTracks(0, maxCount)};
|
return res;
|
||||||
res.reserve(tracks.size());
|
}
|
||||||
std::transform(std::cbegin(tracks), std::cend(tracks), std::back_inserter(res), [](const auto& track) { return track->getId(); });
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
ReleaseContainer ClusterEngine::getSimilarReleases(ReleaseId releaseId, std::size_t maxCount) const
|
||||||
}
|
{
|
||||||
|
ReleaseContainer res;
|
||||||
|
if (maxCount == 0)
|
||||||
|
return res;
|
||||||
|
|
||||||
ReleaseContainer
|
{
|
||||||
ClusterEngine::getSimilarReleases(ReleaseId releaseId, std::size_t maxCount) const
|
Session& dbSession{ _db.getTLSSession() };
|
||||||
{
|
auto transaction{ dbSession.createSharedTransaction() };
|
||||||
Session& dbSession {_db.getTLSSession()};
|
|
||||||
|
|
||||||
ReleaseContainer res;
|
auto release{ Release::find(dbSession, releaseId) };
|
||||||
{
|
if (!release)
|
||||||
auto transaction {dbSession.createSharedTransaction()};
|
return res;
|
||||||
|
|
||||||
auto release {Release::find(dbSession, releaseId)};
|
const auto releases{ release->getSimilarReleases(0, maxCount) };
|
||||||
if (!release)
|
res.reserve(releases.size());
|
||||||
return res;
|
std::transform(std::cbegin(releases), std::cend(releases), std::back_inserter(res), [](const auto& release) { return release->getId(); });
|
||||||
|
}
|
||||||
|
|
||||||
const auto releases {release->getSimilarReleases(0, maxCount)};
|
return res;
|
||||||
res.reserve(releases.size());
|
}
|
||||||
std::transform(std::cbegin(releases), std::cend(releases), std::back_inserter(res), [](const auto& release) { return release->getId(); });
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
ArtistContainer ClusterEngine::getSimilarArtists(ArtistId artistId, EnumSet<TrackArtistLinkType> artistLinkTypes, std::size_t maxCount) const
|
||||||
}
|
{
|
||||||
|
if (maxCount == 0)
|
||||||
|
return {};
|
||||||
|
|
||||||
ArtistContainer
|
Session& dbSession{ _db.getTLSSession() };
|
||||||
ClusterEngine::getSimilarArtists(ArtistId artistId, EnumSet<TrackArtistLinkType> artistLinkTypes, std::size_t maxCount) const
|
auto transaction{ dbSession.createSharedTransaction() };
|
||||||
{
|
|
||||||
Session& dbSession {_db.getTLSSession()};
|
|
||||||
|
|
||||||
auto transaction {dbSession.createSharedTransaction()};
|
auto artist{ Artist::find(dbSession, artistId) };
|
||||||
|
if (!artist)
|
||||||
|
return {};
|
||||||
|
|
||||||
auto artist {Artist::find(dbSession, artistId)};
|
const auto similarArtistIds{ artist->findSimilarArtists(artistLinkTypes, Range {0, maxCount}) };
|
||||||
if (!artist)
|
return std::move(similarArtistIds.results);
|
||||||
return {};
|
}
|
||||||
|
|
||||||
const auto similarArtistIds {artist->findSimilarArtists(artistLinkTypes, Range {0, maxCount})};
|
|
||||||
return std::move(similarArtistIds.results);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Recommendation
|
} // namespace Recommendation
|
||||||
|
|||||||
Reference in New Issue
Block a user