// 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, }); } }