user action logic