hexagonal architecture typescript example