follow CRUDI pattern