add category feature, refactor, unit test filter