Fully working get last log and get recent log

This commit is contained in:
Kayori
2026-09-07 20:16:54 +02:00
parent e5bdb3eb95
commit 5483729d63
5 changed files with 54 additions and 43 deletions
@@ -1,5 +1,6 @@
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using Abstractions.Services;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using MedusaPluginChargeMachine.Services;
@@ -7,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
namespace MedusaPluginChargeMachine.Handlers.LA9;
public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMachineDbContext db)
public class GetLastLogEaChargeHandler(ISessionService sessionService, ICardService cardService, ChargeMachineDbContext db)
: Handler<GetLastLogRequest, GetLastLogEaChargeResponse>
{
public override void Configure()
@@ -18,8 +19,14 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
public override async Task<GetLastLogEaChargeResponse> HandleAsync(GetLastLogRequest req, GameModel model)
{
var today = DateTime.UtcNow.Date;
var cardId = (string?)null;
var targetDate = DateTime.TryParse(req.TargetDate, out var td) ? td.Date : DateTime.Now.Date;
var utcDayStart = targetDate.ToUniversalTime();
var utcDayEnd = utcDayStart.AddDays(1);
var page = int.TryParse(req.Page, out var p) ? Math.Max(0, p) : 0;
var perPage = int.TryParse(req.PerPage, out var pp) ? Math.Max(1, pp) : 8;
string? cardId = null;
if (req.SessionId is not null)
{
@@ -31,13 +38,13 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
if (cardId is not null)
query = query.Where(h => h.CardId == cardId);
var todayRows = await query
.Where(h => h.OrderDate.Date == today)
var dayRows = await query
.Where(h => h.OrderDate >= utcDayStart && h.OrderDate < utcDayEnd)
.ToListAsync();
var todayTotal = todayRows.Sum(h => h.ChargeAmount);
var dayTotal = dayRows.Sum(h => h.ChargeAmount);
var headerItems = todayRows
var headerItems = dayRows
.GroupBy(Denomination)
.Select(g => new GetLastLogChargeItem
{
@@ -47,19 +54,17 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
})
.ToList();
var recentItems = await query
var resultItems = dayRows
.OrderByDescending(h => h.OrderDate)
.Take(10)
.ToListAsync();
var resultItems = recentItems
.Skip(page * perPage)
.Take(perPage)
.Select(h => new GetLastLogResultItem
{
OrderDate = new XrpcString(h.OrderDate.ToString("yyyyMMddHHmmss")),
OrderDate = new XrpcString(h.OrderDate.ToLocalTime().ToString("yyyy-MM-dd HH:mm")),
ChargeId = new XrpcString($"N{Denomination(h)}P"),
ChargeNum = new XrpcInt(h.ChargeNum),
CardType = new XrpcInt(1),
CardNo = new XrpcString(MaskCardId(h.CardId))
CardType = new XrpcString("1"),
CardNo = new XrpcString(cardService.ConvertUidToKonamiId(h.CardId))
})
.ToList();
@@ -77,11 +82,11 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
{
resultItems.Add(new GetLastLogResultItem
{
OrderDate = new XrpcString(""),
OrderDate = new XrpcString("-"),
ChargeId = new XrpcString("N1000P"),
ChargeNum = new XrpcInt(0),
CardType = new XrpcInt(1),
CardNo = new XrpcString("")
CardType = new XrpcString("1"),
CardNo = new XrpcString("-")
});
}
@@ -90,7 +95,7 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
Status = 0,
Header = new GetLastLogEaChargeHeader
{
Chargedaily = new XrpcInt(todayTotal),
Chargedaily = new XrpcInt(dayTotal),
Items = headerItems
},
Result = new GetLastLogEaChargeResult
@@ -103,8 +108,4 @@ public class GetLastLogEaChargeHandler(ISessionService sessionService, ChargeMac
private static int Denomination(Entities.ChargeHistory h) =>
h.ChargeAmount / Math.Max(h.ChargeNum, 1);
private static string MaskCardId(string cardId) =>
cardId.Length <= 4
? new string('*', cardId.Length)
: new string('*', cardId.Length - 4) + cardId[^4..];
}
@@ -1,5 +1,6 @@
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using Abstractions.Services;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using MedusaPluginChargeMachine.Services;
@@ -7,7 +8,7 @@ using Microsoft.EntityFrameworkCore;
namespace MedusaPluginChargeMachine.Handlers.LA9;
public class GetRecentChargeEaChargeHandler(ISessionService sessionService, ChargeMachineDbContext db)
public class GetRecentChargeEaChargeHandler(ISessionService sessionService, ICardService cardService, ChargeMachineDbContext db)
: Handler<GetRecentChargeRequest, GetRecentChargeResponse>
{
public override void Configure()
@@ -42,11 +43,11 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
var items = rows.Select(h => new GetRecentChargeItem
{
RcvTime = new XrpcString(h.OrderDate.ToString("yyyyMMddHHmmss")),
RcvTime = new XrpcString(h.OrderDate.ToLocalTime().ToString("yyyy-MM-dd HH:mm")),
ChrgPrice = new XrpcInt(h.ChargeAmount),
CardNo = new XrpcString(MaskCardId(h.CardId)),
AccCode = new XrpcString(""),
RcvStatus = new XrpcInt(0),
CardNo = new XrpcString(cardService.ConvertUidToKonamiId(h.CardId)),
AccCode = new XrpcString("-"), //TODO maybe later when we add a arcade filter which is per PCBID we can safly show the access code
RcvStatus = new XrpcString("0"),
FontColor = new XrpcString("#FFFFFF")
}).ToList();
@@ -54,11 +55,11 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
{
items.Add(new GetRecentChargeItem
{
RcvTime = new XrpcString(""),
RcvTime = new XrpcString("-"),
ChrgPrice = new XrpcInt(0),
CardNo = new XrpcString(""),
AccCode = new XrpcString(""),
RcvStatus = new XrpcInt(0),
CardNo = new XrpcString("-"),
AccCode = new XrpcString("-"),
RcvStatus = new XrpcString("0"),
FontColor = new XrpcString("#FFFFFF")
});
}
@@ -73,16 +74,10 @@ public class GetRecentChargeEaChargeHandler(ISessionService sessionService, Char
private string? ResolveCardId(GetRecentChargeRequest req)
{
if (req.SessionId is not null)
{
try { return sessionService.GetSession(req.SessionId).refId; }
catch { /* fall through to cardid */ }
}
if (req.SessionId is null) return req.CardId;
try { return sessionService.GetSession(req.SessionId).refId; }
catch { /* fall through to cardid */ }
return req.CardId;
}
private static string MaskCardId(string cardId) =>
cardId.Length <= 4
? new string('*', cardId.Length)
: new string('*', cardId.Length - 4) + cardId[^4..];
}
@@ -7,4 +7,19 @@ public class GetLastLogRequest
{
[XmlElement("sessid")]
public string? SessionId { get; set; }
[XmlElement("ectype")]
public string? EcType { get; set; }
[XmlElement("targetdate")]
public string? TargetDate { get; set; }
[XmlElement("perpage")]
public string? PerPage { get; set; }
[XmlElement("page")]
public string? Page { get; set; }
[XmlElement("version")]
public string? Version { get; set; }
}
@@ -56,7 +56,7 @@ public record GetLastLogResultItem
public XrpcInt ChargeNum { get; set; }
[XmlElement("cardtype")]
public XrpcInt CardType { get; set; }
public XrpcString CardType { get; set; }
[XmlElement("cardno")]
public XrpcString CardNo { get; set; }
@@ -32,7 +32,7 @@ public record GetRecentChargeItem
public XrpcString AccCode { get; set; }
[XmlElement("rcvstatus")]
public XrpcInt RcvStatus { get; set; }
public XrpcString RcvStatus { get; set; }
[XmlElement("fontcolor")]
public XrpcString FontColor { get; set; }