v12 (#5712)
Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com> Co-authored-by: Satsuki Yanagi <17376330+u1-liquid@users.noreply.github.com>
This commit is contained in:
51
src/server/api/endpoints/federation/followers.ts
Normal file
51
src/server/api/endpoints/federation/followers.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import $ from 'cafy';
|
||||
import { ID } from '../../../../misc/cafy-id';
|
||||
import define from '../../define';
|
||||
import { Followings } from '../../../../models';
|
||||
import { makePaginationQuery } from '../../common/make-pagination-query';
|
||||
|
||||
export const meta = {
|
||||
tags: ['users'],
|
||||
|
||||
requireCredential: false,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
validator: $.str
|
||||
},
|
||||
|
||||
sinceId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
untilId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
limit: {
|
||||
validator: $.optional.num.range(1, 100),
|
||||
default: 10
|
||||
},
|
||||
},
|
||||
|
||||
res: {
|
||||
type: 'array' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
items: {
|
||||
type: 'object' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
ref: 'Following',
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, me) => {
|
||||
const query = makePaginationQuery(Followings.createQueryBuilder('following'), ps.sinceId, ps.untilId)
|
||||
.andWhere(`following.followeeHost = :host`, { host: ps.host });
|
||||
|
||||
const followings = await query
|
||||
.take(ps.limit!)
|
||||
.getMany();
|
||||
|
||||
return await Followings.packMany(followings, me, { populateFollowee: true });
|
||||
});
|
||||
51
src/server/api/endpoints/federation/following.ts
Normal file
51
src/server/api/endpoints/federation/following.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import $ from 'cafy';
|
||||
import { ID } from '../../../../misc/cafy-id';
|
||||
import define from '../../define';
|
||||
import { Followings } from '../../../../models';
|
||||
import { makePaginationQuery } from '../../common/make-pagination-query';
|
||||
|
||||
export const meta = {
|
||||
tags: ['users'],
|
||||
|
||||
requireCredential: false,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
validator: $.str
|
||||
},
|
||||
|
||||
sinceId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
untilId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
limit: {
|
||||
validator: $.optional.num.range(1, 100),
|
||||
default: 10
|
||||
},
|
||||
},
|
||||
|
||||
res: {
|
||||
type: 'array' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
items: {
|
||||
type: 'object' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
ref: 'Following',
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, me) => {
|
||||
const query = makePaginationQuery(Followings.createQueryBuilder('following'), ps.sinceId, ps.untilId)
|
||||
.andWhere(`following.followerHost = :host`, { host: ps.host });
|
||||
|
||||
const followings = await query
|
||||
.take(ps.limit!)
|
||||
.getMany();
|
||||
|
||||
return await Followings.packMany(followings, me, { populateFollowee: true });
|
||||
});
|
||||
@@ -9,6 +9,10 @@ export const meta = {
|
||||
requireCredential: false,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
validator: $.optional.nullable.str,
|
||||
},
|
||||
|
||||
blocked: {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
@@ -17,7 +21,19 @@ export const meta = {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
|
||||
markedAsClosed: {
|
||||
suspended: {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
|
||||
federating: {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
|
||||
subscribing: {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
|
||||
publishing: {
|
||||
validator: $.optional.nullable.bool,
|
||||
},
|
||||
|
||||
@@ -41,6 +57,8 @@ export default define(meta, async (ps, me) => {
|
||||
const query = Instances.createQueryBuilder('instance');
|
||||
|
||||
switch (ps.sort) {
|
||||
case '+pubSub': query.orderBy('instance.followingCount', 'DESC').orderBy('instance.followersCount', 'DESC'); break;
|
||||
case '-pubSub': query.orderBy('instance.followingCount', 'ASC').orderBy('instance.followersCount', 'ASC'); break;
|
||||
case '+notes': query.orderBy('instance.notesCount', 'DESC'); break;
|
||||
case '-notes': query.orderBy('instance.notesCount', 'ASC'); break;
|
||||
case '+users': query.orderBy('instance.usersCount', 'DESC'); break;
|
||||
@@ -78,14 +96,42 @@ export default define(meta, async (ps, me) => {
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof ps.markedAsClosed === 'boolean') {
|
||||
if (ps.markedAsClosed) {
|
||||
query.andWhere('instance.isMarkedAsClosed = TRUE');
|
||||
if (typeof ps.suspended === 'boolean') {
|
||||
if (ps.suspended) {
|
||||
query.andWhere('instance.isSuspended = TRUE');
|
||||
} else {
|
||||
query.andWhere('instance.isMarkedAsClosed = FALSE');
|
||||
query.andWhere('instance.isSuspended = FALSE');
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof ps.federating === 'boolean') {
|
||||
if (ps.federating) {
|
||||
query.andWhere('((instance.followingCount > 0) OR (instance.followersCount > 0))');
|
||||
} else {
|
||||
query.andWhere('((instance.followingCount = 0) AND (instance.followersCount = 0))');
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof ps.subscribing === 'boolean') {
|
||||
if (ps.subscribing) {
|
||||
query.andWhere('instance.followersCount > 0');
|
||||
} else {
|
||||
query.andWhere('instance.followersCount = 0');
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof ps.publishing === 'boolean') {
|
||||
if (ps.publishing) {
|
||||
query.andWhere('instance.followingCount > 0');
|
||||
} else {
|
||||
query.andWhere('instance.followingCount = 0');
|
||||
}
|
||||
}
|
||||
|
||||
if (ps.host) {
|
||||
query.andWhere('instance.host like :host', { host: '%' + ps.host.toLowerCase() + '%' })
|
||||
}
|
||||
|
||||
const instances = await query.take(ps.limit!).skip(ps.offset).getMany();
|
||||
|
||||
return instances;
|
||||
|
||||
51
src/server/api/endpoints/federation/users.ts
Normal file
51
src/server/api/endpoints/federation/users.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import $ from 'cafy';
|
||||
import { ID } from '../../../../misc/cafy-id';
|
||||
import define from '../../define';
|
||||
import { Users } from '../../../../models';
|
||||
import { makePaginationQuery } from '../../common/make-pagination-query';
|
||||
|
||||
export const meta = {
|
||||
tags: ['users'],
|
||||
|
||||
requireCredential: false,
|
||||
|
||||
params: {
|
||||
host: {
|
||||
validator: $.str
|
||||
},
|
||||
|
||||
sinceId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
untilId: {
|
||||
validator: $.optional.type(ID),
|
||||
},
|
||||
|
||||
limit: {
|
||||
validator: $.optional.num.range(1, 100),
|
||||
default: 10
|
||||
},
|
||||
},
|
||||
|
||||
res: {
|
||||
type: 'array' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
items: {
|
||||
type: 'object' as const,
|
||||
optional: false as const, nullable: false as const,
|
||||
ref: 'User',
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default define(meta, async (ps, me) => {
|
||||
const query = makePaginationQuery(Users.createQueryBuilder('user'), ps.sinceId, ps.untilId)
|
||||
.andWhere(`user.host = :host`, { host: ps.host });
|
||||
|
||||
const users = await query
|
||||
.take(ps.limit!)
|
||||
.getMany();
|
||||
|
||||
return await Users.packMany(users, me, { detail: true });
|
||||
});
|
||||
Reference in New Issue
Block a user