Requisitos da Integração
Esta seção descreve os pré-requisitos necessários para implementar uma nova integração usando o framework interno.
1. Configurações
O integrador pode depender de parâmetros de configuração para conectar-se a sistemas externos ou definir comportamentos específicos. Exemplos típicos incluem:
- URLs de APIs externas
- Chaves de autenticação ou tokens
- Timeouts e limites de requisição
- Outros parâmetros de ambiente específicos
Integrações são representadas por ErpIntegration
[Table("erp_integrations")]
public class ErpIntegration
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("name")]
[MaxLength(100)]
public string Name { get; set; } = null!;
[Column("def_erp_integrations_id")]
public EDefErpIntegration DefErpIntegrationId { get; set; }
[Column("base_url")]
[MaxLength(255)]
public string BaseUrl { get; set; } = null!;
[Column("auth_credentials")]
public string AuthCredentials { get; set; } = null!;
// Outras propriedades da integração...
}
Os Connectors consomem o objeto ERPConfig para realizar as integrações
public class ERPConfig
{
public required string BaseUrl { get; set; }
public required int IntegrationId { get; set; }
public required string IntegrationCode { get; set; }
public required string IntegrationName { get; set; }
public required string AuthCredentials { get; set; }
public required string Parameters { get; set; }
}
2. Connectors
Os Connectors são bibliotecas genéricas que lidam com comunicação externa.
Todo acesso a sistemas fora do domínio da aplicação deve ser feito por meio deles.
Exemplo de Connector:
public class CustomerConnector
{
private readonly HttpClient httpClient;
public CustomerConnector(HttpClient httpClient)
{
this.httpClient = httpClient;
}
public async Task<CustomerDto[]> GetCustomersAsync()
{
// Chamada à API externa
var response = await httpClient.GetAsync("customers");
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<CustomerDto[]>();
}
}
Nota: Nunca implementar lógica de negócio dentro do Connector. Ele apenas realiza comunicação externa e transforma os dados brutos se necessário.
3. Regras de negócio
Toda lógica de negócio deve estar na camada Application (Core), seguindo DDD. O integrador apenas orquestra chamadas para Application e Connectors.
As integrações são executadas através de uma classe Integrator, que orquestra chamadas de Application e Connectors
- Não implemente lógica de negócio em um Connector ou Integrator
- Não faça referência à repositórios ou infraestrutura de Core em um Connector ou Integrator
- Sempre consuma lógica de negócio de Application
- Sempre comunique com sistemas externos utilizando um Connector