From 805611027cdf937add83f906435cd01ceffc7982 Mon Sep 17 00:00:00 2001 From: asesidaa <1061472754@qq.com> Date: Sun, 12 Feb 2023 01:09:29 +0800 Subject: [PATCH] Add card read, use service error for not registered and not reissue --- Application/Application.csproj | 4 --- Application/Common/Models/ServiceError.cs | 10 ++++-- Application/Common/Models/ServiceResult.cs | 2 +- .../Card/Management/CardReissueCommand.cs | 3 +- Application/Game/Card/Read/ReadCardQuery.cs | 33 +++++++++++++++++++ MainServer/Controllers/Game/CardController.cs | 16 +++++++-- 6 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 Application/Game/Card/Read/ReadCardQuery.cs diff --git a/Application/Application.csproj b/Application/Application.csproj index 81ec46e..a11bca2 100644 --- a/Application/Application.csproj +++ b/Application/Application.csproj @@ -21,8 +21,4 @@ - - - - diff --git a/Application/Common/Models/ServiceError.cs b/Application/Common/Models/ServiceError.cs index 3fb8248..628b13a 100644 --- a/Application/Common/Models/ServiceError.cs +++ b/Application/Common/Models/ServiceError.cs @@ -1,4 +1,6 @@ -namespace Application.Common.Models; +using Domain.Enums; + +namespace Application.Common.Models; /// /// All errors contained in ServiceResult objects must return an error of this type @@ -36,7 +38,7 @@ public class ServiceError /// /// Default error for when we receive an exception /// - public static ServiceError DefaultError => new("An unknown exception occured.", 999); + public static ServiceError DefaultError => new("An unknown exception occured.", (int)CardReturnCode.Unknown); /// /// Default validation error. Use this for invalid parameters in controller actions and service methods. @@ -56,9 +58,11 @@ public class ServiceError /// 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); diff --git a/Application/Common/Models/ServiceResult.cs b/Application/Common/Models/ServiceResult.cs index 849f197..9956fe8 100644 --- a/Application/Common/Models/ServiceResult.cs +++ b/Application/Common/Models/ServiceResult.cs @@ -26,7 +26,7 @@ public class ServiceResult : ServiceResult public class ServiceResult { - public bool Succeeded => Error == null; + public bool Succeeded => Error is null; public ServiceError? Error { get; set; } diff --git a/Application/Game/Card/Management/CardReissueCommand.cs b/Application/Game/Card/Management/CardReissueCommand.cs index 4fd7e91..d23cab7 100644 --- a/Application/Game/Card/Management/CardReissueCommand.cs +++ b/Application/Game/Card/Management/CardReissueCommand.cs @@ -15,7 +15,6 @@ public class CardReissueCommandHandler : CardRequestHandlerBase> Handle(CardReissueCommand request, CancellationToken cancellationToken) { // TODO: Support actual reissue - var result = $"{(int)CardReturnCode.NotReissue}"; - return Task.FromResult(new ServiceResult(result)); + return Task.FromResult(ServiceResult.Failed(ServiceError.NotReissue)); } } \ No newline at end of file diff --git a/Application/Game/Card/Read/ReadCardQuery.cs b/Application/Game/Card/Read/ReadCardQuery.cs new file mode 100644 index 0000000..8a67286 --- /dev/null +++ b/Application/Game/Card/Read/ReadCardQuery.cs @@ -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; + +public class ReadCardQueryHandler : CardRequestHandlerBase +{ + private readonly ILogger logger; + + public ReadCardQueryHandler(ICardDependencyAggregate aggregate, ILogger logger) : base(aggregate) { + this.logger = logger; + } + + public override async Task> 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(new ServiceError($"Card id: {request.CardId} does not exist!", (int)CardReturnCode.CardNotRegistered)); + } + + var result = card.SerializeCardData("/root/card"); + + return new ServiceResult(result); + } +} \ No newline at end of file diff --git a/MainServer/Controllers/Game/CardController.cs b/MainServer/Controllers/Game/CardController.cs index 99c889d..b87ddf4 100644 --- a/MainServer/Controllers/Game/CardController.cs +++ b/MainServer/Controllers/Game/CardController.cs @@ -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 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 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 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); }