X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Faccounts.ts;h=8eb880d59a8a1f032e016d7b8599de66c2154e8d;hb=d1bfbdeb203b0e4f37e9468861c690171156ee29;hp=55e2aaf62d6615edeb179fc02e4d3689a6e16016;hpb=d6886027109af42be2e3ec5d14ad166199add11d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index 55e2aaf62..8eb880d59 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts @@ -1,5 +1,6 @@ -import * as express from 'express' +import express from 'express' import { pickCommonVideoQuery } from '@server/helpers/query' +import { ActorFollowModel } from '@server/models/actor/actor-follow' import { getServerActor } from '@server/models/application/application' import { buildNSFWFilter, getCountVideos, isUserAbleToSearchRemoteURI } from '../../helpers/express-utils' import { getFormattedObjects } from '../../helpers/utils' @@ -20,6 +21,7 @@ import { } from '../../middlewares' import { accountNameWithHostGetValidator, + accountsFollowersSortValidator, accountsSortValidator, ensureAuthUserOwnsAccountValidator, videoChannelsSortValidator, @@ -93,6 +95,17 @@ accountsRouter.get('/:accountName/ratings', asyncMiddleware(listAccountRatings) ) +accountsRouter.get('/:accountName/followers', + authenticate, + asyncMiddleware(accountNameWithHostGetValidator), + ensureAuthUserOwnsAccountValidator, + paginationValidator, + accountsFollowersSortValidator, + setDefaultSort, + setDefaultPagination, + asyncMiddleware(listAccountFollowers) +) + // --------------------------------------------------------------------------- export { @@ -127,7 +140,7 @@ async function listAccountChannels (req: express.Request, res: express.Response) search: req.query.search } - const resultList = await VideoChannelModel.listByAccount(options) + const resultList = await VideoChannelModel.listByAccountForAPI(options) return res.json(getFormattedObjects(resultList.data, resultList.total)) } @@ -195,3 +208,21 @@ async function listAccountRatings (req: express.Request, res: express.Response) }) return res.json(getFormattedObjects(resultList.rows, resultList.count)) } + +async function listAccountFollowers (req: express.Request, res: express.Response) { + const account = res.locals.account + + const channels = await VideoChannelModel.listAllByAccount(account.id) + const actorIds = [ account.actorId ].concat(channels.map(c => c.actorId)) + + const resultList = await ActorFollowModel.listFollowersForApi({ + actorIds, + start: req.query.start, + count: req.query.count, + sort: req.query.sort, + search: req.query.search, + state: 'accepted' + }) + + return res.json(getFormattedObjects(resultList.data, resultList.total)) +}