Ejemplo n.º 1
0
        public IList <string> Execute()
        {
            foreach (var lesson in _db.Lessons.ToList())
            {
                if (_db.IdMaps.GetAggregateId <Lesson>(lesson.LessonId).Equals(Guid.Empty))
                {
                    // Get fresh new ID
                    Guid entityId = Guid.NewGuid();
                    while (!_db.IdMaps.GetModelId <Lesson>(entityId).Equals(0))
                    {
                        entityId = Guid.NewGuid();
                    }

                    // Save Ids mapping
                    _db.IdMaps.Map <Lesson>(lesson.LessonId, entityId);

                    // Create Memento from ReadModel
                    Guid userId = _db.IdMaps.GetAggregateId <User>(lesson.UserId);
                    var  entity = new Discitur.Domain.Model.LessonMemento(
                        entityId,
                        1,
                        lesson.Title,
                        lesson.Discipline,
                        lesson.School,
                        lesson.Classroom,
                        lesson.Rate,
                        userId,
                        lesson.PublishDate,
                        lesson.Content,
                        lesson.Conclusion,
                        lesson.Published,
                        lesson.CreationDate,
                        lesson.LastModifDate,
                        lesson.LastModifUser,
                        lesson.RecordState,
                        GetLessonFeedbacks(lesson),
                        GetLessonTags(lesson),
                        GetLessonComments(lesson),
                        GetLessonRatings(lesson));

                    // Create a fake External event
                    using (var stream = _store.OpenStream(entityId, 0, int.MaxValue))
                    {
                        // Memento Propagation Event
                        var propagationEvent = new LessonMementoPropagatedEvent(entity);
                        stream.AddMigrationCommit(entity.GetType(), propagationEvent);
                    }

                    // Save Snapshot from entity's Memento image
                    _store.Advanced.AddSnapshot(new Snapshot(entity.Id.ToString(), entity.Version, entity));

                    _logs.Add(String.Format("{0} - Successfully migrated Lesson id: {1}, Guid: {2}, Title:{3}", DateTime.Now, lesson.LessonId, entityId.ToString(), lesson.Title));
                }
            }
            return(_logs);
        }
Ejemplo n.º 2
0
        public IList<string> Execute()
        {
            foreach (var lesson in _db.Lessons.ToList())
            {
                if (_db.IdMaps.GetAggregateId<Lesson>(lesson.LessonId).Equals(Guid.Empty))
                {
                    // Get fresh new ID
                    Guid entityId = Guid.NewGuid();
                    while (!_db.IdMaps.GetModelId<Lesson>(entityId).Equals(0))
                        entityId = Guid.NewGuid();

                    // Save Ids mapping
                    _db.IdMaps.Map<Lesson>(lesson.LessonId, entityId);

                    // Create Memento from ReadModel
                    Guid userId = _db.IdMaps.GetAggregateId<User>(lesson.UserId);
                    var entity = new Discitur.Domain.Model.LessonMemento(
                        entityId,
                        1,
                        lesson.Title,
                        lesson.Discipline,
                        lesson.School,
                        lesson.Classroom,
                        lesson.Rate,
                        userId,
                        lesson.PublishDate,
                        lesson.Content,
                        lesson.Conclusion,
                        lesson.Published,
                        lesson.CreationDate,
                        lesson.LastModifDate,
                        lesson.LastModifUser,
                        lesson.RecordState,
                        GetLessonFeedbacks(lesson),
                        GetLessonTags(lesson),
                        GetLessonComments(lesson),
                        GetLessonRatings(lesson));

                    // Create a fake External event
                    using (var stream = _store.OpenStream(entityId, 0, int.MaxValue))
                    {
                        // Memento Propagation Event
                        var propagationEvent = new LessonMementoPropagatedEvent(entity);
                        stream.AddMigrationCommit(entity.GetType(), propagationEvent);
                    }

                    // Save Snapshot from entity's Memento image
                    _store.Advanced.AddSnapshot(new Snapshot(entity.Id.ToString(), entity.Version, entity));

                    _logs.Add(String.Format("{0} - Successfully migrated Lesson id: {1}, Guid: {2}, Title:{3}", DateTime.Now, lesson.LessonId, entityId.ToString(), lesson.Title));
                }
            }
            return _logs;
        }
Ejemplo n.º 3
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
            }
        }