Optimize api controller: add cache & use raw sql