Example #1
0
 public static User ToUser(this UserState state)
 => User.From(
     EntityId.From(state.Id),
     Name.From(state.Name),
     SocialSecurityId.From(state.Cnpj),
     Email.From(state.CommercialEmail),
     Version.From(BitConverter.ToInt32(state.RowVersion)));
Example #2
0
 public static Project ToProject(this ProjectState state)
 => Project.From(
     EntityId.From(state.Id),
     ProjectName.From(state.Name),
     ProjectCode.From(state.Code),
     DateAndTime.From(state.StartDate),
     Money.From(state.Budget),
     EntityId.From(state.ClientId),
     Email.From(state.Owner),
     ProjectStatus.From(state.Status),
     ServiceOrderNumber.From(state.OrderNumber),
     Version.From(BitConverter.ToInt32(state.RowVersion)));
Example #3
0
        public void Remove(Project entity)
        {
            var oldState = Get(entity.Id);

            if (Version.Next(oldState.Version) > entity.Version)
            {
                throw new DbUpdateConcurrencyException("This version is not the most updated for this object.");
            }

            var entry = entity.ToProjectState();

            DbContext.Projects.Remove(entry);
        }
Example #4
0
        // https://docs.microsoft.com/en-us/ef/core/saving/disconnected-entities

        public void Add(User entity)
        {
            var entry = entity.ToUserState();

            var oldState = Get(entity.Id);

            if (oldState.Equals(User.Empty()))
            {
                DbContext.Users.Add(entry);
            }
            else
            {
                if (Version.Next(oldState.Version) > entity.Version)
                {
                    throw new DbUpdateConcurrencyException("This version is not the most updated for this object.");
                }

                DbContext.Entry(oldState).CurrentValues.SetValues(entry);
            }
        }
Example #5
0
        public void user_aggregate_reconstruct()
        {
            var fixture = new Fixture();

            fixture.Register <EntityId>(() => EntityId.From(fixture.Create <Guid>()));
            fixture.Register <Version>(() => Version.From(fixture.Create <int>()));
            fixture.Register <Name>(() => Name.From(fixture.Create <string>()));
            fixture.Register <SocialSecurityId>(() => SocialSecurityId.From(fixture.Create <string>()));
            fixture.Register <Email>(() => Email.From(string.Format($"{fixture.Create<string>()}@teste.com")));
            fixture.Register <User>(() => User.From(fixture.Create <EntityId>(),
                                                    fixture.Create <Name>(), fixture.Create <SocialSecurityId>(),
                                                    fixture.Create <Email>(), fixture.Create <Version>()));

            fixture.Register <UserAggregationRoot>(
                () => UserAggregationRoot.ReconstructFrom(fixture.Create <User>()));

            var agg = fixture.Create <UserAggregationRoot>();

            Assert.True(agg.ValidationResults.IsValid);
        }
Example #6
0
        // https://docs.microsoft.com/en-us/ef/core/saving/disconnected-entities

        public void Add(Project entity)
        {
            var entry    = entity.ToProjectState();
            var oldState = DbContext.Projects
                           .OrderByDescending(ob => ob.Id)
                           .ThenByDescending(ob => ob.RowVersion)
                           .FirstOrDefault(t => t.Id == entity.Id.Value);

            if (oldState == null)
            {
                DbContext.Projects.Add(entry);
            }
            else
            {
                var version = Version.From(BitConverter.ToInt32(oldState.RowVersion));

                if (Version.Next(version) > entity.Version)
                {
                    throw new DbUpdateConcurrencyException("This version is not the most updated for this object.");
                }

                DbContext.Entry(oldState).CurrentValues.SetValues(entry);
            }
        }
Example #7
0
        public void user_add_command_succed()
        {
            var fixture = new Fixture().Customize(new AutoNSubstituteCustomization {
                ConfigureMembers = true
            });

            fixture.Register <EntityId>(() => EntityId.From(fixture.Create <Guid>()));
            fixture.Register <Name>(() => Name.From(fixture.Create <string>()));
            fixture.Register <Version>(() => Version.From(fixture.Create <int>()));
            fixture.Register <SocialSecurityId>(() => SocialSecurityId.From(fixture.Create <string>()));
            fixture.Register <Email>(() => Email.From(string.Format($"{fixture.Create<string>()}@teste.com")));
            fixture.Register <User>(() => User.From(fixture.Create <EntityId>(),
                                                    fixture.Create <Name>(), fixture.Create <SocialSecurityId>(),
                                                    fixture.Create <Email>(), fixture.Create <Version>()));

            var finalUser = fixture.Create <User>();

            var command = fixture.Build <AddUserCommand>()
                          .With(user => user.CommercialEmail, finalUser.CommercialEmail.Value)
                          .With(user => user.Cnpj, finalUser.Cnpj.Value)
                          .With(user => user.Name, finalUser.Name.Value)
                          .Create();

            var mediator = fixture.Create <IMediator>();
            var logger   = fixture.Create <ILogger <AddUserCommandHandler> >();
            var db       = fixture.Create <IDbSession <IUserRepository> >();
            var handler  = new AddUserCommandHandler(logger, mediator, db);

            var result = handler.Execute(command);

            db.Received().Repository.Add(finalUser);
            db.Received().SaveChanges();
            mediator.Received(1).Publish(Arg.Any <UserAddedEvent>());

            Assert.True(result.IsSucceed);
        }
 private UserRemovedEvent(EntityId id, Version version)
     : base(DateTime.Now, version)
 {
     Id = id;
 }
 private ProjectDetailUpdatedEvent(EntityId id, ProjectName name, Email owner, ProjectStatus status, Money budget, ServiceOrderNumber orderNumber, Version version)
     : base(DateTime.Now, version)
 {
     Id          = id;
     Name        = name;
     Owner       = owner;
     Status      = status;
     OrderNumber = orderNumber;
     Budget      = budget;
 }
Example #10
0
 private UserAddedEvent(EntityId clientId, Name name, SocialSecurityId cnpj, Email commercialEmail, Version version)
     : base(DateTime.Now, version)
 {
     Id              = clientId;
     Name            = name;
     Cnpj            = cnpj;
     CommercialEmail = commercialEmail;
 }
 private ProjectAddedEvent(EntityId id, ProjectName name, ProjectCode code, DateAndTime startDate, Money budget, EntityId clientId, Version version)
     : base(DateTime.Now, version)
 {
     Id          = id;
     Code        = code;
     Name        = name;
     Budget      = budget;
     StartDate   = startDate;
     ClientId    = clientId;
     Owner       = Email.Empty();
     Status      = ProjectStatus.Default();
     OrderNumber = ServiceOrderNumber.Empty();
 }