using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ServicesDAO.models
{
///
/// Catálogo estático de cómo se consume cada tecnología. Una o varias filas por
/// servicio (una por componente); no la escribe ningún proceso automático.
///
[Table("service_connection_info")]
public class ServiceConnectionInfo
{
[Key]
[Column("ServiceConnectionInfoID")]
public int ServiceConnectionInfoID { get; set; }
[Column("services_id")]
public int ServicesId { get; set; }
/// Empata con service_endpoints.resource_role. NULL = aplica a todos los componentes.
[Column("component")]
public string? Component { get; set; }
/// 'cli' | 'web' | 'gui'.
[Column("kind")]
public string Kind { get; set; }
///
/// Cómo se combinan N endpoints en una cadena: 'first' (un punto de entrada
/// aunque haya varios nodos), 'join' (todos los endpoints en una sola cadena,
/// como los bootstrap servers de Kafka) o 'each' (un acceso distinto por
/// componente, como Hadoop+Spark).
///
[Column("endpoint_strategy")]
public string EndpointStrategy { get; set; }
///
/// El puerto que se le ofrece al cliente, no el puerto del Service: un mismo
/// Service puede publicar varios y sólo uno ser el correcto.
///
[Column("default_port")]
public int? DefaultPort { get; set; }
/// NULL = usar el usuario que capturó el cliente en el alta.
[Column("default_user")]
public string? DefaultUser { get; set; }
///
/// Texto plano con marcadores ({HOSTNAME}, {PORT}, {USER}, {CONTRASEÑA}…),
/// nunca HTML: su contenido termina insertado en el DOM del navegador y el
/// marcado lo pone la vista.
///
[Column("template")]
public string? Template { get; set; }
[Column("notes")]
public string? Notes { get; set; }
[Column("sort_order")]
public int SortOrder { get; set; }
[Column("active")]
public bool Active { get; set; }
}
}