feat: freeze config backup model
the database model will probably change in the future, but backups should keep the same model even when that happens.
This commit is contained in:
parent
cbb07f9cc3
commit
d48ab7e16e
2 changed files with 117 additions and 21 deletions
|
|
@ -36,10 +36,7 @@ public partial class GuildsController
|
|||
|
||||
[Authorize]
|
||||
[HttpPost("config")]
|
||||
public async Task<IActionResult> ImportConfigAsync(
|
||||
string id,
|
||||
[FromBody] GuildConfigExport export
|
||||
)
|
||||
public async Task<IActionResult> 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<GuildConfigExport> ToExport(Database.Models.Guild config)
|
||||
private async Task<ConfigExport> 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<InviteExport> Invites,
|
||||
IEnumerable<WatchlistExport> Watchlist
|
||||
);
|
||||
|
||||
public record InviteExport(string Code, string Name);
|
||||
|
||||
public record WatchlistExport(ulong UserId, Instant AddedAt, ulong ModeratorId, string Reason);
|
||||
}
|
||||
|
|
|
|||
112
Catalogger.Backend/Database/Models/ConfigExport.cs
Normal file
112
Catalogger.Backend/Database/Models/ConfigExport.cs
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
using NodaTime;
|
||||
|
||||
namespace Catalogger.Backend.Database.Models;
|
||||
|
||||
public record ConfigExport(
|
||||
ulong Id,
|
||||
ChannelsBackup Channels,
|
||||
string[] BannedSystems,
|
||||
ulong[] KeyRoles,
|
||||
IEnumerable<InviteExport> Invites,
|
||||
IEnumerable<WatchlistExport> Watchlist
|
||||
);
|
||||
|
||||
public record InviteExport(string Code, string Name);
|
||||
|
||||
public record WatchlistExport(ulong UserId, Instant AddedAt, ulong ModeratorId, string Reason);
|
||||
|
||||
public class ChannelsBackup
|
||||
{
|
||||
public List<ulong> IgnoredChannels { get; init; } = [];
|
||||
public List<ulong> IgnoredUsers { get; init; } = [];
|
||||
public Dictionary<ulong, List<ulong>> IgnoredUsersPerChannel { get; init; } = [];
|
||||
public Dictionary<ulong, ulong> 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,
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue