From b014b6b9c7cb68d09c52b44046afe486c0736426 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 10 Oct 2018 09:43:53 +0200 Subject: Add ability to search on followers/following --- server/models/activitypub/actor-follow.ts | 90 +++++++++++++++++++------------ 1 file changed, 55 insertions(+), 35 deletions(-) (limited to 'server/models') diff --git a/server/models/activitypub/actor-follow.ts b/server/models/activitypub/actor-follow.ts index 27bb43dae..3373355ef 100644 --- a/server/models/activitypub/actor-follow.ts +++ b/server/models/activitypub/actor-follow.ts @@ -280,7 +280,7 @@ export class ActorFollowModel extends Model { return ActorFollowModel.findAll(query) } - static listFollowingForApi (id: number, start: number, count: number, sort: string) { + static listFollowingForApi (id: number, start: number, count: number, sort: string, search?: string) { const query = { distinct: true, offset: start, @@ -299,7 +299,17 @@ export class ActorFollowModel extends Model { model: ActorModel, as: 'ActorFollowing', required: true, - include: [ ServerModel ] + include: [ + { + model: ServerModel, + required: true, + where: search ? { + host: { + [Sequelize.Op.iLike]: '%' + search + '%' + } + } : undefined + } + ] } ] } @@ -313,6 +323,49 @@ export class ActorFollowModel extends Model { }) } + static listFollowersForApi (id: number, start: number, count: number, sort: string, search?: string) { + const query = { + distinct: true, + offset: start, + limit: count, + order: getSort(sort), + include: [ + { + model: ActorModel, + required: true, + as: 'ActorFollower', + include: [ + { + model: ServerModel, + required: true, + where: search ? { + host: { + [ Sequelize.Op.iLike ]: '%' + search + '%' + } + } : undefined + } + ] + }, + { + model: ActorModel, + as: 'ActorFollowing', + required: true, + where: { + id + } + } + ] + } + + return ActorFollowModel.findAndCountAll(query) + .then(({ rows, count }) => { + return { + data: rows, + total: count + } + }) + } + static listSubscriptionsForApi (id: number, start: number, count: number, sort: string) { const query = { attributes: [], @@ -370,39 +423,6 @@ export class ActorFollowModel extends Model { }) } - static listFollowersForApi (id: number, start: number, count: number, sort: string) { - const query = { - distinct: true, - offset: start, - limit: count, - order: getSort(sort), - include: [ - { - model: ActorModel, - required: true, - as: 'ActorFollower', - include: [ ServerModel ] - }, - { - model: ActorModel, - as: 'ActorFollowing', - required: true, - where: { - id - } - } - ] - } - - return ActorFollowModel.findAndCountAll(query) - .then(({ rows, count }) => { - return { - data: rows, - total: count - } - }) - } - static listAcceptedFollowerUrlsForApi (actorIds: number[], t: Sequelize.Transaction, start?: number, count?: number) { return ActorFollowModel.createListAcceptedFollowForApiQuery('followers', actorIds, t, start, count) } -- cgit v1.2.3