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
@@ -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(
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user