mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-18 21:45:31 +09:00
refactor(api): tidy the api and shared packages (#2733)
This commit is contained in:
1 parent
580401d2dc
commit
5afbf67a70
333 files changed
+10180
-7910
No files matched your search
@@ -44,7 +44,7 @@ export async function warmupAdminSearchIndexes(deps: SearchWarmupDeps): Promise<
|
||||
logger.info({total: testResult.total}, 'Guild index already populated, skipping warmup');
|
||||
}
|
||||
}
|
||||
if (userSearchService && 'indexUser' in userSearchService) {
|
||||
if (userSearchService) {
|
||||
const testResult = await userSearchService.searchUsers('', {}, {limit: 1});
|
||||
if (testResult.total === 0) {
|
||||
logger.info('User index is empty, populating from database');
|
||||
@@ -93,19 +93,15 @@ async function warmupUsers(
|
||||
): Promise<void> {
|
||||
let pageState: string | null = null;
|
||||
let totalIndexed = 0;
|
||||
while (true) {
|
||||
do {
|
||||
const page = await userRepository.scanAllUsersPage(BATCH_SIZE, pageState);
|
||||
const users = page.users;
|
||||
if (users.length > 0) {
|
||||
await userSearchService.indexUsers(users);
|
||||
totalIndexed += users.length;
|
||||
logger.debug({count: users.length, total: totalIndexed}, 'Indexed user batch');
|
||||
}
|
||||
pageState = page.pageState;
|
||||
if (!pageState) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const users = page.users;
|
||||
if (users.length === 0) continue;
|
||||
await userSearchService.indexUsers(users);
|
||||
totalIndexed += users.length;
|
||||
logger.debug({count: users.length, total: totalIndexed}, 'Indexed user batch');
|
||||
} while (pageState);
|
||||
logger.info({total: totalIndexed}, 'User warmup complete');
|
||||
}
|
||||
|
||||
@@ -120,9 +116,7 @@ async function warmupReports(
|
||||
while (hasMore) {
|
||||
const reports = await reportRepository.listAllReportsPaginated(BATCH_SIZE, lastReportId);
|
||||
if (reports.length > 0) {
|
||||
if ('indexReports' in reportSearchService) {
|
||||
await reportSearchService.indexReports(reports);
|
||||
}
|
||||
await reportSearchService.indexReports(reports);
|
||||
totalIndexed += reports.length;
|
||||
lastReportId = reports[reports.length - 1]!.reportId;
|
||||
logger.debug({count: reports.length, total: totalIndexed}, 'Indexed report batch');
|
||||
|
||||
@@ -50,6 +50,15 @@ function snowflakeSeconds(snowflake: string): number {
|
||||
return Math.floor(snowflakeToDate(BigInt(snowflake)).getTime() / 1000);
|
||||
}
|
||||
|
||||
function buildSort(sortBy: string, sortOrder: 'asc' | 'desc' | undefined): Array<string> | undefined {
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
return [`${sortBy}:${sortOrder ?? 'desc'}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildTimestampSort(filters: MessageSearchFilters | AuditLogSearchFilters): Array<string> | undefined {
|
||||
return buildSort(filters.sortBy === 'relevance' ? 'relevance' : 'createdAt', filters.sortOrder);
|
||||
}
|
||||
|
||||
function buildMessageFilters(filters: MessageSearchFilters): Array<MeilisearchFilter | undefined> {
|
||||
const clauses: Array<MeilisearchFilter | undefined> = [];
|
||||
if (filters.guildId) clauses.push(meiliTermFilter('guildId', filters.guildId));
|
||||
@@ -119,13 +128,6 @@ function buildMessageFilters(filters: MessageSearchFilters): Array<MeilisearchFi
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildMessageSort(filters: MessageSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'timestamp';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`createdAt:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildMessageQuery(query: string, filters: MessageSearchFilters): string {
|
||||
const terms = [...(filters.contents ?? []), query].filter((term) => term.trim().length > 0);
|
||||
const phrases = (filters.exactPhrases ?? []).map((phrase) => `"${phrase.replaceAll('"', '\\"')}"`);
|
||||
@@ -152,13 +154,6 @@ function buildGuildFilters(filters: GuildSearchFilters): Array<MeilisearchFilter
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildGuildSort(filters: GuildSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'createdAt';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`${sortBy}:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildUserFilters(filters: UserSearchFilters): Array<MeilisearchFilter | undefined> {
|
||||
const clauses: Array<MeilisearchFilter | undefined> = [];
|
||||
if (filters.isBot !== undefined) clauses.push(meiliTermFilter('isBot', filters.isBot));
|
||||
@@ -187,13 +182,6 @@ function buildUserFilters(filters: UserSearchFilters): Array<MeilisearchFilter |
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildUserSort(filters: UserSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'createdAt';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`${sortBy}:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildReportFilters(filters: ReportSearchFilters): Array<MeilisearchFilter | undefined> {
|
||||
const clauses: Array<MeilisearchFilter | undefined> = [];
|
||||
if (filters.reporterId) clauses.push(meiliTermFilter('reporterId', filters.reporterId));
|
||||
@@ -210,13 +198,6 @@ function buildReportFilters(filters: ReportSearchFilters): Array<MeilisearchFilt
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildReportSort(filters: ReportSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'reportedAt';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`${sortBy}:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildAuditLogFilters(filters: AuditLogSearchFilters): Array<MeilisearchFilter | undefined> {
|
||||
const clauses: Array<MeilisearchFilter | undefined> = [];
|
||||
if (filters.adminUserId) clauses.push(meiliTermFilter('adminUserId', filters.adminUserId));
|
||||
@@ -226,13 +207,6 @@ function buildAuditLogFilters(filters: AuditLogSearchFilters): Array<Meilisearch
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildAuditLogSort(filters: AuditLogSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'createdAt';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`createdAt:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
function buildGuildMemberFilters(filters: GuildMemberSearchFilters): Array<MeilisearchFilter | undefined> {
|
||||
const clauses: Array<MeilisearchFilter | undefined> = [];
|
||||
clauses.push(meiliTermFilter('guildId', filters.guildId));
|
||||
@@ -253,20 +227,13 @@ function buildGuildMemberFilters(filters: GuildMemberSearchFilters): Array<Meili
|
||||
return compactMeiliFilters(clauses);
|
||||
}
|
||||
|
||||
function buildGuildMemberSort(filters: GuildMemberSearchFilters): Array<string> | undefined {
|
||||
const sortBy = filters.sortBy ?? 'joinedAt';
|
||||
if (sortBy === 'relevance') return undefined;
|
||||
const sortOrder = filters.sortOrder ?? 'desc';
|
||||
return [`${sortBy}:${sortOrder}`, 'id:desc'];
|
||||
}
|
||||
|
||||
export class MeilisearchMessageAdapter extends MeilisearchIndexAdapter<MessageSearchFilters, SearchableMessage> {
|
||||
constructor(options: MeilisearchAdapterOptions) {
|
||||
super({
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.messages,
|
||||
buildFilters: buildMessageFilters,
|
||||
buildSort: buildMessageSort,
|
||||
buildSort: buildTimestampSort,
|
||||
buildQuery: buildMessageQuery,
|
||||
});
|
||||
}
|
||||
@@ -278,7 +245,7 @@ export class MeilisearchGuildAdapter extends MeilisearchIndexAdapter<GuildSearch
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.guilds,
|
||||
buildFilters: buildGuildFilters,
|
||||
buildSort: buildGuildSort,
|
||||
buildSort: (filters) => buildSort(filters.sortBy ?? 'createdAt', filters.sortOrder),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -289,7 +256,7 @@ export class MeilisearchUserAdapter extends MeilisearchIndexAdapter<UserSearchFi
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.users,
|
||||
buildFilters: buildUserFilters,
|
||||
buildSort: buildUserSort,
|
||||
buildSort: (filters) => buildSort(filters.sortBy ?? 'createdAt', filters.sortOrder),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -300,7 +267,7 @@ export class MeilisearchReportAdapter extends MeilisearchIndexAdapter<ReportSear
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.reports,
|
||||
buildFilters: buildReportFilters,
|
||||
buildSort: buildReportSort,
|
||||
buildSort: (filters) => buildSort(filters.sortBy ?? 'reportedAt', filters.sortOrder),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -311,7 +278,7 @@ export class MeilisearchAuditLogAdapter extends MeilisearchIndexAdapter<AuditLog
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.audit_logs,
|
||||
buildFilters: buildAuditLogFilters,
|
||||
buildSort: buildAuditLogSort,
|
||||
buildSort: buildTimestampSort,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -325,7 +292,7 @@ export class MeilisearchGuildMemberAdapter extends MeilisearchIndexAdapter<
|
||||
client: options.client,
|
||||
index: MEILISEARCH_INDEX_DEFINITIONS.guild_members,
|
||||
buildFilters: buildGuildMemberFilters,
|
||||
buildSort: buildGuildMemberSort,
|
||||
buildSort: (filters) => buildSort(filters.sortBy ?? 'joinedAt', filters.sortOrder),
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user