refactor structure and use faker