refactor: export channel filter
This commit is contained in:
parent
f3e545057d
commit
e6076602df
2 changed files with 27 additions and 15 deletions
|
@ -4,7 +4,7 @@ import type { Note } from "@/models/entities/note.js";
|
||||||
import type { NoteReaction } from "@/models/entities/note-reaction.js";
|
import type { NoteReaction } from "@/models/entities/note-reaction.js";
|
||||||
import { Client, types } from "cassandra-driver";
|
import { Client, types } from "cassandra-driver";
|
||||||
import type { User } from "@/models/entities/user.js";
|
import type { User } from "@/models/entities/user.js";
|
||||||
import { LocalFollowingsCache } from "@/misc/cache.js";
|
import { ChannelFollowingsCache, LocalFollowingsCache } from "@/misc/cache.js";
|
||||||
|
|
||||||
function newClient(): Client | null {
|
function newClient(): Client | null {
|
||||||
if (!config.scylla) {
|
if (!config.scylla) {
|
||||||
|
@ -209,3 +209,25 @@ export async function isVisible(
|
||||||
|
|
||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function filterChannel(
|
||||||
|
notes: ScyllaNote[],
|
||||||
|
user: { id: User["id"] } | null,
|
||||||
|
): Promise<ScyllaNote[]> {
|
||||||
|
let foundNotes = notes;
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
foundNotes = foundNotes.filter((note) => !note.channelId);
|
||||||
|
} else {
|
||||||
|
const channelNotes = foundNotes.filter((note) => !!note.channelId);
|
||||||
|
if (channelNotes.length > 0) {
|
||||||
|
const cache = await ChannelFollowingsCache.init(user.id);
|
||||||
|
const followingIds = await cache.getAll();
|
||||||
|
foundNotes = foundNotes.filter(
|
||||||
|
(note) => !note.channelId || followingIds.includes(note.channelId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return foundNotes;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Brackets } from "typeorm";
|
import { Brackets } from "typeorm";
|
||||||
import { Notes, Followings, ChannelFollowings } from "@/models/index.js";
|
import { Notes, Followings } from "@/models/index.js";
|
||||||
import { activeUsersChart } from "@/services/chart/index.js";
|
import { activeUsersChart } from "@/services/chart/index.js";
|
||||||
import define from "../../define.js";
|
import define from "../../define.js";
|
||||||
import { makePaginationQuery } from "../../common/make-pagination-query.js";
|
import { makePaginationQuery } from "../../common/make-pagination-query.js";
|
||||||
|
@ -16,8 +16,9 @@ import {
|
||||||
parseScyllaNote,
|
parseScyllaNote,
|
||||||
prepared,
|
prepared,
|
||||||
scyllaClient,
|
scyllaClient,
|
||||||
|
filterChannel,
|
||||||
} from "@/db/scylla.js";
|
} from "@/db/scylla.js";
|
||||||
import { ChannelFollowingsCache, LocalFollowingsCache } from "@/misc/cache.js";
|
import { LocalFollowingsCache } from "@/misc/cache.js";
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ["notes"],
|
tags: ["notes"],
|
||||||
|
@ -103,18 +104,7 @@ export default define(meta, paramDef, async (ps, user) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter channels
|
// Filter channels
|
||||||
if (!user) {
|
foundNotes = await filterChannel(foundNotes, user);
|
||||||
foundNotes = foundNotes.filter((note) => !note.channelId);
|
|
||||||
} else {
|
|
||||||
const channelNotes = foundNotes.filter((note) => !!note.channelId);
|
|
||||||
if (channelNotes.length > 0) {
|
|
||||||
const cache = await ChannelFollowingsCache.init(user.id);
|
|
||||||
const followingIds = await cache.getAll();
|
|
||||||
foundNotes = foundNotes.filter(
|
|
||||||
(note) => !note.channelId || followingIds.includes(note.channelId),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Notes.packMany(foundNotes, user);
|
return Notes.packMany(foundNotes, user);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue