current state
This commit is contained in:
@@ -24,12 +24,14 @@ public class EventTrackingService(
|
||||
|
||||
public Task TrackClickAsync(Guid workspaceId, Guid shortLinkId, HttpContext context)
|
||||
{
|
||||
// Fire and forget - don't block the redirect
|
||||
// Extract request data before the HttpContext is disposed
|
||||
var requestData = CaptureRequestData(context);
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await TrackEventInternalAsync(workspaceId, shortLinkId, null, EventType.Click, context);
|
||||
await TrackEventInternalAsync(workspaceId, shortLinkId, null, EventType.Click, requestData);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -42,12 +44,13 @@ public class EventTrackingService(
|
||||
|
||||
public Task TrackScanAsync(Guid workspaceId, Guid shortLinkId, Guid qrCodeId, HttpContext context)
|
||||
{
|
||||
// Fire and forget - don't block the redirect
|
||||
var requestData = CaptureRequestData(context);
|
||||
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await TrackEventInternalAsync(workspaceId, shortLinkId, qrCodeId, EventType.Scan, context);
|
||||
await TrackEventInternalAsync(workspaceId, shortLinkId, qrCodeId, EventType.Scan, requestData);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -58,22 +61,25 @@ public class EventTrackingService(
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private static RequestData CaptureRequestData(HttpContext context) => new(
|
||||
IpAddress: GetClientIpAddress(context),
|
||||
UserAgent: context.Request.Headers.UserAgent.ToString(),
|
||||
Referrer: context.Request.Headers.Referer.ToString()
|
||||
);
|
||||
|
||||
private async Task TrackEventInternalAsync(
|
||||
Guid workspaceId,
|
||||
Guid shortLinkId,
|
||||
Guid? qrCodeId,
|
||||
EventType eventType,
|
||||
HttpContext context)
|
||||
RequestData requestData)
|
||||
{
|
||||
logger.LogInformation("About to track something");
|
||||
|
||||
// Create a new scope for database access (since we're in a background task)
|
||||
using var scope = scopeFactory.CreateScope();
|
||||
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||
|
||||
var ipAddress = GetClientIpAddress(context);
|
||||
var userAgent = context.Request.Headers.UserAgent.ToString();
|
||||
var referrer = context.Request.Headers.Referer.ToString();
|
||||
var ipAddress = requestData.IpAddress;
|
||||
var userAgent = requestData.UserAgent;
|
||||
var referrer = requestData.Referrer;
|
||||
|
||||
var ipHash = HashIpAddress(ipAddress);
|
||||
var deviceType = ParseDeviceType(userAgent);
|
||||
@@ -167,4 +173,6 @@ public class EventTrackingService(
|
||||
|
||||
return value.Length <= maxLength ? value : value[..maxLength];
|
||||
}
|
||||
|
||||
private sealed record RequestData(string IpAddress, string UserAgent, string Referrer);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user