feat(controller) add dispatcher