refactor(api): tidy the api and shared packages (#2733)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-13 17:37:48 +02:00
1 parent 580401d2dc
commit 5afbf67a70
333 files changed
+10180 -7910

No files matched your search

@@ -359,10 +359,13 @@ export class GuildMemberOperationsService {
try {
updatedMember = await this.guildRepository.upsertMember(updatedMemberData);
} catch (error) {
await this.rollbackPreparedAssets(preparedAssets);
Logger.error(
{error, guildId, userId: targetId},
'Guild member update failed with unknown commit status; retaining uploaded assets',
);
throw error;
}
await this.commitPreparedAssets(preparedAssets);
await this.entityAssetService.commitAssetChanges([preparedAssets.avatar, preparedAssets.banner]);
if (shouldRemoveTemporaryStatus) {
await this.gatewayService.removeTemporaryGuild({userId: targetId, guildId});
}
@@ -1034,17 +1037,6 @@ export class GuildMemberOperationsService {
await Promise.all(rollbackPromises);
}
private async commitPreparedAssets(preparedAssets: PreparedMemberAssets): Promise<void> {
const commitPromises: Array<Promise<void>> = [];
if (preparedAssets.avatar) {
commitPromises.push(this.entityAssetService.commitAssetChange({prepared: preparedAssets.avatar}));
}
if (preparedAssets.banner) {
commitPromises.push(this.entityAssetService.commitAssetChange({prepared: preparedAssets.banner}));
}
await Promise.all(commitPromises);
}
private async snapshotMembershipMetadata(member: GuildMember): Promise<void> {
const existingMetadata = await this.guildRepository.getMembershipMetadata(member.guildId, member.userId);
await this.guildRepository.upsertMembershipMetadata(
@@ -6,29 +6,43 @@ import type {GuildMember} from '../../../models/GuildMember';
import type {User} from '../../../models/User';
import {getGuildMemberSearchService} from '../../../SearchFactory';
import type {IGuildMemberSearchService} from '../../../search/IGuildMemberSearchService';
import type {IGuildRepositoryAggregate} from '../../repositories/IGuildRepositoryAggregate';
interface GuildMemberSearchIndexOptions {
includeDefault?: boolean;
}
function getGuildMemberIndexServices(options: GuildMemberSearchIndexOptions = {}): Array<IGuildMemberSearchService> {
const services: Array<IGuildMemberSearchService> = [];
function getGuildMemberIndexService(options: GuildMemberSearchIndexOptions = {}): IGuildMemberSearchService | null {
const includeDefault = options.includeDefault ?? true;
const defaultService = getGuildMemberSearchService();
if (includeDefault && defaultService) {
services.push(defaultService);
}
return services;
const service = getGuildMemberSearchService();
return includeDefault ? service : null;
}
export class GuildMemberSearchIndexService {
async updateUserMembers(
user: User,
guildIds: Array<GuildID>,
guildRepository: IGuildRepositoryAggregate,
): Promise<void> {
if (guildIds.length === 0) return;
const guilds = await guildRepository.listGuilds(guildIds);
const indexedGuilds = guilds.filter((guild) => guild.membersIndexedAt != null);
if (indexedGuilds.length === 0) return;
const members = await Promise.all(indexedGuilds.map((guild) => guildRepository.getMember(guild.id, user.id)));
for (const member of members) {
if (member) {
void this.updateMember(member, user);
}
}
}
async indexMember(member: GuildMember, user: User, options?: GuildMemberSearchIndexOptions): Promise<void> {
try {
const searchServices = getGuildMemberIndexServices(options);
if (searchServices.length === 0) {
const searchService = getGuildMemberIndexService(options);
if (!searchService) {
return;
}
await Promise.all(searchServices.map((searchService) => searchService.indexMember(member, user)));
await searchService.indexMember(member, user);
} catch (error) {
Logger.error(
{
@@ -43,11 +57,11 @@ export class GuildMemberSearchIndexService {
async updateMember(member: GuildMember, user: User, options?: GuildMemberSearchIndexOptions): Promise<void> {
try {
const searchServices = getGuildMemberIndexServices(options);
if (searchServices.length === 0) {
const searchService = getGuildMemberIndexService(options);
if (!searchService) {
return;
}
await Promise.all(searchServices.map((searchService) => searchService.updateMember(member, user)));
await searchService.updateMember(member, user);
} catch (error) {
Logger.error(
{
@@ -62,11 +76,11 @@ export class GuildMemberSearchIndexService {
async deleteMember(guildId: GuildID, userId: UserID, options?: GuildMemberSearchIndexOptions): Promise<void> {
try {
const searchServices = getGuildMemberIndexServices(options);
if (searchServices.length === 0) {
const searchService = getGuildMemberIndexService(options);
if (!searchService) {
return;
}
await Promise.all(searchServices.map((searchService) => searchService.deleteMember(guildId, userId)));
await searchService.deleteMember(guildId, userId);
} catch (error) {
Logger.error(
{