refact data structrue and add catalog model