Update to use new handler methods

This commit is contained in:
Kayori
2025-09-25 23:54:19 +02:00
parent 6126676fa1
commit b19b44728c
19 changed files with 395 additions and 160 deletions
@@ -1,27 +1,27 @@
using System.Xml.Linq;
using Abstractions.Entities;
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using Abstractions.Services;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using Microsoft.AspNetCore.Identity;
using ISessionService = MedusaPluginChargeMachine.Services.ISessionService;
namespace MedusaPluginChargeMachine.Handlers.LA9
{
public class ChargeEaChargeHandler(ICardService cardService, ISessionService sessionService, UserManager<User> userManager, XDocument body): Handler
public class ChargeEaChargeHandler(ICardService cardService, ISessionService sessionService, UserManager<User> userManager): Handler<ChargeRequest, ChargeResponse>
{
public override void Configure()
{
Module("eacharge");
Method("charge");
}
public override async Task<XDocument> HandleAsync(string model)
public override async Task<ChargeResponse> HandleAsync(ChargeRequest req, string model)
{
var rootCall = body.Root;
var charge = rootCall?.Element("eacharge")!;
var amount = int.Parse(charge.Element("chargenum")?.Value!) * 1000;
var session = charge.Element("sessid")?.Value!;
var amount = int.Parse(req.ChargeNumber) * 1000;
var foundSession = sessionService.GetSession(session);
var foundSession = sessionService.GetSession(req.SessionId);
var card = await cardService.FindByCardId(foundSession.refId)!;
@@ -29,14 +29,16 @@ namespace MedusaPluginChargeMachine.Handlers.LA9
await userManager.UpdateAsync(card.User);
var balance = new XElement("balance", card.User.PaseliAmount, new XAttribute("__type", "s32"));
var chargeDailyLimit = new XElement("chargedailylimit", 100000, new XAttribute("__type", "s32"));
var chargeDaily = new XElement("chargedaily", 0, new XAttribute("__type", "s32"));
var chargepoint = new XElement("chargepoint", amount, new XAttribute("__type", "s32"));
var eaCharge = new XElement("charge", balance, chargeDailyLimit, chargeDaily, chargepoint, new XAttribute("status", "0"));
var document = new XDocument(new XElement("response", eaCharge));
return document;
var chargeResponse = new ChargeResponse()
{
Status = 0,
Balance = new XrpcInt(card.User.PaseliAmount),
ChargeDailyLimit = new XrpcInt(100000),
ChargeDaily = new XrpcInt(0),
ChargePoint = new XrpcInt(amount)
};
return chargeResponse;
}
}
}
@@ -1,41 +1,39 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using Abstractions.Services;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using MedusaPluginChargeMachine.Services;
namespace MedusaPluginChargeMachine.Handlers.LA9
{
public class CheckinEaChargeHandler(ISessionService sessionService, ICardService cardService, XDocument body): Handler
public class CheckinEaChargeHandler(ISessionService sessionService, ICardService cardService): Handler<CheckinRequest, CheckinResponse>
{
private readonly XDocument _body = body;
private readonly ISessionService _sessionService = sessionService;
private readonly ICardService _cardService = cardService;
public override void Configure()
{
Module("eacharge");
Method("checkin");
}
public override async Task<XDocument> HandleAsync(string model)
public override async Task<CheckinResponse> HandleAsync(CheckinRequest req, string model)
{
var rootCall = _body.Root;
var eaCharge = rootCall?.Element("eacharge")!;
var cardId = eaCharge.Element("cardid")?.Value!;
var sessionId = sessionService.AddSession(req.CardId);
var sessionId = _sessionService.AddSession(cardId);
var card = await _cardService.FindByCardId(cardId);
var card = await cardService.FindByCardId(req.CardId);
var userPaseli = card!.User.PaseliAmount;
var sessseq = new XElement("sessseq", 0, new XAttribute("__type", "s32"));
var acname = new XElement("acname", "DUMMY_NAME", new XAttribute("__type", "str"));
var balance = new XElement("balance", userPaseli, new XAttribute("__type", "s32"));
var buyablep = new XElement("buyablep", 100000, new XAttribute("__type", "s32"));
var sessionIdXElement = new XElement("sessid", sessionId, new XAttribute("__type", "str"));
var eacharge = new XElement("eacharge", sessseq, acname, balance, buyablep, sessionIdXElement, new XAttribute("status", "0"));
var document = new XDocument(new XElement("response", eacharge));
return document;
var checkinResponse = new CheckinResponse()
{
Status = 0,
Sessseq = new XrpcInt(0),
AccountName = new XrpcString("DUMMY_NAME"),
Balance = new XrpcInt(userPaseli),
BuyablePaseli = new XrpcInt(100000),
SessionId = new XrpcString(sessionId)
};
return checkinResponse;
}
}
}
@@ -1,29 +1,28 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using Abstractions.Services;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using ISessionService = MedusaPluginChargeMachine.Services.ISessionService;
namespace MedusaPluginChargeMachine.Handlers.LA9
{
public class CheckoutEaCharge(ISessionService sessionService, XDocument body): Handler
public class CheckoutEaCharge(ISessionService sessionService): Handler<CheckoutRequest, CheckoutResponse>
{
private readonly ISessionService _sessionService = sessionService;
private readonly XDocument _body = body;
public override void Configure()
{
Module("eacharge");
Method("checkout");
}
public override XDocument Handle(string model)
public override CheckoutResponse Handle(CheckoutRequest req, string model)
{
var eaCharge = _body.Root?.Element("eacharge")!;
var sessionId = eaCharge.Element("sessid")!.Value!;
sessionService.RemoveSession(req.SessionId);
_sessionService.RemoveSession(sessionId);
var checkoutCharge = new XElement("eacharge", new XAttribute("status", "0"));
var document = new XDocument(new XElement("response", checkoutCharge));
return document;
var checkoutResponse = new CheckoutResponse()
{
Status = 0
};
return checkoutResponse;
}
}
}
@@ -1,95 +1,108 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using MedusaPluginChargeMachine.Models.Response;
namespace MedusaPluginChargeMachine.Handlers.LA9
{
public class GetConfigEaChargeHandler(XDocument body): Handler
public class GetConfigEaChargeHandler: HandlerWithoutRequest<EaChargeConfigResponse>
{
private readonly XDocument _body = body;
public override void Configure()
{
Module("eacharge");
Method("getconf");
}
public override XDocument Handle(string model)
public override EaChargeConfigResponse Handle(string model)
{
var articlerevision = new XElement("articlerevision", 1, new XAttribute("__type", "str"));
var eaChargeConfig = new EaChargeConfigResponse()
{
Status = 0,
Expire = 1200,
ChargeArticle = new EaChargeConfigChargeArticle()
{
ArticleRevision = new XrpcString("1"),
ArticleList = [
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("DOCMT_0000"),
ArticleDoc = new XrpcString("")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("DOCMT_0001"),
ArticleDoc = new XrpcString("")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("DOCMT_0002"),
ArticleDoc = new XrpcString("")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("DOCMT_0003"),
ArticleDoc = new XrpcString("")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0001_A"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0001_B"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0002_A"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0002_B"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0003_A"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0003_B"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0004_A"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("URL_0041_B"),
ArticleDoc = new XrpcString("http://eagate.573.jp")
},
new EaChargeConfigChargeArticleItem()
{
ArticleType = new XrpcString("PASELIUNIT"),
ArticleDoc = new XrpcString("P")
},
]
},
ChargeDetail = new EaChargeConfigChargeDetail()
{
ChargeDaily = new XrpcInt(0),
ChargeDailyLimit = new XrpcInt(100000)
},
ChargeStatus = new EaChargeConfigChargeStatus()
{
CurrentCode = new XrpcInt(0),
LastChargeStatus = new XrpcInt(1)
}
};
var articletype1 = new XElement("articletype", "DOCMT_0000", new XAttribute("__type", "str"));
var articledoc1 = new XElement("articledoc", new XAttribute("__type", "str"));
var item1 = new XElement("item", articletype1, articledoc1);
var articletype2 = new XElement("articletype", "DOCMT_0001", new XAttribute("__type", "str"));
var articledoc2 = new XElement("articledoc", new XAttribute("__type", "str"));
var item2 = new XElement("item", articletype2, articledoc2);
var articletype3 = new XElement("articletype", "DOCMT_0002", new XAttribute("__type", "str"));
var articledoc3 = new XElement("articledoc", new XAttribute("__type", "str"));
var item3 = new XElement("item", articletype3, articledoc3);
var articletype4 = new XElement("articletype", "DOCMT_0003", new XAttribute("__type", "str"));
var articledoc4 = new XElement("articledoc", new XAttribute("__type", "str"));
var item4 = new XElement("item", articletype4, articledoc4);
var articletype5 = new XElement("articletype", "URL_0001_A", new XAttribute("__type", "str"));
var articledoc5 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item5 = new XElement("item", articletype5, articledoc5);
var articletype6 = new XElement("articletype", "URL_0001_B", new XAttribute("__type", "str"));
var articledoc6 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item6 = new XElement("item", articletype6, articledoc6);
var articletype7 = new XElement("articletype", "URL_0002_A", new XAttribute("__type", "str"));
var articledoc7 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item7 = new XElement("item", articletype7, articledoc7);
var articletype8 = new XElement("articletype", "URL_0002_B", new XAttribute("__type", "str"));
var articledoc8 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item8 = new XElement("item", articletype8, articledoc8);
var articletype9 = new XElement("articletype", "URL_0003_A", new XAttribute("__type", "str"));
var articledoc9 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item9 = new XElement("item", articletype9, articledoc9);
var articletype10 = new XElement("articletype", "URL_0003_B", new XAttribute("__type", "str"));
var articledoc10 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item10 = new XElement("item", articletype10, articledoc10);
var articletype11 = new XElement("articletype", "URL_0004_A", new XAttribute("__type", "str"));
var articledoc11 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item11 = new XElement("item", articletype11, articledoc11);
var articletype12 = new XElement("articletype", "URL_0004_B", new XAttribute("__type", "str"));
var articledoc12 = new XElement("articledoc", "http://eagate.573.jp", new XAttribute("__type", "str"));
var item12 = new XElement("item", articletype12, articledoc12);
var articletype13 = new XElement("articletype", "PASELIUNIT", new XAttribute("__type", "str"));
var articledoc13 = new XElement("articledoc", "P", new XAttribute("__type", "str"));
var item13 = new XElement("item", articletype13, articledoc13);
var articlelist = new XElement("articlelist", item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13);
var chargearticle = new XElement("chargearticle", articlerevision, articlelist);
var chargedaily = new XElement("chargedaily", 0, new XAttribute("__type", "s32"));
var chargedailylimit = new XElement("chargedailylimit", 100000, new XAttribute("__type", "s32"));
var chargedetail = new XElement("chargedetail", chargedaily, chargedailylimit);
var currentcode = new XElement("currentcode", 0, new XAttribute("__type", "s32"));
var lastchargestatus = new XElement("lastchargestatus", 1, new XAttribute("__type", "s32"));
var chargestatus = new XElement("chargestatus", currentcode, lastchargestatus);
var eacharge = new XElement("eacharge",
new XAttribute("status", "0"), new XAttribute("expire", "1200"), chargearticle, chargedetail, chargestatus);
var document = new XDocument(
new XElement("response",
eacharge
)
);
return document;
return eaChargeConfig;
}
}
}
@@ -1,9 +1,11 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using MedusaPluginChargeMachine.Models.Response;
namespace MedusaPluginChargeMachine.Handlers.LA9;
public class GetLastLogEaChargeHandler(): Handler
public class GetLastLogEaChargeHandler : HandlerWithoutRequest<GetLastLogEaChargeResponse>
{
public override void Configure()
{
@@ -11,19 +13,17 @@ public class GetLastLogEaChargeHandler(): Handler
Method("getlastlog");
}
public override XDocument Handle(string model)
public override GetLastLogEaChargeResponse Handle(string model)
{
var chargedaily = new XElement("chargedaily", 0, new XAttribute("__type", "s32"));
var header = new XElement("header", chargedaily);
var getLastLog = new GetLastLogEaChargeResponse()
{
Status = 0,
Header = new GetLastLogEaChargeHeader()
{
Chargedaily = new XrpcInt(0)
}
};
var getLastLog = new XElement("getlastlog", new XAttribute("status", "0"), header);
var document = new XDocument(
new XElement("response",
getLastLog
)
);
return document;
return getLastLog;
}
}
@@ -1,10 +1,13 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using Abstractions.SerializationTypes;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using MedusaPluginChargeMachine.Services;
namespace MedusaPluginChargeMachine.Handlers.LA9;
public class OpCheckinEaChargeHandler(ISessionService sessionService, XDocument body): Handler
public class OpCheckinEaChargeHandler(ISessionService sessionService): Handler<OpCheckinRequest, OpCheckinResponse>
{
public override void Configure()
{
@@ -12,21 +15,16 @@ public class OpCheckinEaChargeHandler(ISessionService sessionService, XDocument
Method("opcheckin");
}
public override XDocument Handle(string model)
public override OpCheckinResponse Handle(OpCheckinRequest req, string model)
{
var rootCall = body.Root;
var srcId = rootCall?.Attribute("srcid")?.Value!;
var sessionId = sessionService.AddSession(srcId);
var sessionId = sessionService.AddSession(req.SourceId);
var sessionIdXElement = new XElement("sessid", sessionId, new XAttribute("__type", "str"));
var opCheckin = new XElement("opcheckin", sessionIdXElement, new XAttribute("status", "0"), new XAttribute("expire", "1200"));
var response = new OpCheckinResponse()
{
Status = 0,
SessionId = new XrpcString(sessionId)
};
var document = new XDocument(
new XElement("response",
opCheckin
)
);
return document;
return response;
}
}
@@ -1,10 +1,12 @@
using System.Xml.Linq;
using Abstractions.Handlers;
using MedusaPluginChargeMachine.Models.Request;
using MedusaPluginChargeMachine.Models.Response;
using MedusaPluginChargeMachine.Services;
namespace MedusaPluginChargeMachine.Handlers.LA9;
public class OpCheckoutEaChargeHandler(ISessionService sessionService, XDocument body): Handler
public class OpCheckoutEaChargeHandler(ISessionService sessionService): Handler<OpCheckoutRequest, OpCheckoutResponse>
{
public override void Configure()
{
@@ -12,15 +14,15 @@ public class OpCheckoutEaChargeHandler(ISessionService sessionService, XDocument
Method("opcheckout");
}
public override XDocument Handle(string model)
public override OpCheckoutResponse Handle(OpCheckoutRequest req, string model)
{
var eaCharge = body.Root?.Element("eacharge")!;
var sessionId = eaCharge.Element("sessid")!.Value!;
sessionService.RemoveSession(req.SessionId);
sessionService.RemoveSession(sessionId);
var checkoutCharge = new XElement("eacharge", new XAttribute("status", "0"));
var document = new XDocument(new XElement("response", checkoutCharge));
return document;
var opCheckoutResponse = new OpCheckoutResponse()
{
Status = 0
};
return opCheckoutResponse;
}
}
@@ -0,0 +1,13 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Request;
[XmlRoot("eacharge")]
public class ChargeRequest
{
[XmlElement("chargenum")]
public required string ChargeNumber { get; set; }
[XmlElement("sessid")]
public required string SessionId { get; set; }
}
@@ -0,0 +1,10 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Request;
[XmlRoot("eacharge")]
public class CheckinRequest
{
[XmlElement("cardid")]
public required string CardId { get; set; }
}
@@ -0,0 +1,10 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Request;
[XmlRoot("eacharge")]
public class CheckoutRequest
{
[XmlElement("sessid")]
public required string SessionId { get; set; }
}
@@ -0,0 +1,10 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Request;
[XmlRoot("eacharge")]
public class OpCheckinRequest
{
[XmlElement("srcid")]
public required string SourceId { get; set; }
}
@@ -0,0 +1,10 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Request;
[XmlRoot("eacharge")]
public class OpCheckoutRequest
{
[XmlElement("sessid")]
public required string SessionId { get; set; }
}
@@ -0,0 +1,24 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class ChargeResponse
{
[XmlAttribute("status")]
public required int Status { get; set; }
[XmlElement("balance")]
public XrpcInt Balance { get; set; }
[XmlElement("chargedailylimit")]
public XrpcInt ChargeDailyLimit { get; set; }
[XmlElement("chargedaily")]
public XrpcInt ChargeDaily { get; set; }
[XmlElement("chargepoint")]
public XrpcInt ChargePoint { get; set; }
}
@@ -0,0 +1,27 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class CheckinResponse
{
[XmlAttribute("status")]
public int Status { get; set; }
[XmlElement("sessseq")]
public XrpcInt Sessseq { get; set; }
[XmlElement("acname")]
public XrpcString AccountName { get; set; }
[XmlElement("balance")]
public XrpcInt Balance { get; set; }
[XmlElement("buyablep")]
public XrpcInt BuyablePaseli { get; set; }
[XmlElement("sessid")]
public XrpcString SessionId { get; set; }
}
@@ -0,0 +1,11 @@
using System.Xml.Serialization;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class CheckoutResponse
{
[XmlAttribute("status")]
public required int Status { get; set; }
}
@@ -0,0 +1,60 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class EaChargeConfigResponse
{
[XmlAttribute("status")]
public required int Status { get; set; }
[XmlAttribute("expire")]
public required int Expire { get; set; }
[XmlElement("chargearticle")]
public required EaChargeConfigChargeArticle ChargeArticle { get; set; }
[XmlElement("chargedetail")]
public required EaChargeConfigChargeDetail ChargeDetail { get; set; }
[XmlElement("chargestatus")]
public required EaChargeConfigChargeStatus ChargeStatus { get; set; }
}
public record EaChargeConfigChargeArticle
{
[XmlElement("articlerevision")]
public required XrpcString ArticleRevision { get; set; }
[XmlElement("articlelist")]
public required List<EaChargeConfigChargeArticleItem> ArticleList { get; set; }
}
public record EaChargeConfigChargeArticleItem
{
[XmlElement("articletype")]
public required XrpcString ArticleType { get; set; }
[XmlElement("articledoc")]
public required XrpcString ArticleDoc { get; set; }
}
public record EaChargeConfigChargeDetail
{
[XmlElement("chargedaily")]
public required XrpcInt ChargeDaily { get; set; }
[XmlElement("chargedailylimit")]
public required XrpcInt ChargeDailyLimit { get; set; }
}
public record EaChargeConfigChargeStatus
{
[XmlElement("currentcode")]
public required XrpcInt CurrentCode { get; set; }
[XmlElement("lastchargestatus")]
public required XrpcInt LastChargeStatus { get; set; }
}
@@ -0,0 +1,21 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("getlastlog")]
[Serializable]
public class GetLastLogEaChargeResponse
{
[XmlAttribute("status")]
public int Status { get; set; }
[XmlElement("header")]
public required GetLastLogEaChargeHeader Header { get; set; }
}
public record GetLastLogEaChargeHeader
{
[XmlElement("chargedaily")]
public XrpcInt Chargedaily { get; set; }
}
@@ -0,0 +1,15 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class OpCheckinResponse
{
[XmlAttribute("status")]
public required int Status { get; set; }
[XmlElement("sessid")]
public required XrpcString SessionId { get; set; }
}
@@ -0,0 +1,12 @@
using System.Xml.Serialization;
using Abstractions.SerializationTypes;
namespace MedusaPluginChargeMachine.Models.Response;
[XmlRoot("eacharge")]
[Serializable]
public class OpCheckoutResponse
{
[XmlAttribute("status")]
public required int Status { get; set; }
}