public async Task <IActionResult> CreateItem([FromBody] GuildConfigForCreateDto guildConfigForCreateDto, [FromQuery] bool importExistingBans = false)
        {
            await RequireSiteAdmin();

            try
            {
                GuildConfig alreadyRegistered = await GetRegisteredGuild(guildConfigForCreateDto.GuildId);

                if (alreadyRegistered != null)
                {
                    throw new GuildAlreadyRegisteredException(guildConfigForCreateDto.GuildId);
                }
            }
            catch (ResourceNotFoundException) { }
            catch (UnregisteredGuildException) { }

            GuildConfig guildConfig = new()
            {
                GuildId                        = guildConfigForCreateDto.GuildId,
                ModRoles                       = guildConfigForCreateDto.ModRoles,
                AdminRoles                     = guildConfigForCreateDto.AdminRoles,
                ModNotificationDM              = guildConfigForCreateDto.ModNotificationDM,
                MutedRoles                     = guildConfigForCreateDto.MutedRoles,
                ModPublicNotificationWebhook   = guildConfigForCreateDto.ModPublicNotificationWebhook,
                ModInternalNotificationWebhook = guildConfigForCreateDto.ModInternalNotificationWebhook,
                StrictModPermissionCheck       = guildConfigForCreateDto.StrictModPermissionCheck,
                ExecuteWhoisOnJoin             = guildConfigForCreateDto.ExecuteWhoisOnJoin,
                PublishModeratorInfo           = guildConfigForCreateDto.PublishModeratorInfo,
                PreferredLanguage              = guildConfigForCreateDto?.PreferredLanguage ?? _config.GetDefaultLanguage()
            };

            guildConfig = await GuildConfigRepository.CreateDefault(_serviceProvider).CreateGuildConfig(guildConfig, importExistingBans);

            return(StatusCode(201, guildConfig));
        }
        public async Task <IActionResult> CreateItem([FromBody] GuildConfigForCreateDto guildConfigForCreateDto)
        {
            // check if request is made by a site admin
            logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | Incoming request.");
            Identity currentIdentity = await identityManager.GetIdentity(HttpContext);

            User currentUser = await currentIdentity.GetCurrentDiscordUser();

            if (currentUser == null)
            {
                logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 401 Unauthorized.");
                return(Unauthorized());
            }
            if (!config.Value.SiteAdminDiscordUserIds.Contains(currentUser.Id))
            {
                logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 401 User unauthorized.");
                return(Unauthorized());
            }
            // ========================================================

            GuildConfig alreadyExists = await database.SelectSpecificGuildConfig(guildConfigForCreateDto.GuildId);

            if (alreadyExists != null)
            {
                logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 400 Guild is already registered.");
                return(BadRequest("Guild is already registered."));
            }

            Guild guild = await discord.FetchGuildInfo(guildConfigForCreateDto.GuildId);

            if (guild == null)
            {
                logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 400 Guild not found.");
                return(BadRequest("Guild not found."));
            }
            if (guild.Roles.FindIndex(x => x.Id == guildConfigForCreateDto.ModRoleId) < 0 || guild.Roles.FindIndex(x => x.Id == guildConfigForCreateDto.AdminRoleId) < 0)
            {
                logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 400 Roles not found.");
                return(BadRequest("Roles not found."));
            }

            GuildConfig guildConfig = new GuildConfig();

            guildConfig.GuildId                        = guildConfigForCreateDto.GuildId;
            guildConfig.ModRoleId                      = guildConfigForCreateDto.ModRoleId;
            guildConfig.AdminRoleId                    = guildConfigForCreateDto.AdminRoleId;
            guildConfig.ModNotificationDM              = guildConfigForCreateDto.ModNotificationDM;
            guildConfig.MutedRoleId                    = guildConfigForCreateDto.MutedRoleId;
            guildConfig.ModPublicNotificationWebhook   = guildConfigForCreateDto.ModPublicNotificationWebhook;
            guildConfig.ModInternalNotificationWebhook = guildConfigForCreateDto.ModInternalNotificationWebhook;

            await database.SaveGuildConfig(guildConfig);

            await database.SaveChangesAsync();

            logger.LogInformation($"{HttpContext.Request.Method} {HttpContext.Request.Path} | 201 Resource created.");
            return(StatusCode(201));
        }