using PostFundManagement.Application.Abstractions; using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Application.Extensions; public static class General { public static IServiceCollection AddRegisterServices(this IServiceCollection services) { var serviceType = typeof(IService); var sharedImplementations = typeof(IApplication).Assembly.GetTypes() .Where(t => serviceType.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract); foreach (var sharedImplementation in sharedImplementations) services.AddScoped(sharedImplementation); return services; } public static Guid GetUserId(this HttpContext context) => (Guid)context.Items[Domain.Extensions.Constants.UserIdItemKey]!; public static string GetUserEmail(this HttpContext context) => (string)context.Items[Domain.Extensions.Constants.EmailtemKey]!; public static (bool Decoded, Guid userId) GetUserId(this ClaimsPrincipal principal) { var sidClaim = principal.FindFirst("sid")?.Value ?? principal.FindFirst(ClaimTypes.Sid)?.Value; var decoded = Guid.TryParse(sidClaim, out var userId); return (decoded, userId); } public static (bool Decoded, Guid email) GetUserEmail(this ClaimsPrincipal principal) { var emailClaim = principal.FindFirst("email")?.Value ?? principal.FindFirst(ClaimTypes.Email)?.Value; var decoded = Guid.TryParse(emailClaim, out var email); return (decoded, email); } public static Microsoft.AspNetCore.Mvc.ProblemDetails ToProblems(this IReadOnlyList errors) => new() { Detail = string.Join(',', errors.Select(e => e.Message)), Status = StatusCodes.Status400BadRequest, Title = errors[0]?.Message, }; }