refactor product service