public static async Task Run( [EventHubTrigger(HubNames.ClickEventsHub, Connection = "CloudSettings:EventHubListenerConnectionString")] LinkClickedMessage events, [Table(TableNames.Hits)] CloudTable table, ILogger log) { var entity = new HitEntity { PartitionKey = PartitionKeys.Hit, RowKey = Guid.NewGuid().ToString(), CreatedOn = events.ClickedAt, ShortCode = events.Key, Timestamp = DateTimeOffset.UtcNow }; var operation = TableOperation.Insert(entity); await table.CreateIfNotExistsAsync(); await table.ExecuteAsync(operation); }
public async Task <IActionResult> ResolveShortCode( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "{path?}")] HttpRequest req, [EventHub(HubNames.ClickEventsHub, Connection = "CloudSettings:EventHubSenderConnectionString")] IAsyncCollector <LinkClickedMessage> outputEvents, string path) { var targetUrl = "https://app.4dn.me/"; var now = DateTimeOffset.UtcNow; if (!string.IsNullOrWhiteSpace(path) && Regex.IsMatch(path, Constants.ShortCodeRegularExpression)) { var targetEndpoint = await _shortLinksService.ResolveAsync(path); if (!string.IsNullOrWhiteSpace(targetEndpoint)) { _logger.LogInformation($"Path '{path}' was resolved to endpoint {targetEndpoint}, now redirecting."); targetUrl = targetEndpoint; var message = new LinkClickedMessage { Key = path, ClickedAt = now }; await outputEvents.AddAsync(message); await outputEvents.FlushAsync(); } else { _logger.LogInformation($"The path ({path}) was not configured as a valid shortlink"); } } else { _logger.LogInformation($"No matching path came in ({path}) so redirecting to the app"); } return(new RedirectResult(targetUrl, true)); }