示例#1
0
        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);
        }
示例#2
0
        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);
            }
        }
示例#3
0
 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);
 }