void Apply(AddedNewRatingEvent @event) { var rating = new LessonRating() { Id = @event.RatingId, UserId = @event.UserId, Content = @event.Content, CreationDate = @event.Date, LastModifDate = @event.Date, RecordState = Constants.RECORD_STATE_ACTIVE }; Ratings.Add(rating); }
public void Handle(AddedNewRatingEvent @event) { using (var db = new DisciturContext()) { // get read-model Ids (ID-maps) int lessonId = _identityMapper.GetModelId <Lesson>(@event.Id); int userId = _identityMapper.GetModelId <User>(@event.UserId); // get involved read-model entities User author = db.Users.Find(userId); Lesson lesson = db.Lessons.Find(lessonId); // Create new Read-Model Lesson's Comment LessonRating rating = new LessonRating(); rating.LessonId = lessonId; rating.UserId = userId; rating.Author = author; rating.Rating = @event.Rating; rating.Content = @event.Content ?? string.Empty; rating.CreationDate = @event.Date; rating.LastModifDate = @event.Date; rating.LastModifUser = author.UserName; rating.Vers = 1; rating.RecordState = Constants.RECORD_STATE_ACTIVE; // Add new Lesson's Rating db.LessonRatings.Add(rating); //// Update Lesson Rating with Average of Ratings on the same Lesson //IQueryable<int> prevRatings = db.LessonRatings // .Where(r => r.LessonId.Equals(rating.LessonId) && // r.RecordState.Equals(Constants.RECORD_STATE_ACTIVE)) // .Select(r => r.Rating); //List<int> ratingsList = prevRatings.ToList(); //ratingsList.Add(rating.Rating); //lesson.Rate = Math.Max((int)Math.Round(ratingsList.Average()), 1); lesson.Rate = CalculateAverageRating(rating); // Update Lesson's version // TODO: is it correct to update readModel "devops fields" of lesson in this case? UpdateLessonArchFields(lesson, author.UserName, @event.Date, @event.Version); // Persist changes db.Entry(lesson).State = EntityState.Modified; db.SaveChanges(); // Map new IDs // NOTE: Comment is NOT and AR, but it's mapped with it's own Id-map for compatibility with existant read-model _identityMapper.Map <LessonRating>(rating.Id, @event.RatingId); } }