Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Azure.EventGrid;
- using Microsoft.Azure.EventGrid.Models;
- using Microsoft.Extensions.Logging;
- using System.Text.Json;
- namespace order_eg.Controllers
- {
- public class Item
- {
- public string Name { get; set; }
- public int Version { get; set; }
- }
- [ApiController]
- [Route("[controller]")]
- public class OrderController : ControllerBase
- {
- static private Item CurrentItem = new Item { Name = "Initial", Version = 0 };
- private readonly ILogger<OrderController> _logger;
- public OrderController(ILogger<OrderController> logger)
- {
- _logger = logger;
- }
- [HttpGet]
- public async Task<ActionResult<Item>> GetItem()
- {
- //var topicEndpoint = "https://my-entity-topic.westeurope-1.eventgrid.azure.net/api/events";
- var topicKey = "";
- var eventGridClient = new EventGridClient(new TopicCredentials(topicKey));
- var eventsList1 = CreateEvent(1);
- var eventsList2 = CreateEvent(2);
- await eventGridClient.PublishEventsAsync("my-entity-topic.westeurope-1.eventgrid.azure.net", eventsList2);
- await Task.Delay(1000);
- await eventGridClient.PublishEventsAsync("my-entity-topic.westeurope-1.eventgrid.azure.net", eventsList1);
- return Ok(CurrentItem);
- }
- private static List<EventGridEvent> CreateEvent(int inc)
- {
- var eventsList = new List<EventGridEvent>();
- eventsList.Add(new EventGridEvent()
- {
- Id = Guid.NewGuid().ToString(),
- Data = new Item()
- {
- Name = "Test",
- Version = CurrentItem.Version + inc
- },
- EventTime = DateTime.Now,
- EventType = "Custom",
- Subject = "MyTopic",
- DataVersion = "1.0"
- });
- return eventsList;
- }
- [HttpPost]
- public ActionResult Update(Item item)
- {
- if (item.Version == CurrentItem.Version + 1)
- {
- CurrentItem = item;
- return Ok();
- }
- throw new Exception("Out of order message"); // https://docs.microsoft.com/en-us/azure/event-grid/delivery-and-retry#failure-codes
- }
- [HttpPost("webhook")]
- public ActionResult WebHook([FromBody]EventGridEvent[] eventGridEvents)
- {
- _logger.LogInformation("Recieved {0} {1}", eventGridEvents.Length, eventGridEvents.FirstOrDefault()?.Data);
- var eventGridEvent = eventGridEvents.FirstOrDefault(); // TODO:
- if (eventGridEvent == null) return BadRequest();
- if (eventGridEvent.EventType == EventTypes.EventGridSubscriptionValidationEvent)
- {
- var element = (JsonElement)eventGridEvent.Data;
- var json = element.GetRawText();
- var data = JsonSerializer.Deserialize<SubscriptionValidationEventData>(json);
- var response = new SubscriptionValidationResponse(data.ValidationCode);
- return Ok(response);
- }
- else // TODO: event type
- {
- var element = (JsonElement)eventGridEvent.Data;
- var json = element.GetRawText();
- var data = JsonSerializer.Deserialize<Item>(json);
- return Update(data);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement