add progress and bookmarks specific endpoints

This commit is contained in:
Finn Dittmar 2026-07-13 11:41:49 +02:00
parent 82aec5f60c
commit 4883d0f60c
No known key found for this signature in database
GPG key ID: A630219F715A1D1E
3 changed files with 207 additions and 0 deletions

View file

@ -26,6 +26,52 @@ class MeController {
res.json(req.user.toOldJSONForBrowser())
}
/**
* GET: /api/me/progress
*
* @param {RequestWithUser} req
* @param {Response} res
*/
getAllMediaProgress(req, res) {
const mediaProgress = req.user.mediaProgresses?.map((mp) => mp.getOldMediaProgress()) || []
res.json(mediaProgress)
}
/**
* GET: /api/me/bookmarks
*
* @param {RequestWithUser} req
* @param {Response} res
*/
getAllBookmarks(req, res) {
const bookmarks = req.user.bookmarks?.map((bookmark) => ({ ...bookmark })) || []
res.json(bookmarks)
}
/**
* GET: /api/me/bookmarks/:libraryItemId
*
* Podcast episodes belong to their podcast's library item, so bookmarks for
* a podcast are retrieved with the podcast library item id.
*
* @param {RequestWithUser} req
* @param {Response} res
*/
async getBookmarksForLibraryItem(req, res) {
const libraryItem = await Database.libraryItemModel.getExpandedById(req.params.libraryItemId)
if (!libraryItem) {
return res.sendStatus(404)
}
if (!req.user.checkCanAccessLibraryItem(libraryItem)) {
Logger.error(`[MeController] User "${req.user.username}" attempted to access bookmarks for library item "${req.params.libraryItemId}" without access`)
return res.sendStatus(403)
}
const bookmarks = req.user.bookmarks?.filter((bookmark) => bookmark.libraryItemId === libraryItem.id).map((bookmark) => ({ ...bookmark })) || []
res.json(bookmarks)
}
/**
* GET: /api/me/listening-sessions
*

View file

@ -171,6 +171,9 @@ class ApiRouter {
// Current User Routes (Me)
//
this.router.get('/me', MeController.getCurrentUser.bind(this))
this.router.get('/me/progress', MeController.getAllMediaProgress.bind(this))
this.router.get('/me/bookmarks', MeController.getAllBookmarks.bind(this))
this.router.get('/me/bookmarks/:libraryItemId', MeController.getBookmarksForLibraryItem.bind(this))
this.router.get('/me/listening-sessions', MeController.getListeningSessions.bind(this))
this.router.get('/me/item/listening-sessions/:libraryItemId/:episodeId?', MeController.getItemListeningSessions.bind(this))
this.router.get('/me/listening-stats', MeController.getListeningStats.bind(this))