full generic crud