diff --git a/Catalogger.Backend/Api/GuildsController.Backup.cs b/Catalogger.Backend/Api/GuildsController.Backup.cs index 2c04fc4..4d64a9e 100644 --- a/Catalogger.Backend/Api/GuildsController.Backup.cs +++ b/Catalogger.Backend/Api/GuildsController.Backup.cs @@ -36,10 +36,7 @@ public partial class GuildsController [Authorize] [HttpPost("config")] - public async Task ImportConfigAsync( - string id, - [FromBody] GuildConfigExport export - ) + public async Task ImportConfigAsync(string id, [FromBody] ConfigExport export) { var (guildId, _) = await ParseGuildAsync(id); if (export.Id != guildId.Value) @@ -56,7 +53,7 @@ public partial class GuildsController await guildRepository.ImportConfigAsync( guildId.Value, - export.Channels, + export.Channels.ToGuildConfig(), export.BannedSystems, export.KeyRoles ); @@ -86,32 +83,19 @@ public partial class GuildsController return NoContent(); } - private async Task ToExport(Database.Models.Guild config) + private async Task ToExport(Database.Models.Guild config) { var id = DiscordSnowflake.New(config.Id); var invites = await inviteRepository.GetGuildInvitesAsync(id); var watchlist = await watchlistRepository.GetGuildWatchlistAsync(id); - return new GuildConfigExport( + return new ConfigExport( config.Id, - config.Channels, + ChannelsBackup.FromGuildConfig(config.Channels), config.BannedSystems, config.KeyRoles, invites.Select(i => new InviteExport(i.Code, i.Name)), watchlist.Select(w => new WatchlistExport(w.UserId, w.AddedAt, w.ModeratorId, w.Reason)) ); } - - public record GuildConfigExport( - ulong Id, - Database.Models.Guild.ChannelConfig Channels, - string[] BannedSystems, - ulong[] KeyRoles, - IEnumerable Invites, - IEnumerable Watchlist - ); - - public record InviteExport(string Code, string Name); - - public record WatchlistExport(ulong UserId, Instant AddedAt, ulong ModeratorId, string Reason); } diff --git a/Catalogger.Backend/Database/Models/ConfigExport.cs b/Catalogger.Backend/Database/Models/ConfigExport.cs new file mode 100644 index 0000000..b6514f7 --- /dev/null +++ b/Catalogger.Backend/Database/Models/ConfigExport.cs @@ -0,0 +1,112 @@ +using NodaTime; + +namespace Catalogger.Backend.Database.Models; + +public record ConfigExport( + ulong Id, + ChannelsBackup Channels, + string[] BannedSystems, + ulong[] KeyRoles, + IEnumerable Invites, + IEnumerable Watchlist +); + +public record InviteExport(string Code, string Name); + +public record WatchlistExport(ulong UserId, Instant AddedAt, ulong ModeratorId, string Reason); + +public class ChannelsBackup +{ + public List IgnoredChannels { get; init; } = []; + public List IgnoredUsers { get; init; } = []; + public Dictionary> IgnoredUsersPerChannel { get; init; } = []; + public Dictionary Redirects { get; init; } = []; + + public ulong GuildUpdate { get; init; } + public ulong GuildEmojisUpdate { get; init; } + public ulong GuildRoleCreate { get; init; } + public ulong GuildRoleUpdate { get; init; } + public ulong GuildRoleDelete { get; init; } + public ulong ChannelCreate { get; init; } + public ulong ChannelUpdate { get; init; } + public ulong ChannelDelete { get; init; } + public ulong GuildMemberAdd { get; init; } + public ulong GuildMemberUpdate { get; init; } + public ulong GuildKeyRoleUpdate { get; init; } + public ulong GuildMemberNickUpdate { get; init; } + public ulong GuildMemberAvatarUpdate { get; init; } + public ulong GuildMemberTimeout { get; init; } + public ulong GuildMemberRemove { get; init; } + public ulong GuildMemberKick { get; init; } + public ulong GuildBanAdd { get; init; } + public ulong GuildBanRemove { get; init; } + public ulong InviteCreate { get; init; } + public ulong InviteDelete { get; init; } + public ulong MessageUpdate { get; init; } + public ulong MessageDelete { get; init; } + public ulong MessageDeleteBulk { get; init; } + + public Guild.ChannelConfig ToGuildConfig() => + new() + { + IgnoredChannels = IgnoredChannels, + IgnoredUsers = IgnoredUsers, + IgnoredUsersPerChannel = IgnoredUsersPerChannel, + Redirects = Redirects, + GuildUpdate = GuildUpdate, + GuildEmojisUpdate = GuildEmojisUpdate, + GuildRoleCreate = GuildRoleCreate, + GuildRoleUpdate = GuildRoleUpdate, + GuildRoleDelete = GuildRoleDelete, + ChannelCreate = ChannelCreate, + ChannelUpdate = ChannelUpdate, + ChannelDelete = ChannelDelete, + GuildMemberAdd = GuildMemberAdd, + GuildMemberUpdate = GuildMemberUpdate, + GuildKeyRoleUpdate = GuildKeyRoleUpdate, + GuildMemberNickUpdate = GuildMemberNickUpdate, + GuildMemberAvatarUpdate = GuildMemberAvatarUpdate, + GuildMemberTimeout = GuildMemberTimeout, + GuildMemberRemove = GuildMemberRemove, + GuildMemberKick = GuildMemberKick, + GuildBanAdd = GuildBanAdd, + GuildBanRemove = GuildBanRemove, + InviteCreate = InviteCreate, + InviteDelete = InviteDelete, + MessageUpdate = MessageUpdate, + MessageDelete = MessageDelete, + MessageDeleteBulk = MessageDeleteBulk, + }; + + public static ChannelsBackup FromGuildConfig(Guild.ChannelConfig channels) => + new() + { + IgnoredChannels = channels.IgnoredChannels, + IgnoredUsers = channels.IgnoredUsers, + IgnoredUsersPerChannel = channels.IgnoredUsersPerChannel, + Redirects = channels.Redirects, + GuildUpdate = channels.GuildUpdate, + GuildEmojisUpdate = channels.GuildEmojisUpdate, + GuildRoleCreate = channels.GuildRoleCreate, + GuildRoleUpdate = channels.GuildRoleUpdate, + GuildRoleDelete = channels.GuildRoleDelete, + ChannelCreate = channels.ChannelCreate, + ChannelUpdate = channels.ChannelUpdate, + ChannelDelete = channels.ChannelDelete, + GuildMemberAdd = channels.GuildMemberAdd, + GuildMemberUpdate = channels.GuildMemberUpdate, + GuildKeyRoleUpdate = channels.GuildKeyRoleUpdate, + GuildMemberNickUpdate = channels.GuildMemberNickUpdate, + GuildMemberAvatarUpdate = channels.GuildMemberAvatarUpdate, + GuildMemberTimeout = channels.GuildMemberTimeout, + GuildMemberRemove = channels.GuildMemberRemove, + GuildMemberKick = channels.GuildMemberKick, + GuildBanAdd = channels.GuildBanAdd, + GuildBanRemove = channels.GuildBanRemove, + InviteCreate = channels.InviteCreate, + InviteDelete = channels.InviteDelete, + MessageUpdate = channels.MessageUpdate, + MessageDelete = channels.MessageDelete, + MessageDeleteBulk = channels.MessageDeleteBulk, + }; +}