refactor: seperate data and task, data can save another doc