/* * Copyright (C) 2026 Fluxer Contributors * * This file is part of Fluxer. * * Fluxer is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fluxer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Fluxer. If not, see . */ import type {GuildID, UserID} from '~/BrandedTypes'; import type {IChannelRepository} from '~/channel/IChannelRepository'; import type {ChannelService} from '~/channel/services/ChannelService'; import type { GuildCreateRequest, GuildPartialResponse, GuildResponse, GuildUpdateRequest, GuildVanityURLResponse, } from '~/guild/GuildModel'; import type {EntityAssetService} from '~/infrastructure/EntityAssetService'; import type {IGatewayService} from '~/infrastructure/IGatewayService'; import type {SnowflakeService} from '~/infrastructure/SnowflakeService'; import type {InviteRepository} from '~/invite/InviteRepository'; import type {Guild, GuildMember, User} from '~/Models'; import type {RequestCache} from '~/middleware/RequestCacheMiddleware'; import type {IUserRepository} from '~/user/IUserRepository'; import type {IWebhookRepository} from '~/webhook/IWebhookRepository'; import type {GuildAuditLogService} from '../GuildAuditLogService'; import type {IGuildRepository} from '../IGuildRepository'; import {GuildDataHelpers} from './data/GuildDataHelpers'; import {GuildOperationsService} from './data/GuildOperationsService'; import {GuildOwnershipService} from './data/GuildOwnershipService'; import {GuildVanityService} from './data/GuildVanityService'; export class GuildDataService { private readonly helpers: GuildDataHelpers; private readonly operationsService: GuildOperationsService; private readonly vanityService: GuildVanityService; private readonly ownershipService: GuildOwnershipService; constructor( private readonly guildRepository: IGuildRepository, private readonly channelRepository: IChannelRepository, private readonly inviteRepository: InviteRepository, private readonly channelService: ChannelService, private readonly gatewayService: IGatewayService, private readonly entityAssetService: EntityAssetService, private readonly userRepository: IUserRepository, private readonly snowflakeService: SnowflakeService, private readonly webhookRepository: IWebhookRepository, private readonly guildAuditLogService: GuildAuditLogService, ) { this.helpers = new GuildDataHelpers(this.gatewayService, this.guildAuditLogService); this.operationsService = new GuildOperationsService( this.guildRepository, this.channelRepository, this.inviteRepository, this.channelService, this.gatewayService, this.entityAssetService, this.userRepository, this.snowflakeService, this.webhookRepository, this.helpers, ); this.vanityService = new GuildVanityService(this.guildRepository, this.inviteRepository, this.helpers); this.ownershipService = new GuildOwnershipService(this.guildRepository, this.userRepository, this.helpers); } async getGuild({userId, guildId}: {userId: UserID; guildId: GuildID}): Promise { return this.operationsService.getGuild({userId, guildId}); } async getUserGuilds(userId: UserID): Promise> { return this.operationsService.getUserGuilds(userId); } async getPublicGuildData(guildId: GuildID): Promise { return this.operationsService.getPublicGuildData(guildId); } async getGuildSystem(guildId: GuildID): Promise { return this.operationsService.getGuildSystem(guildId); } async createGuild( params: {user: User; data: GuildCreateRequest}, auditLogReason?: string | null, ): Promise { return this.operationsService.createGuild(params, auditLogReason); } async updateGuild( params: {userId: UserID; guildId: GuildID; data: GuildUpdateRequest; requestCache: RequestCache}, auditLogReason?: string | null, ): Promise { return this.operationsService.updateGuild(params, auditLogReason); } async getVanityURL(params: {userId: UserID; guildId: GuildID}): Promise { return this.vanityService.getVanityURL(params); } async updateVanityURL( params: {userId: UserID; guildId: GuildID; code: string | null; requestCache: RequestCache}, auditLogReason?: string | null, ): Promise<{code: string}> { return this.vanityService.updateVanityURL(params, auditLogReason); } async deleteGuild(params: {user: User; guildId: GuildID}, auditLogReason?: string | null): Promise { return this.operationsService.deleteGuild(params, auditLogReason); } async deleteGuildForAdmin(guildId: GuildID, _auditLogReason?: string | null): Promise { return this.operationsService.deleteGuildById(guildId); } async transferOwnership( params: {userId: UserID; guildId: GuildID; newOwnerId: UserID}, auditLogReason?: string | null, ): Promise { return this.ownershipService.transferOwnership(params, auditLogReason); } async checkGuildVerification(params: {user: User; guild: Guild; member: GuildMember}): Promise { return this.ownershipService.checkGuildVerification(params); } }