mirror of
https://gitea.tendokyu.moe/Kayori/Medusa.net.git
synced 2026-09-25 07:48:10 +03:00
44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using System.Security.Claims;
|
|
using Abstractions.Entities;
|
|
using Abstractions.Services;
|
|
using HotChocolate.Authorization;
|
|
|
|
namespace Server.GraphQL;
|
|
|
|
[ExtendObjectType(OperationTypeNames.Mutation)]
|
|
public class CardMutation
|
|
{
|
|
[Authorize]
|
|
public async Task<IQueryable<Card>> AddCard([Service] ICardService cardService, [Service] AppDbContext appDbContext, string cardNumber, ClaimsPrincipal claimsPrincipal,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
var parsed = int.TryParse(claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier) ?? "", out var userId);
|
|
|
|
if (!parsed && userId is 0)
|
|
{
|
|
throw new ArgumentException("Cannot find userId");
|
|
}
|
|
|
|
var existingCard = await cardService.FindByKonamiId(cardNumber);
|
|
|
|
if (existingCard is not null)
|
|
{
|
|
throw new Exception($"Card {cardNumber} is already exists");
|
|
}
|
|
|
|
var cardId = cardService.ConvertKonamiIdToUid(cardNumber);
|
|
|
|
var card = new Card()
|
|
{
|
|
KonamiId = cardNumber,
|
|
RawId = cardId,
|
|
UserId = userId
|
|
};
|
|
|
|
var entity = (await appDbContext.Cards.AddAsync(card, cancellationToken)).Entity;
|
|
|
|
await appDbContext.SaveChangesAsync(cancellationToken);
|
|
|
|
return appDbContext.Cards.Where(c => c.Id == entity.Id);
|
|
}
|
|
} |