Merge pull request #5363 from Vito0912/feat/newEndpoints

add progress and bookmarks specific endpoints
This commit is contained in:
advplyr 2026-07-22 17:10:51 -04:00 committed by GitHub
commit 37b42601ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 46 additions and 636 deletions

View file

@ -26,6 +26,49 @@ 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
*
* @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))