hexagonal architecture example typescript