Cache user data in subsonic request (to simplify endpoints)

This commit is contained in:
emeric
2024-04-27 16:48:19 +02:00
parent fcb5b11f81
commit edd407a6c9
12 changed files with 87 additions and 171 deletions
@@ -60,10 +60,6 @@ namespace lms::api::subsonic
auto transaction{ context.dbSession.createReadTransaction() };
User::pointer user{ User::find(context.dbSession, context.userId) };
if (!user)
throw UserNotAuthorizedError{};
if (type == "alphabeticalByName")
{
Release::FindParameters params;
@@ -117,7 +113,7 @@ namespace lms::api::subsonic
else if (type == "frequent")
{
scrobbling::IScrobblingService::FindParameters params;
params.setUser(context.userId);
params.setUser(context.user->getId());
params.setRange(range);
params.setMediaLibrary(mediaLibraryId);
@@ -146,7 +142,7 @@ namespace lms::api::subsonic
else if (type == "recent")
{
scrobbling::IScrobblingService::FindParameters params;
params.setUser(context.userId);
params.setUser(context.user->getId());
params.setRange(range);
params.setMediaLibrary(mediaLibraryId);
@@ -155,7 +151,7 @@ namespace lms::api::subsonic
else if (type == "starred")
{
feedback::IFeedbackService::FindParameters params;
params.setUser(context.userId);
params.setUser(context.user->getId());
params.setRange(range);
params.setMediaLibrary(mediaLibraryId);
@@ -172,7 +168,7 @@ namespace lms::api::subsonic
for (const ReleaseId releaseId : releases.results)
{
const Release::pointer release{ Release::find(context.dbSession, releaseId) };
albumListNode.addArrayChild("album", createAlbumNode(context, release, user, id3));
albumListNode.addArrayChild("album", createAlbumNode(context, release, context.user, id3));
}
return response;
@@ -185,10 +181,6 @@ namespace lms::api::subsonic
auto transaction{ context.dbSession.createReadTransaction() };
User::pointer user{ User::find(context.dbSession, context.userId) };
if (!user)
throw UserNotAuthorizedError{};
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
Response::Node& starredNode{ response.createNode(id3 ? Response::Node::Key{ "starred2" } : Response::Node::Key{ "starred" }) };
@@ -196,29 +188,29 @@ namespace lms::api::subsonic
{
feedback::IFeedbackService::ArtistFindParameters artistFindParams;
artistFindParams.setUser(context.userId);
artistFindParams.setUser(context.user->getId());
artistFindParams.setSortMethod(ArtistSortMethod::SortName);
for (const ArtistId artistId : feedbackService.findStarredArtists(artistFindParams).results)
{
if (auto artist{ Artist::find(context.dbSession, artistId) })
starredNode.addArrayChild("artist", createArtistNode(context, artist, user, id3));
starredNode.addArrayChild("artist", createArtistNode(context, artist, context.user, id3));
}
}
feedback::IFeedbackService::FindParameters findParameters;
findParameters.setUser(context.userId);
findParameters.setUser(context.user->getId());
findParameters.setMediaLibrary(mediaLibrary);
for (const ReleaseId releaseId : feedbackService.findStarredReleases(findParameters).results)
{
if (auto release{ Release::find(context.dbSession, releaseId) })
starredNode.addArrayChild("album", createAlbumNode(context, release, user, id3));
starredNode.addArrayChild("album", createAlbumNode(context, release, context.user, id3));
}
for (const TrackId trackId : feedbackService.findStarredTracks(findParameters).results)
{
if (auto track{ Track::find(context.dbSession, trackId) })
starredNode.addArrayChild("song", createSongNode(context, track, user));
starredNode.addArrayChild("song", createSongNode(context, track, context.user));
}
return response;
@@ -243,15 +235,11 @@ namespace lms::api::subsonic
if (size > defaultMaxCountSize)
throw ParameterValueTooHighGenericError{ "size", defaultMaxCountSize };
auto transaction{ context.dbSession.createReadTransaction() };
User::pointer user{ User::find(context.dbSession, context.userId) };
if (!user)
throw UserNotAuthorizedError{};
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
Response::Node& randomSongsNode{ response.createNode("randomSongs") };
auto transaction{ context.dbSession.createReadTransaction() };
Track::FindParameters params;
params.setSortMethod(TrackSortMethod::Random);
params.setRange(Range{ 0, size });
@@ -259,7 +247,7 @@ namespace lms::api::subsonic
Track::find(context.dbSession, params, [&](const Track::pointer& track)
{
randomSongsNode.addArrayChild("song", createSongNode(context, track, user));
randomSongsNode.addArrayChild("song", createSongNode(context, track, context.user));
});
return response;
@@ -288,10 +276,6 @@ namespace lms::api::subsonic
if (!cluster)
throw RequestedDataNotFoundError{};
User::pointer user{ User::find(context.dbSession, context.userId) };
if (!user)
throw UserNotAuthorizedError{};
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
Response::Node& songsByGenreNode{ response.createNode("songsByGenre") };
@@ -302,7 +286,7 @@ namespace lms::api::subsonic
Track::find(context.dbSession, params, [&](const Track::pointer& track)
{
songsByGenreNode.addArrayChild("song", createSongNode(context, track, user));
songsByGenreNode.addArrayChild("song", createSongNode(context, track, context.user));
});
return response;