1
0
mirror of synced 2025-02-17 11:08:31 +01:00

Add card read, use service error for not registered and not reissue

This commit is contained in:
asesidaa 2023-02-12 01:09:29 +08:00
parent 7093997658
commit 805611027c
6 changed files with 56 additions and 12 deletions

View File

@ -21,8 +21,4 @@
<PackageReference Include="Throw" Version="1.3.1" />
</ItemGroup>
<ItemGroup>
<Folder Include="Game\Card\Read" />
</ItemGroup>
</Project>

View File

@ -1,4 +1,6 @@
namespace Application.Common.Models;
using Domain.Enums;
namespace Application.Common.Models;
/// <summary>
/// All errors contained in ServiceResult objects must return an error of this type
@ -36,7 +38,7 @@ public class ServiceError
/// <summary>
/// Default error for when we receive an exception
/// </summary>
public static ServiceError DefaultError => new("An unknown exception occured.", 999);
public static ServiceError DefaultError => new("An unknown exception occured.", (int)CardReturnCode.Unknown);
/// <summary>
/// Default validation error. Use this for invalid parameters in controller actions and service methods.
@ -56,9 +58,11 @@ public class ServiceError
/// </summary>
public static ServiceError CustomMessage(string errorMessage)
{
return new ServiceError(errorMessage, 997);
return new ServiceError(errorMessage, (int)CardReturnCode.Unknown);
}
public static ServiceError NotReissue => new ServiceError("Not reissue, registering a new card", (int)CardReturnCode.NotReissue);
public static ServiceError UserNotFound => new("User with this id does not exist", 996);
public static ServiceError UserFailedToCreate => new("Failed to create User.", 995);

View File

@ -26,7 +26,7 @@ public class ServiceResult<T> : ServiceResult
public class ServiceResult
{
public bool Succeeded => Error == null;
public bool Succeeded => Error is null;
public ServiceError? Error { get; set; }

View File

@ -15,7 +15,6 @@ public class CardReissueCommandHandler : CardRequestHandlerBase<CardReissueComma
public override Task<ServiceResult<string>> Handle(CardReissueCommand request, CancellationToken cancellationToken)
{
// TODO: Support actual reissue
var result = $"{(int)CardReturnCode.NotReissue}";
return Task.FromResult(new ServiceResult<string>(result));
return Task.FromResult(ServiceResult.Failed<string>(ServiceError.NotReissue));
}
}

View File

@ -0,0 +1,33 @@
using Application.Common.Extensions;
using Application.Common.Models;
using Application.Interfaces;
using Domain.Enums;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace Application.Game.Card.Read;
public record ReadCardQuery(long CardId) : IRequestWrapper<string>;
public class ReadCardQueryHandler : CardRequestHandlerBase<ReadCardQuery, string>
{
private readonly ILogger<ReadCardQueryHandler> logger;
public ReadCardQueryHandler(ICardDependencyAggregate aggregate, ILogger<ReadCardQueryHandler> logger) : base(aggregate) {
this.logger = logger;
}
public override async Task<ServiceResult<string>> Handle(ReadCardQuery request, CancellationToken cancellationToken)
{
var card = await CardDbContext.CardMains.FirstOrDefaultAsync(card => card.CardId == request.CardId, cancellationToken: cancellationToken);
if (card is null)
{
logger.LogInformation("Card with {CardId} does not exist! Registering a new one...", request.CardId);
return ServiceResult.Failed<string>(new ServiceError($"Card id: {request.CardId} does not exist!", (int)CardReturnCode.CardNotRegistered));
}
var result = card.SerializeCardData("/root/card");
return new ServiceResult<string>(result);
}
}

View File

@ -2,7 +2,9 @@
using Application.Common.Models;
using Application.Game.Card;
using Application.Game.Card.Management;
using Application.Game.Card.Read;
using Application.Game.Card.Session;
using Application.Game.Card.Write;
using Domain;
using Domain.Enums;
using Microsoft.AspNetCore.Mvc;
@ -36,6 +38,7 @@ public class CardController : BaseController<CardController>
switch (cardRequestType)
{
case CardRequestType.ReadCard:
result = await Mediator.Send(new ReadCardQuery(request.CardId));
break;
case CardRequestType.ReadCardDetail:
break;
@ -80,29 +83,37 @@ public class CardController : BaseController<CardController>
result = await Mediator.Send(new GetSessionCommand(request.CardId, request.Mac));
break;
case CardRequestType.WriteCard:
break;
case CardRequestType.WriteCardDetail:
break;
case CardRequestType.WriteCardBData:
break;
case CardRequestType.WriteAvatar:
result = await Mediator.Send(new WriteAvatarCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteItem:
result = await Mediator.Send(new WriteItemCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteTitle:
result = await Mediator.Send(new WriteTitleCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteMusicDetail:
result = await Mediator.Send(new WriteMusicDetailCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteNavigator:
result = await Mediator.Send(new WriteNavigatorCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteCoin:
result = await Mediator.Send(new WriteCoinCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteSkin:
result = await Mediator.Send(new WriteSkinCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteUnlockKeynum:
result = await Mediator.Send(new WriteUnlockKeynumCommand(request.CardId, request.Data));
break;
case CardRequestType.WriteSoundEffect:
result = await Mediator.Send(new WriteSoundEffectCommand(request.CardId, request.Data));
break;
case CardRequestType.StartOnlineMatching:
break;
@ -130,7 +141,8 @@ public class CardController : BaseController<CardController>
return Ok(result.Data);
}
var errorMessage = $"{(int)CardReturnCode.Unknown}\n" +
// Here error is not null since Succeeded => Error is null;
var errorMessage = $"{result.Error!.Code}\n" +
$"{result.Error!.Message}";
return Ok(errorMessage);
}