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);
}