ロジック自体はよいと思う。処理をModelに寄せよう。（UserMovieState model?）