public virtual CaptureResponse Capture(XDocument xmlDocument) { var startDate = SystemContext.Clock.Now; _documentValidator.Validate(xmlDocument); var events = _documentParser.Parse(xmlDocument.Root); var currentUser = _userProvider.GetCurrentUser(); var request = new EpcisRequest { RecordTime = SystemContext.Clock.Now, DocumentTime = DateTime.Parse(xmlDocument.Root.Attribute("creationDate").Value), User = currentUser }; foreach (var @event in events) { request.AddEvent(@event); } _requestPersister.Persist(request); return(new CaptureResponse { EventCount = request.Events.Count, CaptureStartDateUtc = startDate, CaptureEndDateUtc = SystemContext.Clock.Now, EventIds = request.Events.Select(e => e.Id.ToString()).ToArray() }); }
public static RequestDto Create(EpcisRequest request, int userId) { return(new RequestDto { DocumentTime = request.DocumentTime, RecordTime = request.RecordTime, SchemaVersion = request.SchemaVersion, SubscriptionId = request.SubscriptionCallback?.SubscriptionId, UserId = userId }); }
private static void ParseCallbackResult(XElement queryResults, EpcisRequest request) { var subscriptionId = queryResults.Element("subscriptionID")?.Value; var eventList = queryResults.Element("resultsBody").Element("EventList"); request.EventList.AddRange(XmlEventParser.ParseEvents(eventList)); request.SubscriptionCallback = new SubscriptionCallback { CallbackType = QueryCallbackType.Success, SubscriptionId = subscriptionId }; }
public async Task Capture(EpcisRequest request, RequestContext context, CancellationToken cancellationToken) { using var transaction = _connection.BeginTransaction(); var requestId = await StoreHeader(request, context.User, transaction, cancellationToken); await StoreStandardBusinessHeader(request.StandardBusinessHeader, requestId, transaction, cancellationToken); await StoreCallbackInformation(request.SubscriptionCallback, requestId, transaction, cancellationToken); await StoreEpcisEvents(request.EventList, requestId, transaction, cancellationToken); await StoreMasterData(request.MasterdataList, transaction, cancellationToken); transaction.Commit(); }
public static EpcisRequest Parse(XElement root) { var request = new EpcisRequest { DocumentTime = DateTime.Parse(root.Attribute("creationDate").Value), SchemaVersion = root.Attribute("schemaVersion").Value }; ParseHeaderIntoRequest(root.Element("EPCISHeader"), request); ParseBodyIntoRequest(root.Element("EPCISBody"), request); return(request); }
private static void ParseHeaderIntoRequest(XElement epcisHeader, EpcisRequest request) { if (epcisHeader == null || epcisHeader.IsEmpty) { return; } var headerMasterdata = epcisHeader.Element("extension")?.Element("EPCISMasterData")?.Element("VocabularyList"); if (headerMasterdata != null) { request.MasterdataList.AddRange(XmlMasterdataParser.ParseMasterdata(headerMasterdata)); } }
private static void ParseBodyIntoRequest(XElement epcisBody, EpcisRequest request) { var element = epcisBody.Elements().First(); switch (element.Name.LocalName) { case "QueryResults": ParseCallbackResult(element, request); break; case "QueryTooLargeException": ParseCallbackError(element, QueryCallbackType.QueryTooLargeException, request); break; case "ImplementationException": ParseCallbackError(element, QueryCallbackType.ImplementationException, request); break; case "EventList": request.EventList.AddRange(XmlEventParser.ParseEvents(element)); break; case "VocabularyList": request.MasterdataList.AddRange(XmlMasterdataParser.ParseMasterdata(element)); break; } }
public void CanSaveAndLoadEpcisRequest() { Guid id; using (var tx = session.BeginTransaction()) { var request = new EpcisRequest { DocumentTime = new DateTime(2017, 11, 11, 12, 38, 00), RecordTime = new DateTime(2017, 11, 11, 12, 42, 00) }; request.AddEvent(new EpcisEvent { EventType = EventType.ObjectEvent, Action = EventAction.Add, EventTime = new DateTime(2017, 10, 10, 10, 10, 00), EventTimezoneOffset = new TimeZoneOffset { Representation = "+01:00" } }); id = (Guid)session.Save(request); tx.Commit(); } session.Clear(); using (var tx = session.BeginTransaction()) { var request = session.Get <EpcisRequest>(id); Assert.AreEqual(request.DocumentTime, new DateTime(2017, 11, 11, 12, 38, 00)); Assert.AreEqual(request.RecordTime, new DateTime(2017, 11, 11, 12, 42, 00)); Assert.AreEqual(request.Events.Count, 1); tx.Commit(); } }
public virtual IEnumerable <string> Capture(XDocument xmlDocument) { _documentValidator.Validate(xmlDocument); var events = _documentParser.Parse(xmlDocument.Root); var currentUser = _userProvider.GetCurrentUser(); var request = new EpcisRequest { RecordTime = SystemContext.Clock.Now, DocumentTime = DateTime.Parse(xmlDocument.Root.Attribute("creationDate").Value), SubscriptionId = TryExtractSubscriptionId(xmlDocument), User = currentUser }; foreach (var @event in events) { request.AddEvent(@event); } _requestPersister.Persist(request); return(request.Events.Select(e => e.Id.ToString())); }
public virtual void Persist(EpcisRequest request) { _requestRepository.Insert(request); }
public void Insert(EpcisRequest request) { _session.Save(request); }
private static void ParseCallbackError(XElement element, QueryCallbackType errorType, EpcisRequest request) { request.SubscriptionCallback = new SubscriptionCallback { CallbackType = errorType, Reason = element.Element("reason")?.Value, SubscriptionId = element.Element("subscriptionID")?.Value }; }
private static async Task <int> StoreHeader(EpcisRequest request, User user, IDbTransaction transaction, CancellationToken cancellationToken) { var requestDto = RequestDto.Create(request, user.Id); return(await transaction.InsertAsync(requestDto, cancellationToken)); }