Update sticker controller

This commit is contained in:
2025-08-07 02:47:29 +08:00
parent e09922c8df
commit 1dc33c5bd4

View File

@@ -70,13 +70,13 @@ public class StickerController(AppDatabase db, StickerService st, FileService.Fi
var accountId = Guid.Parse(currentUser.Id); var accountId = Guid.Parse(currentUser.Id);
var ownershipsId = await db.StickerPackOwnerships var ownershipsId = await db.StickerPackOwnerships
.Where(p => p.AccountId == accountId) .Where(p => p.AccountId == accountId)
.Select(p => p.PackId) .Select(p => p.PackId)
.ToListAsync(); .ToListAsync();
var packs = await db.StickerPacks var packs = await db.StickerPacks
.Where(p => ownershipsId.Contains(p.Id)) .Where(p => ownershipsId.Contains(p.Id))
.Include(p => p.Stickers) .Include(p => p.Stickers)
.ToListAsync(); .ToListAsync();
return Ok(packs); return Ok(packs);
} }
@@ -339,6 +339,21 @@ public class StickerController(AppDatabase db, StickerService st, FileService.Fi
return Ok(sticker); return Ok(sticker);
} }
[HttpGet("{packId:guid}/own")]
[Authorize]
public async Task<ActionResult<StickerPackOwnership>> GetStickerPackOwnership(Guid packId)
{
if (HttpContext.Items["CurrentUser"] is not Account currentUser)
return Unauthorized();
var accountId = Guid.Parse(currentUser.Id);
var ownership = await db.StickerPackOwnerships
.Where(p => p.PackId == packId && p.AccountId == accountId)
.FirstOrDefaultAsync();
if (ownership is null) return NotFound();
return Ok(ownership);
}
[HttpPost("{packId:guid}/own")] [HttpPost("{packId:guid}/own")]
[Authorize] [Authorize]
public async Task<ActionResult<StickerPackOwnership>> AcquireStickerPack([FromRoute] Guid packId) public async Task<ActionResult<StickerPackOwnership>> AcquireStickerPack([FromRoute] Guid packId)
@@ -347,10 +362,15 @@ public class StickerController(AppDatabase db, StickerService st, FileService.Fi
return Unauthorized(); return Unauthorized();
var pack = await db.StickerPacks var pack = await db.StickerPacks
.Where(p => p.Id == packId) .Where(p => p.Id == packId)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
if (pack is null) return NotFound(); if (pack is null) return NotFound();
var existingOwnership = await db.StickerPackOwnerships
.Where(p => p.PackId == packId && p.AccountId == Guid.Parse(currentUser.Id))
.FirstOrDefaultAsync();
if (existingOwnership is not null) return Ok(existingOwnership);
var ownership = new StickerPackOwnership var ownership = new StickerPackOwnership
{ {
PackId = packId, PackId = packId,
@@ -371,8 +391,8 @@ public class StickerController(AppDatabase db, StickerService st, FileService.Fi
var accountId = Guid.Parse(currentUser.Id); var accountId = Guid.Parse(currentUser.Id);
var ownership = await db.StickerPackOwnerships var ownership = await db.StickerPackOwnerships
.Where(p => p.PackId == packId && p.AccountId == accountId) .Where(p => p.PackId == packId && p.AccountId == accountId)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
if (ownership is null) return NotFound(); if (ownership is null) return NotFound();
db.Remove(ownership); db.Remove(ownership);
@@ -380,4 +400,4 @@ public class StickerController(AppDatabase db, StickerService st, FileService.Fi
return NoContent(); return NoContent();
} }
} }