feat: watchlist repository, remove ef core from all bot code

This commit is contained in:
sam 2024-10-28 02:14:41 +01:00
parent da4dfae27c
commit f0511a560c
Signed by: sam
GPG key ID: 5F3C3C1B3166639D
19 changed files with 155 additions and 97 deletions

View file

@ -19,6 +19,7 @@ using Catalogger.Backend.Bot;
using Catalogger.Backend.Database.Queries;
using Catalogger.Backend.Extensions;
using Catalogger.Backend.Services;
using Dapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Remora.Discord.Extensions.Embeds;
@ -40,7 +41,7 @@ public partial class GuildsController
);
}
var guildConfig = await db.GetGuildAsync(guildId.Value, false);
var guildConfig = await guildRepository.GetAsync(guildId);
var logChannelId =
webhookExecutor.GetLogChannel(guildConfig, LogChannelType.GuildUpdate)
?? webhookExecutor.GetLogChannel(guildConfig, LogChannelType.GuildMemberRemove);
@ -80,17 +81,32 @@ public partial class GuildsController
);
}
await using var tx = await db.Database.BeginTransactionAsync();
var inviteCount = await db
.Invites.Where(i => i.GuildId == guildId.Value)
.ExecuteDeleteAsync();
var watchlistCount = await db
.Watchlists.Where(w => w.GuildId == guildId.Value)
.ExecuteDeleteAsync();
var messageCount = await db
.Messages.Where(m => m.GuildId == guildId.Value)
.ExecuteDeleteAsync();
await db.Guilds.Where(g => g.Id == guildId.Value).ExecuteDeleteAsync();
await using var tx = await dbConn.BeginTransactionAsync();
var inviteCount = await dbConn.ExecuteAsync(
"delete from invites where guild_id = @GuildId",
new { GuildId = guildId.Value },
tx
);
var watchlistCount = await dbConn.ExecuteAsync(
"delete from watchlists where guild_id = @GuildId",
new { GuildId = guildId.Value },
tx
);
var messageCount = await dbConn.ExecuteAsync(
"delete from messages where guild_id = @GuildId",
new { GuildId = guildId.Value },
tx
);
await dbConn.ExecuteAsync(
"delete from guilds where id = @GuildId",
new { GuildId = guildId.Value },
tx
);
await tx.CommitAsync();
_logger.Information(

View file

@ -18,8 +18,8 @@ using Catalogger.Backend.Api.Middleware;
using Catalogger.Backend.Cache;
using Catalogger.Backend.Cache.InMemoryCache;
using Catalogger.Backend.Database;
using Catalogger.Backend.Database.Queries;
using Catalogger.Backend.Database.Redis;
using Catalogger.Backend.Database.Dapper;
using Catalogger.Backend.Database.Dapper.Repositories;
using Catalogger.Backend.Services;
using Microsoft.AspNetCore.Mvc;
using Remora.Discord.API;
@ -33,6 +33,8 @@ namespace Catalogger.Backend.Api;
public partial class GuildsController(
ILogger logger,
DatabaseContext db,
DatabaseConnection dbConn,
GuildRepository guildRepository,
GuildCache guildCache,
EmojiCache emojiCache,
ChannelCache channelCache,
@ -70,7 +72,7 @@ public partial class GuildsController(
{
var (guildId, guild) = await ParseGuildAsync(id);
var guildConfig = await db.GetGuildAsync(guildId.Value, false);
var guildConfig = await guildRepository.GetAsync(guildId);
var channels = channelCache
.GuildChannels(guildId)
@ -134,12 +136,12 @@ public partial class GuildsController(
[ProducesResponseType<Database.Models.Guild.ChannelConfig>(statusCode: StatusCodes.Status200OK)]
public async Task<IActionResult> PatchGuildAsync(string id, [FromBody] ChannelRequest req)
{
var (guildId, guild) = await ParseGuildAsync(id);
var (guildId, _) = await ParseGuildAsync(id);
var guildChannels = channelCache
.GuildChannels(guildId)
.Where(c => c.Type is ChannelType.GuildText)
.ToList();
var guildConfig = await db.GetGuildAsync(guildId);
var guildConfig = await guildRepository.GetAsync(guildId);
if (req.IgnoredChannels != null)
{
@ -316,9 +318,7 @@ public partial class GuildsController(
)
guildConfig.Channels.MessageDeleteBulk = req.MessageDeleteBulk ?? 0;
db.Update(guildConfig);
await db.SaveChangesAsync();
await guildRepository.UpdateChannelConfigAsync(guildId, guildConfig.Channels);
return Ok(guildConfig.Channels);
}