using System.Security.Claims; namespace line_gestao_api.Services; public class TenantMiddleware { private readonly RequestDelegate _next; public TenantMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context, ITenantProvider tenantProvider) { Guid? tenantId = null; var claim = context.User.FindFirst("tenantId")?.Value ?? context.User.FindFirst("tenant")?.Value; var headerValue = context.Request.Headers["X-Tenant-Id"].FirstOrDefault(); if (Guid.TryParse(claim, out var parsed)) { tenantId = parsed; } else if (Guid.TryParse(headerValue, out var headerTenant)) { tenantId = headerTenant; } tenantProvider.SetTenantId(tenantId); try { await _next(context); } finally { tenantProvider.SetTenantId(null); } } }