🐛 Trying to fix stickers
This commit is contained in:
parent
1f01a4088c
commit
eacb7c8f2f
@ -187,15 +187,15 @@ public class StickerController(AppDatabase db, StickerService st) : ControllerBa
|
|||||||
{
|
{
|
||||||
var sticker = await st.LookupStickerByIdentifierAsync(identifier);
|
var sticker = await st.LookupStickerByIdentifierAsync(identifier);
|
||||||
|
|
||||||
if (sticker is null) return NotFound();
|
if (sticker?.Image is null) return NotFound();
|
||||||
return Redirect($"/files/{sticker.ImageId}");
|
return Redirect($"/files/{sticker.Image.Id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{packId:guid}/content/{id:guid}")]
|
[HttpGet("{packId:guid}/content/{id:guid}")]
|
||||||
public async Task<ActionResult<Sticker>> GetSticker(Guid packId, Guid id)
|
public async Task<ActionResult<Sticker>> GetSticker(Guid packId, Guid id)
|
||||||
{
|
{
|
||||||
var sticker = await db.Stickers
|
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)
|
.Include(e => e.Pack)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (sticker is null) return NotFound();
|
if (sticker is null) return NotFound();
|
||||||
|
@ -11,6 +11,8 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
|
|||||||
|
|
||||||
public async Task<Sticker> CreateStickerAsync(Sticker sticker)
|
public async Task<Sticker> CreateStickerAsync(Sticker sticker)
|
||||||
{
|
{
|
||||||
|
if (sticker.Image is null) throw new ArgumentNullException(nameof(sticker.Image));
|
||||||
|
|
||||||
db.Stickers.Add(sticker);
|
db.Stickers.Add(sticker);
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
@ -31,7 +33,8 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
|
|||||||
var stickerResourceId = $"sticker:{sticker.Id}";
|
var stickerResourceId = $"sticker:{sticker.Id}";
|
||||||
|
|
||||||
// Delete old references
|
// Delete old references
|
||||||
var oldRefs = await fileRefService.GetResourceReferencesAsync(stickerResourceId, StickerFileUsageIdentifier);
|
var oldRefs =
|
||||||
|
await fileRefService.GetResourceReferencesAsync(stickerResourceId, StickerFileUsageIdentifier);
|
||||||
foreach (var oldRef in oldRefs)
|
foreach (var oldRef in oldRefs)
|
||||||
{
|
{
|
||||||
await fileRefService.DeleteReferenceAsync(oldRef.Id);
|
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();
|
var images = stickers.Select(s => s.Image).ToList();
|
||||||
|
|
||||||
// Delete all file references for each sticker in the pack
|
// 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);
|
await fileRefService.DeleteResourceReferencesAsync(stickerResourceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +104,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
|
|||||||
{
|
{
|
||||||
identifier = identifier.ToLower();
|
identifier = identifier.ToLower();
|
||||||
// Try to get from the cache first
|
// Try to get from the cache first
|
||||||
var cacheKey = $"StickerLookup_{identifier}";
|
var cacheKey = $"stickerlookup:{identifier}";
|
||||||
var cachedSticker = await cache.GetAsync<Sticker>(cacheKey);
|
var cachedSticker = await cache.GetAsync<Sticker>(cacheKey);
|
||||||
if (cachedSticker is not null)
|
if (cachedSticker is not null)
|
||||||
return cachedSticker;
|
return cachedSticker;
|
||||||
@ -112,7 +114,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
|
|||||||
.Include(e => e.Pack);
|
.Include(e => e.Pack);
|
||||||
query = Guid.TryParse(identifier, out var guid)
|
query = Guid.TryParse(identifier, out var guid)
|
||||||
? query.Where(e => e.Id == 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();
|
var sticker = await query.FirstOrDefaultAsync();
|
||||||
|
|
||||||
@ -126,7 +128,7 @@ public class StickerService(AppDatabase db, FileService fs, FileReferenceService
|
|||||||
private async Task PurgeStickerCache(Sticker sticker)
|
private async Task PurgeStickerCache(Sticker sticker)
|
||||||
{
|
{
|
||||||
// Remove both possible cache entries
|
// Remove both possible cache entries
|
||||||
await cache.RemoveAsync($"StickerLookup_{sticker.Id}");
|
await cache.RemoveAsync($"stickerlookup:{sticker.Id}");
|
||||||
await cache.RemoveAsync($"StickerLookup_{sticker.Pack.Prefix}{sticker.Slug}");
|
await cache.RemoveAsync($"stickerlookup:{sticker.Pack.Prefix}{sticker.Slug}");
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user