diff --git a/src/BuildingBlocks/EventBus/EventBus/Events/IntegrationEvent.cs b/src/BuildingBlocks/EventBus/EventBus/Events/IntegrationEvent.cs index 6121e3939..6199c5cb3 100644 --- a/src/BuildingBlocks/EventBus/EventBus/Events/IntegrationEvent.cs +++ b/src/BuildingBlocks/EventBus/EventBus/Events/IntegrationEvent.cs @@ -10,6 +10,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events Id = Guid.NewGuid(); CreationDate = DateTime.UtcNow; CheckForCustomisation = true; + TenantId = 1; } public IntegrationEvent(Boolean checkForCustomisation) @@ -17,6 +18,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events Id = Guid.NewGuid(); CreationDate = DateTime.UtcNow; CheckForCustomisation = checkForCustomisation; + TenantId = 1; } [JsonConstructor] @@ -24,6 +26,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events { Id = id; CreationDate = createDate; + TenantId = 1; } [JsonProperty] @@ -35,7 +38,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events [JsonProperty] public Boolean CheckForCustomisation { get; set; } - /*[JsonProperty] - public String TenantId { get; set; }*/ + //TODO fix this somehow + [JsonProperty] + public int TenantId { get; set; } } } diff --git a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs index 50500da8e..e4f8663a5 100644 --- a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs +++ b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs @@ -16,6 +16,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Net.Http; +using System.Net.Mime; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; @@ -273,37 +274,44 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ return channel; } - private async void SendEventToTenant(Object @event) + private async void SendEventToTenant(String content, String id, String eventName) { - string myJson = JsonConvert.SerializeObject(@event); + var temp = new SavedEvent(); + temp.Content = content; + temp.SavedEventId = id; + temp.EventName = eventName; + string myJson = JsonConvert.SerializeObject(temp); using (var client = new HttpClient()) { try { //TODO replace URL with response from tenantmanager var response = await client.PostAsync( - tenantACustomisationUrl + "api/OrderStatusChangedToSubmittedIntegrationEvents", + tenantACustomisationUrl + "api/SavedEvents", new StringContent(myJson, Encoding.UTF8, "application/json")); response.EnsureSuccessStatusCode(); - _logger.LogInformation("----- Event sent to tenant{@event} -----", @event); + _logger.LogInformation("----- Event sent to tenant{@id} -----", id); } catch (Exception e) { - _logger.LogInformation("----- Exception{@e} -- Event{@event} -----", e, @event); + _logger.LogInformation("----- Exception{@e} -- Event{@id} -----", e, @id); } } } - private async Task IsEventCustomised(String eventName, String tenantId) + private async Task IsEventCustomised(String eventName, int tenantId) { + CustomisationInfo customisationInfo = new CustomisationInfo(); + customisationInfo.EventName = eventName; + customisationInfo.TenantId = tenantId; Boolean isCustomised = false; - var builder = new UriBuilder(tenantManagerUrl + "api/Customisations"); + var builder = new UriBuilder(tenantManagerUrl + "api/Customisations/IsCustomised"); builder.Port = -1; var query = HttpUtility.ParseQueryString(builder.Query); query["eventName"] = eventName; - query["tenantId"] = tenantId; + query["tenantId"] = tenantId.ToString(); builder.Query = query.ToString(); string url = builder.ToString(); @@ -355,19 +363,12 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ if (handler == null) continue; var eventType = _subsManager.GetEventTypeByName(eventName); var integrationEvent = JsonConvert.DeserializeObject(message, eventType); - //IsEventCustomised(eventName, integrationEvent.TenantId); - if (eventName.Equals("OrderStatusChangedToSubmittedIntegrationEvent") && - integrationEvent is IntegrationEvent) //TODO replace with tenantmanager + if (integrationEvent is IntegrationEvent evt && IsEventCustomised(eventName, evt.TenantId).Result) //TODO replace with tenantmanager { - //Casting - IntegrationEvent evt = (IntegrationEvent) integrationEvent; //Checking if event should be sent to tenant, or handled normally - //Can instead create an endpoint in the tenant manager that also handles all the events that a tenant wants to postpone - //Additionally, an endpoint in the tenant manager is required, where the tenant - //Issue with the tenant knowing the id of the event if (evt.CheckForCustomisation) { - SendEventToTenant(integrationEvent); + SendEventToTenant(message, evt.Id.ToString(), eventName); break; } } @@ -387,4 +388,17 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ } } } +} + +class SavedEvent +{ + public string SavedEventId { get; set; } + public string Content { get; set; } + public String EventName { get; set; } +} + +class CustomisationInfo +{ + public string EventName { get; set; } + public int TenantId { get; set; } } \ No newline at end of file diff --git a/src/Services/TenantCustomisations/TenantACustomisations/Controllers/OrderStatusChangedToSubmittedIntegrationEventsController.cs b/src/Services/TenantCustomisations/TenantACustomisations/Controllers/OrderStatusChangedToSubmittedIntegrationEventsController.cs deleted file mode 100644 index f42916f62..000000000 --- a/src/Services/TenantCustomisations/TenantACustomisations/Controllers/OrderStatusChangedToSubmittedIntegrationEventsController.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; -using Microsoft.Extensions.Logging; -using TenantACustomisations.Database; -using TenantACustomisations.IntegrationEvents.Events; - -namespace TenantACustomisations.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class OrderStatusChangedToSubmittedIntegrationEventsController : ControllerBase - { - private readonly TenantAContext _context; - private readonly IEventBus _eventBus; - private readonly ILogger _logger; - - - public OrderStatusChangedToSubmittedIntegrationEventsController(TenantAContext context, IEventBus eventBus, ILogger logger) - { - _context = context; - _eventBus = eventBus; - _logger = logger; - } - - // GET: api/OrderStatusChangedToSubmittedIntegrationEvents - [HttpGet] - public async Task>> GetOrderStatusChangedToSubmittedIntegrationEvent(String orderId) - { - if (String.IsNullOrEmpty(orderId)) - { - return await _context.OrderStatusChangedToSubmittedIntegrationEvent.ToListAsync(); - } - else - { - var orderStatusChangedToSubmittedIntegrationEvent = _context.OrderStatusChangedToSubmittedIntegrationEvent.Where(x => x.OrderId == Int32.Parse(orderId)).ToListAsync(); - - return await orderStatusChangedToSubmittedIntegrationEvent; - } - } - - // GET: api/OrderStatusChangedToSubmittedIntegrationEvents/5 - [HttpGet("{id}")] - public async Task> GetOrderStatusChangedToSubmittedIntegrationEvent(Guid id) - { - var orderStatusChangedToSubmittedIntegrationEvent = await _context.OrderStatusChangedToSubmittedIntegrationEvent.FindAsync(id); - - if (orderStatusChangedToSubmittedIntegrationEvent == null) - { - return NotFound(); - } - - return orderStatusChangedToSubmittedIntegrationEvent; - } - - // PUT: api/OrderStatusChangedToSubmittedIntegrationEvents/5 - [HttpPut("{id}")] - public async Task PutOrderStatusChangedToSubmittedIntegrationEvent(Guid id, OrderStatusChangedToSubmittedIntegrationEvent orderStatusChangedToSubmittedIntegrationEvent) - { - if (id != orderStatusChangedToSubmittedIntegrationEvent.Id) - { - return BadRequest(); - } - - _context.Entry(orderStatusChangedToSubmittedIntegrationEvent).State = EntityState.Modified; - - try - { - await _context.SaveChangesAsync(); - } - catch (DbUpdateConcurrencyException) - { - if (!OrderStatusChangedToSubmittedIntegrationEventExists(id)) - { - return NotFound(); - } - else - { - throw; - } - } - - return NoContent(); - } - - // POST: api/OrderStatusChangedToSubmittedIntegrationEvents - [HttpPost] - public async Task> PostOrderStatusChangedToSubmittedIntegrationEvent(OrderStatusChangedToSubmittedIntegrationEvent orderStatusChangedToSubmittedIntegrationEvent) - { - _context.OrderStatusChangedToSubmittedIntegrationEvent.Add(orderStatusChangedToSubmittedIntegrationEvent); - await _context.SaveChangesAsync(); - - return CreatedAtAction("GetOrderStatusChangedToSubmittedIntegrationEvent", new { id = orderStatusChangedToSubmittedIntegrationEvent.Id }, orderStatusChangedToSubmittedIntegrationEvent); - } - - // DELETE: api/OrderStatusChangedToSubmittedIntegrationEvents/5 - [HttpDelete("{id}")] - public async Task> DeleteOrderStatusChangedToSubmittedIntegrationEvent(Guid id) - { - var orderStatusChangedToSubmittedIntegrationEvent = await _context.OrderStatusChangedToSubmittedIntegrationEvent.FindAsync(id); - if (orderStatusChangedToSubmittedIntegrationEvent == null) - { - return NotFound(); - } - - try - { - _logger.LogInformation("----- Publishing integration event: {IntegrationEventId} from OrderStatusChangedToSubmittedIntegrationEventsController - ({@IntegrationEvent})", orderStatusChangedToSubmittedIntegrationEvent.Id, orderStatusChangedToSubmittedIntegrationEvent); - orderStatusChangedToSubmittedIntegrationEvent.CheckForCustomisation = false; - _eventBus.Publish(orderStatusChangedToSubmittedIntegrationEvent); - _context.OrderStatusChangedToSubmittedIntegrationEvent.Remove(orderStatusChangedToSubmittedIntegrationEvent); - await _context.SaveChangesAsync(); - return orderStatusChangedToSubmittedIntegrationEvent; - } - catch (Exception ex) - { - _logger.LogError(ex, "ERROR Publishing integration event: {IntegrationEventId} from OrderStatusChangedToSubmittedIntegrationEventsController", orderStatusChangedToSubmittedIntegrationEvent.Id); - - throw; - } - } - - private bool OrderStatusChangedToSubmittedIntegrationEventExists(Guid id) - { - return _context.OrderStatusChangedToSubmittedIntegrationEvent.Any(e => e.Id == id); - } - } -} diff --git a/src/Services/TenantCustomisations/TenantACustomisations/Controllers/SavedEventsController.cs b/src/Services/TenantCustomisations/TenantACustomisations/Controllers/SavedEventsController.cs new file mode 100644 index 000000000..a90a8df7c --- /dev/null +++ b/src/Services/TenantCustomisations/TenantACustomisations/Controllers/SavedEventsController.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; +using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using TenantACustomisations.Database; +using TenantACustomisations.IntegrationEvents.Events; + +namespace TenantACustomisations.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class SavedEventsController : ControllerBase + { + private readonly TenantAContext _context; + private readonly ILogger _logger; + private readonly IEventBus _eventBus; + + private List types = new List() + { + typeof(OrderStatusChangedToSubmittedIntegrationEvent), + typeof(OrderStatusChangedToAwaitingValidationIntegrationEvent) + }; + + public SavedEventsController(TenantAContext context, ILogger logger, IEventBus eventBus) + { + _context = context; + _logger = logger; + _eventBus = eventBus; + } + + // GET: api/SavedEvents + [HttpGet] + public async Task>> GetSavedEvent(String orderId) + { + if (String.IsNullOrEmpty(orderId)) + { + return await _context.SavedEvent.ToListAsync(); + } + + //Getting saved events + var savedEvents = await _context.SavedEvent.ToListAsync(); + + //Returning if list is empty + if (savedEvents.Count == 0) + { + return NotFound(); + } + List events = new List(); + + //Converting events to actual type + savedEvents.ForEach(e => + { + var integrationEvent =JsonConvert.DeserializeObject(e.Content, GetEventTypeByName(e.EventName)); + IntegrationEvent evt = (IntegrationEvent)integrationEvent; + events.Add(evt); + }); + + bool found = false; + //Casting to class to check the orderId + events.ForEach(e => + { + if(e is OrderStatusChangedToAwaitingValidationIntegrationEvent) + { + OrderStatusChangedToAwaitingValidationIntegrationEvent evt = (OrderStatusChangedToAwaitingValidationIntegrationEvent)e; + if (evt.OrderId == Int32.Parse(orderId)) + { + found = true; + } + } + else if(e is OrderStatusChangedToSubmittedIntegrationEvent) + { + OrderStatusChangedToSubmittedIntegrationEvent evt = (OrderStatusChangedToSubmittedIntegrationEvent)e; + if (evt.OrderId == Int32.Parse(orderId)) + { + found = true; + + } + } + }); + + if (!found) + { + return NotFound(); + } + + return savedEvents; + } + + // PUT: api/SavedEvents/5 + [HttpPut("{id}")] + public async Task PutSavedEvent(string id, SavedEvent savedEvent) + { + if (id != savedEvent.SavedEventId) + { + return BadRequest(); + } + + _context.Entry(savedEvent).State = EntityState.Modified; + + try + { + await _context.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!SavedEventExists(id)) + { + return NotFound(); + } + else + { + throw; + } + } + + return NoContent(); + } + + // POST: api/SavedEvents + [HttpPost] + public async Task> PostSavedEvent(SavedEvent savedEvent) + { + _context.SavedEvent.Add(savedEvent); + await _context.SaveChangesAsync(); + + return CreatedAtAction("GetSavedEvent", new {id = savedEvent.SavedEventId}, savedEvent); + } + + // DELETE: api/SavedEvents/5 + [HttpDelete("{id}")] + public async Task> DeleteSavedEvent(string id) + { + var savedEvent = await _context.SavedEvent.FindAsync(id); + if (savedEvent == null) + { + return NotFound(); + } + + var integrationEvent = + JsonConvert.DeserializeObject(savedEvent.Content, GetEventTypeByName(savedEvent.EventName)); + IntegrationEvent evt = (IntegrationEvent) integrationEvent; + try + { + _logger.LogInformation( + "----- Publishing integration event: {IntegrationEventId} from OrderStatusChangedToSubmittedIntegrationEventsController - ({@IntegrationEvent})", + evt.Id, evt); + evt.CheckForCustomisation = false; + _eventBus.Publish(evt); + _context.SavedEvent.Remove(savedEvent); + await _context.SaveChangesAsync(); + return savedEvent; + } + catch (Exception ex) + { + _logger.LogError(ex, + "ERROR Publishing integration event: {IntegrationEventId} from OrderStatusChangedToSubmittedIntegrationEventsController", + evt.Id); + + throw; + } + + + _context.SavedEvent.Remove(savedEvent); + await _context.SaveChangesAsync(); + + return savedEvent; + } + + private bool SavedEventExists(string id) + { + return _context.SavedEvent.Any(e => e.SavedEventId == id); + } + + private Type GetEventTypeByName(string eventName) => types.SingleOrDefault(t => t.Name == eventName); + } +} \ No newline at end of file diff --git a/src/Services/TenantCustomisations/TenantACustomisations/Database/SavedEvent.cs b/src/Services/TenantCustomisations/TenantACustomisations/Database/SavedEvent.cs new file mode 100644 index 000000000..7b4e5b98d --- /dev/null +++ b/src/Services/TenantCustomisations/TenantACustomisations/Database/SavedEvent.cs @@ -0,0 +1,11 @@ +using System; + +namespace TenantACustomisations.Database +{ + public class SavedEvent + { + public string SavedEventId { get; set; } + public string Content { get; set; } + public String EventName { get; set; } + } +} \ No newline at end of file diff --git a/src/Services/TenantCustomisations/TenantACustomisations/Database/TenantAContext.cs b/src/Services/TenantCustomisations/TenantACustomisations/Database/TenantAContext.cs index d435fbf14..222d63dd8 100644 --- a/src/Services/TenantCustomisations/TenantACustomisations/Database/TenantAContext.cs +++ b/src/Services/TenantCustomisations/TenantACustomisations/Database/TenantAContext.cs @@ -18,7 +18,7 @@ namespace TenantACustomisations.Database public DbSet ShippingInformation { get; set; } - public DbSet OrderStatusChangedToSubmittedIntegrationEvent + public DbSet SavedEvent { get; set; diff --git a/src/Services/TenantCustomisations/TenantACustomisations/IntegrationEvents/Events/OrderStatusChangedToAwaitingValidationIntegrationEvent.cs b/src/Services/TenantCustomisations/TenantACustomisations/IntegrationEvents/Events/OrderStatusChangedToAwaitingValidationIntegrationEvent.cs new file mode 100644 index 000000000..14534b549 --- /dev/null +++ b/src/Services/TenantCustomisations/TenantACustomisations/IntegrationEvents/Events/OrderStatusChangedToAwaitingValidationIntegrationEvent.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; + +namespace TenantACustomisations.IntegrationEvents.Events +{ + public class OrderStatusChangedToAwaitingValidationIntegrationEvent : IntegrationEvent + { + public int OrderId { get; } + public IEnumerable OrderStockItems { get; } + + public OrderStatusChangedToAwaitingValidationIntegrationEvent(int orderId, + IEnumerable orderStockItems) + { + OrderId = orderId; + OrderStockItems = orderStockItems; + } + } + + public class OrderStockItem + { + public int ProductId { get; } + public int Units { get; } + + public OrderStockItem(int productId, int units) + { + ProductId = productId; + Units = units; + } + } +} \ No newline at end of file diff --git a/src/Services/TenantManager/TenantManager/Controllers/CustomisationsController.cs b/src/Services/TenantManager/TenantManager/Controllers/CustomisationsController.cs index 12f9367bb..23e230b70 100644 --- a/src/Services/TenantManager/TenantManager/Controllers/CustomisationsController.cs +++ b/src/Services/TenantManager/TenantManager/Controllers/CustomisationsController.cs @@ -41,6 +41,20 @@ namespace TenantManager.Controllers return customisation; } + + // GET: api/Customisations/5 + [HttpGet("isCustomised")] + public async Task> IsCustomised(String eventName, int tenantId) + { + var customisation = await _context.Customisation.Include(c => c.Method).Include(c => c.Tenant).Where(c => c.Method.MethodName.Equals(eventName) && c.TenantId == tenantId).FirstOrDefaultAsync(); + + if (customisation == null) + { + return false; + } + + return true; + } // PUT: api/Customisations/5 [HttpPut("{id}")] diff --git a/src/Services/TenantManager/TenantManager/Database/DbInitializer.cs b/src/Services/TenantManager/TenantManager/Database/DbInitializer.cs index 08c77ff6a..f91994866 100644 --- a/src/Services/TenantManager/TenantManager/Database/DbInitializer.cs +++ b/src/Services/TenantManager/TenantManager/Database/DbInitializer.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Linq; using TenantManager.Models; namespace TenantManager.Database @@ -17,28 +14,13 @@ namespace TenantManager.Database return; } - var tenant1 = new Tenant() { TenantName = "Tekna" }; - var tenant2 = new Tenant() { TenantName = "NITO" }; - var tenant3 = new Tenant() { TenantName = "LO" }; + var tenant1 = new Tenant { TenantName = "Tekna" }; + context.Tenant.Add(tenant1); + + var method1 = new Method { MethodName = "OrderStatusChangedToSubmittedIntegrationEvent" }; + var method2 = new Method { MethodName = "OrderStatusChangedToAwaitingValidationIntegrationEvent" }; - var tenants = new Tenant[] - { - tenant1, - tenant2, - tenant3 - }; - - foreach(Tenant t in tenants) - { - context.Tenant.Add(t); - } - - context.SaveChanges(); - - var method1 = new Method() { MethodName = "GetPrice" }; - var method2 = new Method() { MethodName = "GetItem" }; - - var methods = new Method[] + var methods = new[] { method1, method2 @@ -48,14 +30,11 @@ namespace TenantManager.Database { context.Method.Add(m); } - - context.SaveChanges(); - - var customisations = new Customisation[] + + var customisations = new[] { - new Customisation(){Tenant=tenant1, Method=method1 }, - new Customisation(){Tenant=tenant1, Method=method2}, - new Customisation(){Tenant=tenant2, Method=method1 } + new Customisation {Tenant=tenant1, Method=method1 }, + new Customisation {Tenant=tenant1, Method=method2} }; foreach(Customisation c in customisations) diff --git a/src/Services/TenantManager/TenantManager/Models/Customisation.cs b/src/Services/TenantManager/TenantManager/Models/Customisation.cs index ad6f3669b..6f0583f77 100644 --- a/src/Services/TenantManager/TenantManager/Models/Customisation.cs +++ b/src/Services/TenantManager/TenantManager/Models/Customisation.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Threading.Tasks; @@ -8,9 +9,15 @@ namespace TenantManager.Models public class Customisation { public int CustomisationId { get; set; } + + //Foreign keys public int TenantId { get; set; } - public virtual Tenant Tenant { get; set; } public int MethodId { get; set; } + + + [ForeignKey("TenantId")] + public virtual Tenant Tenant { get; set; } + [ForeignKey("MethodId")] public virtual Method Method { get; set; } } } diff --git a/src/Services/TenantManager/TenantManager/Models/Methods.cs b/src/Services/TenantManager/TenantManager/Models/Methods.cs index b1ab9027c..ab0713191 100644 --- a/src/Services/TenantManager/TenantManager/Models/Methods.cs +++ b/src/Services/TenantManager/TenantManager/Models/Methods.cs @@ -10,6 +10,6 @@ namespace TenantManager.Models { public int MethodId { get; set; } public String MethodName { get; set; } - public ICollection Customisations { get; set; } + public List Customisations { get; set; } } } diff --git a/src/Services/TenantManager/TenantManager/Models/Tenant.cs b/src/Services/TenantManager/TenantManager/Models/Tenant.cs index 72cb69624..96aa2e119 100644 --- a/src/Services/TenantManager/TenantManager/Models/Tenant.cs +++ b/src/Services/TenantManager/TenantManager/Models/Tenant.cs @@ -10,7 +10,7 @@ namespace TenantManager.Models { public String TenantName { get; set; } [Key] - public long TenantId { get; set; } - public ICollection Customisations { get; set; } + public int TenantId { get; set; } + public List Customisations { get; set; } } } diff --git a/src/Web/WebMVC/Controllers/OrderController.cs b/src/Web/WebMVC/Controllers/OrderController.cs index 5d70228cd..265cd91ac 100644 --- a/src/Web/WebMVC/Controllers/OrderController.cs +++ b/src/Web/WebMVC/Controllers/OrderController.cs @@ -102,7 +102,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Controllers private async Task AllGoodsRFIDScanned(String orderId) { - var builder = new UriBuilder(tenantACustomisationsUrl + "api/OrderStatusChangedToSubmittedIntegrationEvents"); + var builder = new UriBuilder(tenantACustomisationsUrl + "api/SavedEvents"); builder.Port = -1; var query = HttpUtility.ParseQueryString(builder.Query); query["orderId"] = orderId;