Files
fluxer/fluxer_api/src/api/admin/services/AdminGuildService.ts
T

93 lines
4.0 KiB
TypeScript

// SPDX-License-Identifier: AGPL-3.0-or-later
import type {AdminAuditService} from '@app/api/admin/services/AdminAuditService';
import {AdminGuildLookupService} from '@app/api/admin/services/guild/AdminGuildLookupService';
import {AdminGuildManagementService} from '@app/api/admin/services/guild/AdminGuildManagementService';
import {AdminGuildMembershipService} from '@app/api/admin/services/guild/AdminGuildMembershipService';
import {AdminGuildUpdatePropagator} from '@app/api/admin/services/guild/AdminGuildUpdatePropagator';
import {AdminGuildUpdateService} from '@app/api/admin/services/guild/AdminGuildUpdateService';
import {AdminGuildVanityService} from '@app/api/admin/services/guild/AdminGuildVanityService';
import {createGuildID, createUserID} from '@app/api/BrandedTypes';
import type {ChannelRepository} from '@app/api/channel/ChannelRepository';
import type {GuildDiscoveryRepository} from '@app/api/guild/repositories/GuildDiscoveryRepository';
import type {GuildRepository} from '@app/api/guild/repositories/GuildRepository';
import type {GuildService} from '@app/api/guild/services/GuildService';
import type {EntityAssetService} from '@app/api/infrastructure/EntityAssetService';
import type {IGatewayService} from '@app/api/infrastructure/IGatewayService';
import type {InviteRepository} from '@app/api/invite/InviteRepository';
import {createRequestCache} from '@app/api/middleware/RequestCacheMiddleware';
import type {UserRepository} from '@app/api/user/repositories/UserRepository';
import type {ListGuildAuditLogsRequest} from '@fluxer/schema/src/domains/admin/AdminGuildSchemas';
interface AdminGuildServiceDeps {
guildRepository: GuildRepository;
userRepository: UserRepository;
channelRepository: ChannelRepository;
inviteRepository: InviteRepository;
guildService: GuildService;
gatewayService: IGatewayService;
entityAssetService: EntityAssetService;
auditService: AdminAuditService;
discoveryRepository: GuildDiscoveryRepository;
}
export class AdminGuildService {
readonly lookupService: AdminGuildLookupService;
readonly updateService: AdminGuildUpdateService;
readonly vanityService: AdminGuildVanityService;
readonly membershipService: AdminGuildMembershipService;
readonly managementService: AdminGuildManagementService;
private readonly updatePropagator: AdminGuildUpdatePropagator;
private readonly guildService: GuildService;
constructor(deps: AdminGuildServiceDeps) {
this.guildService = deps.guildService;
this.updatePropagator = new AdminGuildUpdatePropagator({
gatewayService: deps.gatewayService,
discoveryRepository: deps.discoveryRepository,
});
this.lookupService = new AdminGuildLookupService({
guildRepository: deps.guildRepository,
userRepository: deps.userRepository,
channelRepository: deps.channelRepository,
gatewayService: deps.gatewayService,
});
this.updateService = new AdminGuildUpdateService({
guildRepository: deps.guildRepository,
entityAssetService: deps.entityAssetService,
auditService: deps.auditService,
updatePropagator: this.updatePropagator,
guildService: deps.guildService,
});
this.vanityService = new AdminGuildVanityService({
guildRepository: deps.guildRepository,
inviteRepository: deps.inviteRepository,
auditService: deps.auditService,
updatePropagator: this.updatePropagator,
});
this.membershipService = new AdminGuildMembershipService({
userRepository: deps.userRepository,
guildService: deps.guildService,
auditService: deps.auditService,
});
this.managementService = new AdminGuildManagementService({
guildRepository: deps.guildRepository,
gatewayService: deps.gatewayService,
guildService: deps.guildService,
auditService: deps.auditService,
});
}
async listGuildAuditLogs(data: ListGuildAuditLogsRequest) {
return this.guildService.fetchGuildAuditLogs({
guildId: createGuildID(data.guild_id),
requestCache: createRequestCache(),
limit: data.limit,
beforeLogId: data.before,
afterLogId: data.after,
filterUserId: data.user_id ? createUserID(data.user_id) : undefined,
actionType: data.action_type,
});
}
}