current state

This commit is contained in:
2026-03-06 14:42:47 -05:00
parent c675430fb9
commit b25222cc82
10 changed files with 88 additions and 19 deletions

View File

@@ -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);
}