Пример #1
0
        public void Handle(SavedNewDraftLessonEvent @event)
        {
            using (var db = new DisciturContext())
            {
                int  userId = _identityMapper.GetModelId <User>(@event.AuthorId);
                User _user  = db.Users.Find(userId);

                Lesson lesson = new Lesson();
                lesson.Title        = @event.Title;
                lesson.Discipline   = @event.Discipline;
                lesson.School       = @event.School;
                lesson.Classroom    = @event.Classroom;
                lesson.Author       = _user;
                lesson.UserId       = _user.UserId;
                lesson.Content      = @event.Content;
                lesson.Conclusion   = @event.Conclusion;
                lesson.PublishDate  = @event.CreationDate;
                lesson.CreationDate = @event.CreationDate;
                UpdateLessonArchFields(lesson, _user.UserName, @event.CreationDate, @event.Version);
                //lesson.LastModifDate = @event.CreationDate;
                //lesson.LastModifUser = _user.UserName;
                //lesson.Vers = 1;
                lesson.RecordState = Constants.RECORD_STATE_ACTIVE;

                // Create FeedBacks Collection
                if (@event.FeedBacks.ContainsKey(EntityStatus.A))
                {
                    @event.FeedBacks[EntityStatus.A].ToList()
                    .ForEach(feedback => {
                        LessonFeedback fb = new LessonFeedback()
                        {
                            Feedback           = feedback.Feedback,
                            Nature             = feedback.Nature,
                            LessonFeedbackGuid = feedback.Id
                        };
                        lesson.FeedBacks.Add(fb);
                    });
                }
                // Create Tags Collection
                if (@event.Tags.ContainsKey(EntityStatus.A))
                {
                    @event.Tags[EntityStatus.A].ToList()
                    .ForEach(tag =>
                    {
                        LessonTag t = new LessonTag()
                        {
                            LessonTagName = tag.LessonTagName
                        };
                        lesson.Tags.Add(t);
                    });
                }

                db.Lessons.Add(lesson);
                db.SaveChanges();
                //Ids mapping
                _identityMapper.Map <Lesson>(lesson.LessonId, @event.Id);
                if (lesson.FeedBacks.Count > 0)
                {
                    lesson.FeedBacks.ToList()
                    .ForEach(feedback => _identityMapper.Map <LessonFeedback>(feedback.LessonFeedbackId, feedback.LessonFeedbackGuid));
                }
            }
        }
Пример #2
0
        public void Handle(LessonMementoPropagatedEvent @event)
        {
            using (var db = new DisciturContext())
            {
                int itemId = _identityMapper.GetModelId <Lesson>(@event.Memento.Id);
                if (itemId.Equals(0))
                {
                    int  userId = _identityMapper.GetModelId <User>(@event.Memento.AuthorId);
                    User _user  = db.Users.Find(userId);

                    Lesson lesson = new Lesson();
                    lesson.Title        = @event.Memento.Title;
                    lesson.Discipline   = @event.Memento.Discipline;
                    lesson.School       = @event.Memento.School;
                    lesson.Classroom    = @event.Memento.Classroom;
                    lesson.Author       = _user;
                    lesson.UserId       = _user.UserId;
                    lesson.Content      = @event.Memento.Content;
                    lesson.Conclusion   = @event.Memento.Conclusion;
                    lesson.PublishDate  = @event.Memento.CreationDate;
                    lesson.CreationDate = @event.Memento.CreationDate;
                    UpdateLessonArchFields(lesson, _user.UserName, @event.Memento.CreationDate, @event.Memento.Version);
                    //lesson.LastModifDate = @event.CreationDate;
                    //lesson.LastModifUser = _user.UserName;
                    //lesson.Vers = 1;
                    lesson.RecordState = Constants.RECORD_STATE_ACTIVE;

                    // Create FeedBacks Collection
                    @event.Memento.FeedBacks.ToList()
                    .ForEach(feedback => {
                        LessonFeedback fb = new LessonFeedback()
                        {
                            Feedback           = feedback.Feedback,
                            Nature             = feedback.Nature,
                            LessonFeedbackGuid = feedback.Id
                        };
                        lesson.FeedBacks.Add(fb);
                    });

                    // Create Tags Collection
                    @event.Memento.Tags.ToList()
                    .ForEach(tag =>
                    {
                        LessonTag t = new LessonTag()
                        {
                            LessonTagName = tag.LessonTagName
                        };
                        lesson.Tags.Add(t);
                    });

                    db.Lessons.Add(lesson);
                    db.SaveChanges();
                    //Ids mapping
                    _identityMapper.Map <Lesson>(lesson.LessonId, @event.Memento.Id);
                    if (lesson.FeedBacks.Count > 0)
                    {
                        lesson.FeedBacks.ToList()
                        .ForEach(feedback => _identityMapper.Map <LessonFeedback>(feedback.LessonFeedbackId, feedback.LessonFeedbackGuid));
                    }

                    // Create Ratings Collection
                    List <int> ratingsList = new List <int>();
                    @event.Memento.Ratings.ToList()
                    .ForEach(r =>
                    {
                        int authorId = _identityMapper.GetModelId <User>(r.UserId);
                        User author  = db.Users.Find(userId);
                        ratingsList.Add(r.Rating);
                        LessonRating rating = new LessonRating()
                        {
                            LessonId      = lesson.LessonId,
                            UserId        = authorId,
                            Author        = author,
                            Rating        = r.Rating,
                            Content       = r.Content ?? string.Empty,
                            CreationDate  = r.CreationDate,
                            LastModifDate = r.LastModifDate,
                            LastModifUser = r.LastModifUser,
                            Vers          = r.Vers,
                            RecordState   = Constants.RECORD_STATE_ACTIVE
                        };
                        // Add new Lesson's Rating
                        db.LessonRatings.Add(rating);
                        db.SaveChanges();
                        _identityMapper.Map <LessonRating>(rating.Id, r.Id);
                    });

                    lesson.Rate = ratingsList.Count > 0 ? Math.Max((int)Math.Round(ratingsList.Average()), 1) : 0;

                    // Create Comments Collection
                    @event.Memento.Comments.ToList()
                    .ForEach(c =>
                    {
                        // get read-model Ids (ID-maps)
                        int _userId  = _identityMapper.GetModelId <User>(c.AuthorId);
                        int?parentId = c.ParentId == null ? null : (int?)_identityMapper.GetModelId <LessonComment>(c.ParentId.Value);
                        // get involved read-model entities
                        User author = db.Users.Find(userId);

                        // Create new Read-Model Lesson's Comment
                        LessonComment comment = new LessonComment()
                        {
                            LessonId      = lesson.LessonId,
                            Content       = c.Content,
                            CreationDate  = c.CreationDate,
                            Date          = c.Date,
                            LastModifDate = c.Date,
                            Level         = c.Level,
                            ParentId      = parentId,
                            Vers          = c.Vers,
                            RecordState   = Constants.RECORD_STATE_ACTIVE,
                            UserId        = _userId,
                            Author        = author,
                            LastModifUser = author.UserName
                        };
                        db.LessonComments.Add(comment);
                        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 <LessonComment>(comment.Id, c.Id);
                    });

                    // Persist changes
                    db.Entry(lesson).State = EntityState.Modified;
                    db.SaveChanges();
                }
                // otherwise it could be used for maintenance purposes
            }
        }
Пример #3
0
        public void Handle(SavedDraftLessonEvent @event)
        {
            using (var db = new DisciturContext())
            {
                int    lessonId = _identityMapper.GetModelId <Lesson>(@event.Id);
                Lesson lesson   = db.Lessons.Where(l => l.LessonId.Equals(lessonId) &&
                                                   //l.Vers.Equals(@event.Version) &&
                                                   l.RecordState.Equals(Constants.RECORD_STATE_ACTIVE))
                                  .First();

                if (lesson.Title != @event.Title)
                {
                    lesson.Title = @event.Title;
                }
                if (lesson.Discipline != @event.Discipline)
                {
                    lesson.Discipline = @event.Discipline;
                }

                lesson.School      = @event.School;
                lesson.Classroom   = @event.Classroom;
                lesson.Discipline  = @event.Discipline;
                lesson.Content     = @event.Content;
                lesson.Conclusion  = @event.Conclusion;
                lesson.PublishDate = @event.ModificationDate;

                // Update FeedBacks Collection
                if (@event.FeedBacks.ContainsKey(EntityStatus.A))
                {
                    @event.FeedBacks[EntityStatus.A].ToList()
                    .ForEach(feedback => {
                        LessonFeedback fb = new LessonFeedback()
                        {
                            Feedback           = feedback.Feedback,
                            Nature             = feedback.Nature,
                            LessonFeedbackGuid = feedback.Id
                        };
                        lesson.FeedBacks.Add(fb);
                    });
                }
                if (@event.FeedBacks.ContainsKey(EntityStatus.M))
                {
                    @event.FeedBacks[EntityStatus.M].ToList()
                    .ForEach(feedback =>
                    {
                        var item      = lesson.FeedBacks.Single(f => f.LessonFeedbackId.Equals(_identityMapper.GetModelId <LessonFeedback>(feedback.Id)));
                        item.Feedback = feedback.Feedback;
                    });
                }
                if (@event.FeedBacks.ContainsKey(EntityStatus.C))
                {
                    @event.FeedBacks[EntityStatus.C].ToList()
                    .ForEach(feedback =>
                    {
                        var item = lesson.FeedBacks.Single(f => f.LessonFeedbackId.Equals(_identityMapper.GetModelId <LessonFeedback>(feedback.Id)));
                        lesson.FeedBacks.Remove(item);
                        db.LessonFeedbacks.Remove(item);
                    });
                }
                // Update Tags Collection
                if (@event.Tags.ContainsKey(EntityStatus.A))
                {
                    @event.Tags[EntityStatus.A].ToList()
                    .ForEach(tag => {
                        LessonTag t = new LessonTag()
                        {
                            LessonTagName = tag.LessonTagName
                        };
                        lesson.Tags.Add(t);
                    });
                }
                if (@event.Tags.ContainsKey(EntityStatus.C))
                {
                    @event.Tags[EntityStatus.C].ToList()
                    .ForEach(tag =>
                    {
                        var item = lesson.Tags.Single(t => t.LessonTagName.Equals(tag.LessonTagName));
                        lesson.Tags.Remove(item);
                        db.LessonTags.Remove(item);
                    });
                }
                UpdateLessonArchFields(lesson, lesson.LastModifUser, @event.ModificationDate, @event.Version);

                db.Entry(lesson).State = EntityState.Modified;
                db.SaveChanges();

                if (lesson.FeedBacks.Count > 0)
                {
                    lesson.FeedBacks.ToList()
                    .ForEach(feedback => {
                        if (@event.FeedBacks.ContainsKey(EntityStatus.A) && @event.FeedBacks[EntityStatus.A].Any(f => f.Id.Equals(feedback.LessonFeedbackGuid)))
                        {
                            _identityMapper.Map <LessonFeedback>(feedback.LessonFeedbackId, feedback.LessonFeedbackGuid);
                        }
                    });
                }
            }
        }