Swarm/DysonNetwork.Sphere/Sticker/StickerService.cs
2025-05-10 21:28:25 +08:00

55 lines
1.5 KiB
C#

using DysonNetwork.Sphere.Storage;
using Microsoft.EntityFrameworkCore;
namespace DysonNetwork.Sphere.Sticker;
public class StickerService(AppDatabase db, FileService fs)
{
public async Task<Sticker> CreateStickerAsync(Sticker sticker)
{
db.Stickers.Add(sticker);
await db.SaveChangesAsync();
await fs.MarkUsageAsync(sticker.Image, 1);
return sticker;
}
public async Task<Sticker> UpdateStickerAsync(Sticker sticker, CloudFile? newImage)
{
if (newImage != null)
{
await fs.MarkUsageAsync(sticker.Image, -1);
sticker.Image = newImage;
await fs.MarkUsageAsync(sticker.Image, 1);
}
db.Stickers.Update(sticker);
await db.SaveChangesAsync();
return sticker;
}
public async Task DeleteStickerAsync(Sticker sticker)
{
db.Stickers.Remove(sticker);
await db.SaveChangesAsync();
await fs.MarkUsageAsync(sticker.Image, -1);
}
public async Task DeleteStickerPackAsync(StickerPack pack)
{
var stickers = await db.Stickers
.Include(s => s.Image)
.Where(s => s.PackId == pack.Id)
.ToListAsync();
var images = stickers.Select(s => s.Image).ToList();
db.Stickers.RemoveRange(stickers);
db.StickerPacks.Remove(pack);
await db.SaveChangesAsync();
await fs.MarkUsageRangeAsync(images, -1);
}
}