Hexagonal architecture in elixir

Thanks, I appreciate it.

Concerning 3rd party API, we had none when I left, but I guess it would be the same more or less that the repositories. But in a different folder in the infra.

It should be in the infra, as it is a “driven” part of the “technical details” - as in not Core Domain nor Command/Query logic.
The “driver” part being in the Web modules, which really should be named app. But Phoenix naming stuck.

For a GitHub API integration for example:

  • A port like Command.Ports.GithubService
  • The corresponding Infra.GithubService module implementing Command.Ports.GithubService.Behaviour

And the Infra.GithubService would be in the /infra/services folder.