1
0
mirror of synced 2025-02-20 04:20:59 +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" /> <PackageReference Include="Throw" Version="1.3.1" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Game\Card\Read" />
</ItemGroup>
</Project> </Project>

View File

@ -1,4 +1,6 @@
namespace Application.Common.Models; using Domain.Enums;
namespace Application.Common.Models;
/// <summary> /// <summary>
/// All errors contained in ServiceResult objects must return an error of this type /// All errors contained in ServiceResult objects must return an error of this type
@ -36,7 +38,7 @@ public class ServiceError
/// <summary> /// <summary>
/// Default error for when we receive an exception /// Default error for when we receive an exception
/// </summary> /// </summary>
public static ServiceError DefaultError => new("An unknown exception occured.", 999); public static ServiceError DefaultError => new("An unknown exception occured.", (int)CardReturnCode.Unknown);
/// <summary> /// <summary>
/// Default validation error. Use this for invalid parameters in controller actions and service methods. /// Default validation error. Use this for invalid parameters in controller actions and service methods.
@ -56,9 +58,11 @@ public class ServiceError
/// </summary> /// </summary>
public static ServiceError CustomMessage(string errorMessage) 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 UserNotFound => new("User with this id does not exist", 996);
public static ServiceError UserFailedToCreate => new("Failed to create User.", 995); 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 class ServiceResult
{ {
public bool Succeeded => Error == null; public bool Succeeded => Error is null;
public ServiceError? Error { get; set; } 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) public override Task<ServiceResult<string>> Handle(CardReissueCommand request, CancellationToken cancellationToken)
{ {
// TODO: Support actual reissue // TODO: Support actual reissue
var result = $"{(int)CardReturnCode.NotReissue}"; return Task.FromResult(ServiceResult.Failed<string>(ServiceError.NotReissue));
return Task.FromResult(new ServiceResult<string>(result));
} }
} }

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