model with CRUD operations