public async Task <bool> Handle(AddRatingOfMovieCommand message, CancellationToken cancellationToken) { var userAuthenticatedId = _movieRepository.GetUserAuthenticatedId(); if (!userAuthenticatedId.HasValue || userAuthenticatedId == Guid.Empty) { NotifyValidationErrors("Invalid user"); return(false); } var ratingOfMovieRepo = _movieRepository.GetRatingOfMoviesByFilters(mr => mr.UserId == userAuthenticatedId.Value && mr.MovieId == message.MovieId).FirstOrDefault(); RatingOfMovieAddedEvent ratingOfMovieAddedEvent = null; if (ratingOfMovieRepo == null) { var ratingOfMovie = RatingOfMovieFactory .Create(message.Rate, message.MovieId, userAuthenticatedId.Value); if (!ratingOfMovie.IsValid()) { NotifyValidationErrors(ratingOfMovie.ValidationResult); return(false); } _movieRepository.AddRatingOfMovie(ratingOfMovie); ratingOfMovieAddedEvent = new RatingOfMovieAddedEvent(ratingOfMovie.Id, ratingOfMovie.Rate, ratingOfMovie.MovieId); } else { var ratingOfMovie = ratingOfMovieRepo; ratingOfMovie.UpdateRate(message.Rate); if (!ratingOfMovie.IsValid()) { NotifyValidationErrors(ratingOfMovie.ValidationResult); return(false); } _movieRepository.UpdateRatingOfMovie(ratingOfMovie); ratingOfMovieAddedEvent = new RatingOfMovieAddedEvent(ratingOfMovie.Id, ratingOfMovie.Rate, ratingOfMovie.MovieId); } if (Commit()) { if (ratingOfMovieAddedEvent != null) { await _bus.RaiseEvent(ratingOfMovieAddedEvent); } return(await Task.FromResult(true)); } return(false); }