summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-10 22:26:30 +0100
committerRory& <root@rory.gay>2026-02-10 22:26:30 +0100
commitb7f3535d093cc75fc665b5ffd4ed9d5b563f1aff (patch)
tree63ead46ce496c30ec7c9b719324fb607b7cabc98 /src
parentMerge pull request #1493 from CyberL1/feat/docker-image-build-workflows (diff)
downloadserver-ts-b7f3535d093cc75fc665b5ffd4ed9d5b563f1aff.tar.xz
Add discovery filtering
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/discoverable-guilds.ts40
-rw-r--r--src/util/entities/Guild.ts6
-rw-r--r--src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts15
3 files changed, 36 insertions, 25 deletions
diff --git a/src/api/routes/discoverable-guilds.ts b/src/api/routes/discoverable-guilds.ts

index 8f059f57..87de37a3 100644 --- a/src/api/routes/discoverable-guilds.ts +++ b/src/api/routes/discoverable-guilds.ts
@@ -44,31 +44,21 @@ router.get( select: { guild_id: true }, }).then((members) => members.map((member) => member.guild_id)) : []; - let guilds; - if (categories == undefined) { - guilds = showAllGuilds - ? await Guild.find({ - take: Math.abs(Number(limit || configLimit)), - }) - : await Guild.find({ - where: { features: Like(`%DISCOVERABLE%`) }, - take: Math.abs(Number(limit || configLimit)), - }); - } else { - guilds = showAllGuilds - ? await Guild.find({ - where: { primary_category_id: categories.toString(), id: Not(In(hiddenGuildIds)) }, - take: Math.abs(Number(limit || configLimit)), - }) - : await Guild.find({ - where: { - primary_category_id: categories.toString(), - features: Like("%DISCOVERABLE%"), - id: Not(In(hiddenGuildIds)), - }, - take: Math.abs(Number(limit || configLimit)), - }); - } + + const guilds = await Guild.find({ + where: { + id: Not(In(hiddenGuildIds)), + discovery_excluded: false, + ...(categories == undefined ? {} : { primary_category_id: categories.toString() }), // TODO: isnt this an array? + ...(showAllGuilds ? {} : { features: Like("%DISCOVERABLE%") }), + }, + order: { + discovery_weight: "DESC", + member_count: "DESC", + }, + skip: Math.abs(Number(offset || Config.get().guild.discovery.offset)), + take: Math.abs(Number(limit || configLimit)), + }); const total = guilds ? guilds.length : undefined; diff --git a/src/util/entities/Guild.ts b/src/util/entities/Guild.ts
index 56740ab5..aac3daf0 100644 --- a/src/util/entities/Guild.ts +++ b/src/util/entities/Guild.ts
@@ -298,6 +298,12 @@ export class Guild extends BaseClass { @Column({ select: false, type: "simple-array" }) channel_ordering: string[]; + @Column() + discovery_weight: number = 0; + + @Column() + discovery_excluded: boolean = false; + static async createGuild(body: { name?: string; icon?: string | null; diff --git a/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts b/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts new file mode 100644
index 00000000..de878388 --- /dev/null +++ b/src/util/migration/postgres/1770748070808-GuildDiscoveryHoisting.ts
@@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class GuildDiscoveryHoisting1770748070808 implements MigrationInterface { + name = "GuildDiscoveryHoisting1770748070808"; + + public async up(queryRunner: QueryRunner): Promise<void> { + await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_weight" integer NOT NULL`); + await queryRunner.query(`ALTER TABLE "guilds" ADD "discovery_excluded" boolean NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise<void> { + await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_excluded"`); + await queryRunner.query(`ALTER TABLE "guilds" DROP COLUMN "discovery_weight"`); + } +}