Skip to main content

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

ErpIntegration.cs
[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

ERPConfig.cs
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.

warning

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

Atenção
  • 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