using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson; namespace OnlyOneAccessTemplate.Models { public class ModuleConfig { [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } = string.Empty; public string ModuleId { get; set; } = string.Empty; // Ex: "footer-message" public string Name { get; set; } = string.Empty; public string Url { get; set; } = string.Empty; // URL do endpoint externo public string RequestBy { get; set; } = string.Empty; // Identificador único public bool IsActive { get; set; } = true; public Dictionary Headers { get; set; } = new(); public Dictionary Parameters { get; set; } = new(); public int CacheMinutes { get; set; } = 5; // Cache do conteúdo public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; public string? JavaScriptUrl { get; set; } // URL do arquivo JS public string? JavaScriptFunction { get; set; } // Função de inicialização public string? CssUrl { get; set; } // CSS opcional public Dictionary Assets { get; set; } = new(); // Assets adicionais // ADICIONAR na classe ModuleConfig existente: // Configurações de Proxy Dinâmico public string? ProxyEndpoint { get; set; } // "/api/modules/{moduleId}" public Dictionary ProxyMappings { get; set; } = new(); // endpoint -> moduleUrl public bool UseProxy { get; set; } = true; // Configurações de Segurança public string? ApiKey { get; set; } // Gerado automaticamente public List AllowedOrigins { get; set; } = new(); public int RateLimitPerMinute { get; set; } = 60; // Configurações de Menu public string? MenuTitle { get; set; } public string? MenuDescription { get; set; } public string? MenuIcon { get; set; } public string? MenuCategory { get; set; } = "Conversores"; public int MenuOrder { get; set; } = 0; public bool ShowInMenu { get; set; } = true; // Configurações de SEO public Dictionary SeoTitles { get; set; } = new(); public Dictionary SeoDescriptions { get; set; } = new(); public Dictionary SeoKeywords { get; set; } = new(); // Configurações Técnicas public string? HealthEndpoint { get; set; } = "/api/converter/health"; public int HealthCheckIntervalMinutes { get; set; } = 5; public bool AutoStart { get; set; } = true; public string? Version { get; set; } public DateTime? LastHealthCheck { get; set; } public bool IsHealthy { get; set; } = false; // Metadados do Desenvolvedor public string? DeveloperName { get; set; } public string? DeveloperEmail { get; set; } public string? Repository { get; set; } public string? Documentation { get; set; } } }