From eacb7c8f2fba7a3bae9db0a27711558bb558e51b Mon Sep 17 00:00:00 2001
From: LittleSheep <littlesheep.code@hotmail.com>
Date: Wed, 4 Jun 2025 01:48:26 +0800
Subject: [PATCH] :bug: Trying to fix stickers

---
 .../Sticker/StickerController.cs               |  6 +++---
 DysonNetwork.Sphere/Sticker/StickerService.cs  | 18 ++++++++++--------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/DysonNetwork.Sphere/Sticker/StickerController.cs b/DysonNetwork.Sphere/Sticker/StickerController.cs
index 5272f05..d635655 100644
--- a/DysonNetwork.Sphere/Sticker/StickerController.cs
+++ b/DysonNetwork.Sphere/Sticker/StickerController.cs
@@ -187,15 +187,15 @@ public class StickerController(AppDatabase db, StickerService st) : ControllerBa
     {
         var sticker = await st.LookupStickerByIdentifierAsync(identifier);
 
-        if (sticker is null) return NotFound();
-        return Redirect($"/files/{sticker.ImageId}");
+        if (sticker?.Image is null) return NotFound();
+        return Redirect($"/files/{sticker.Image.Id}");
     }
 
     [HttpGet("{packId:guid}/content/{id:guid}")]
     public async Task<ActionResult<Sticker>> GetSticker(Guid packId, Guid id)
     {
         var sticker = await db.Stickers
-            .Where(s => s.Pack.Id == packId && s.Id == id)
+            .Where(s => s.PackId == packId && s.Id == id)
             .Include(e => e.Pack)
             .FirstOrDefaultAsync();
         if (sticker is null) return NotFound();
diff --git a/DysonNetwork.Sphere/Sticker/StickerService.cs b/DysonNetwork.Sphere/Sticker/StickerService.cs
index d5519ce..217b95c 100644
--- a/DysonNetwork.Sphere/Sticker/StickerService.cs
+++ b/DysonNetwork.Sphere/Sticker/StickerService.cs
@@ -6,11 +6,13 @@ namespace DysonNetwork.Sphere.Sticker;
 public class StickerService(AppDatabase db, FileService fs, FileReferenceService fileRefService, ICacheService cache)
 {
     public const string StickerFileUsageIdentifier = "sticker";
-    
+
     private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(15);
 
     public async Task<Sticker> CreateStickerAsync(Sticker sticker)
     {
+        if (sticker.Image is null) throw new ArgumentNullException(nameof(sticker.Image));
+
         db.Stickers.Add(sticker);
         await db.SaveChangesAsync();
 
@@ -31,7 +33,8 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
             var stickerResourceId = $"sticker:{sticker.Id}";
 
             // Delete old references
-            var oldRefs = await fileRefService.GetResourceReferencesAsync(stickerResourceId, StickerFileUsageIdentifier);
+            var oldRefs =
+                await fileRefService.GetResourceReferencesAsync(stickerResourceId, StickerFileUsageIdentifier);
             foreach (var oldRef in oldRefs)
             {
                 await fileRefService.DeleteReferenceAsync(oldRef.Id);
@@ -79,9 +82,8 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
         var images = stickers.Select(s => s.Image).ToList();
 
         // Delete all file references for each sticker in the pack
-        foreach (var sticker in stickers)
+        foreach (var stickerResourceId in stickers.Select(sticker => $"sticker:{sticker.Id}"))
         {
-            var stickerResourceId = $"sticker:{sticker.Id}";
             await fileRefService.DeleteResourceReferencesAsync(stickerResourceId);
         }
 
@@ -102,7 +104,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
     {
         identifier = identifier.ToLower();
         // Try to get from the cache first
-        var cacheKey = $"StickerLookup_{identifier}";
+        var cacheKey = $"stickerlookup:{identifier}";
         var cachedSticker = await cache.GetAsync<Sticker>(cacheKey);
         if (cachedSticker is not null)
             return cachedSticker;
@@ -112,7 +114,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
             .Include(e => e.Pack);
         query = Guid.TryParse(identifier, out var guid)
             ? query.Where(e => e.Id == guid)
-            : query.Where(e => (e.Pack.Prefix + e.Slug).ToLower() == identifier);
+            : query.Where(e => EF.Functions.ILike(e.Pack.Prefix + e.Slug, identifier));
 
         var sticker = await query.FirstOrDefaultAsync();
 
@@ -126,7 +128,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
     private async Task PurgeStickerCache(Sticker sticker)
     {
         // Remove both possible cache entries
-        await cache.RemoveAsync($"StickerLookup_{sticker.Id}");
-        await cache.RemoveAsync($"StickerLookup_{sticker.Pack.Prefix}{sticker.Slug}");
+        await cache.RemoveAsync($"stickerlookup:{sticker.Id}");
+        await cache.RemoveAsync($"stickerlookup:{sticker.Pack.Prefix}{sticker.Slug}");
     }
 }
\ No newline at end of file