Beispiel #1
0
        public IdempotentCommandHandlerModuleProcessor(
            Func <IAddresses> getAddresses,
            ConcurrentUnitOfWork concurrentUnitOfWork,
            IPersistentLocalIdGenerator persistentLocalIdGenerator,
            Func <IStreamStore> getStreamStore,
            EventMapping eventMapping,
            EventSerializer eventSerializer,
            AddressProvenanceFactory addressProvenanceFactory,
            CrabAddressProvenanceFactory crabProvenanceFactory,
            AddressPersistentLocalIdentifierProvenanceFactory addressPersistentLocalIdentifierProvenanceFactory)
        {
            _getAddresses         = getAddresses;
            _concurrentUnitOfWork = concurrentUnitOfWork;
            _provenanceFactory    = crabProvenanceFactory.CreateFrom;
            _addressPersistentLocalIdProvenanceFactory = addressPersistentLocalIdentifierProvenanceFactory.CreateFrom;

            _addressCommandHandlerModule = new AddressCommandHandlerModule(
                _getAddresses,
                () => concurrentUnitOfWork,
                persistentLocalIdGenerator,
                getStreamStore,
                eventMapping,
                eventSerializer,
                addressProvenanceFactory,
                crabProvenanceFactory,
                addressPersistentLocalIdentifierProvenanceFactory);
        }
Beispiel #2
0
 public void RequestPersistentLocalId(IPersistentLocalIdGenerator persistentLocalIdGenerator)
 {
     if (_persistentLocalId == null)
     {
         AssignPersistentLocalId(persistentLocalIdGenerator.GenerateNextPersistentLocalId(), new PersistentLocalIdAssignmentDate(Instant.FromDateTimeOffset(DateTimeOffset.Now)));
     }
 }
Beispiel #3
0
 public void RequestPersistentLocalId(IPersistentLocalIdGenerator persistentLocalIdGenerator)
 {
     if (PersistentLocalId == null)
     {
         AssignPersistentLocalId(
             persistentLocalIdGenerator.GenerateNextPersistentLocalId(),
             new PersistentLocalIdAssignmentDate(Instant.FromDateTimeOffset(DateTimeOffset.Now))); // TODO: Refactor this to use IClock
     }
 }
        public async Task <IActionResult> Propose(
            [FromServices] IOptions <ResponseOptions> options,
            [FromServices] IdempotencyContext idempotencyContext,
            [FromServices] SyndicationContext syndicationContext,
            [FromServices] IPersistentLocalIdGenerator persistentLocalIdGenerator,
            [FromBody] StreetNameProposeRequest streetNameProposeRequest,
            CancellationToken cancellationToken = default)
        {
            try
            {
                //TODO REMOVE WHEN IMPLEMENTED
                return(new CreatedWithETagResult(new Uri(string.Format(options.Value.DetailUrl, "1")), "1"));

                //TODO real data please
                var fakeProvenanceData = new Provenance(
                    DateTime.UtcNow.ToInstant(),
                    Application.StreetNameRegistry,
                    new Reason(""),
                    new Operator(""),
                    Modification.Insert,
                    Organisation.DigitaalVlaanderen
                    );

                var identifier = streetNameProposeRequest.GemeenteId
                                 .AsIdentifier()
                                 .Map(IdentifierMappings.MunicipalityNisCode);

                var municipality = await syndicationContext.MunicipalityLatestItems
                                   .AsNoTracking()
                                   .SingleOrDefaultAsync(i =>
                                                         i.NisCode == identifier.Value, cancellationToken);

                var persistentLocalId = persistentLocalIdGenerator.GenerateNextPersistentLocalId();
                var cmd      = streetNameProposeRequest.ToCommand(new MunicipalityId(municipality.MunicipalityId), fakeProvenanceData, persistentLocalId);
                var position = await IdempotentCommandHandlerDispatch(idempotencyContext, cmd.CreateCommandId(), cmd, cancellationToken);

                return(new CreatedWithLastObservedPositionAsETagResult(new Uri(string.Format(options.Value.DetailUrl, persistentLocalId)), position.ToString(), Application.StreetNameRegistry.ToString()));
            }
            catch (IdempotencyException)
            {
                return(Accepted());
            }
        }
Beispiel #5
0
        public AddressCommandHandlerModule(
            Func <IAddresses> getAddresses,
            Func <ConcurrentUnitOfWork> getUnitOfWork,
            IPersistentLocalIdGenerator persistentLocalIdGenerator,
            Func <IStreamStore> getStreamStore,
            EventMapping eventMapping,
            EventSerializer eventSerializer,
            AddressProvenanceFactory addressProvenanceFactory,
            CrabAddressProvenanceFactory crabProvenanceFactory,
            AddressPersistentLocalIdentifierProvenanceFactory addressPersistentLocalIdentifierProvenanceFactory)
        {
            _persistentLocalIdGenerator = persistentLocalIdGenerator;

            For <RegisterAddress>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressProvenanceFactory)
            .Handle(async(message, ct) =>
            {
                var addressId = message.Command.AddressId;
                var addresses = getAddresses();

                var address = await addresses.GetOptionalAsync(addressId, ct);

                if (!address.HasValue)
                {
                    address = new Optional <Address>(
                        Address.Register(
                            addressId,
                            message.Command.StreetNameId,
                            message.Command.HouseNumber));     // TODO: Add BoxNumber

                    addresses.Add(addressId, address.Value);
                }

                address.Value.RequestPersistentLocalId(persistentLocalIdGenerator);
            });

            For <ImportHouseNumberFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberStatusFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberStatusFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberPositionFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberPositionFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberMailCantonFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberMailCantonFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberSubaddressFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberSubaddressFromCrab(getAddresses, message, ct));

            For <ImportSubaddressFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressFromCrab(getAddresses, message, ct));

            For <ImportSubaddressStatusFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressStatusFromCrab(getAddresses, message, ct));

            For <ImportSubaddressPositionFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressPositionFromCrab(getAddresses, message, ct));

            For <ImportSubaddressMailCantonFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, crabProvenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressMailCantonFromCrab(getAddresses, message, ct));

            For <AssignPersistentLocalIdForCrabHouseNumberId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressPersistentLocalIdentifierProvenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdForCrabHouseNumberId(getAddresses, message, ct));

            For <AssignPersistentLocalIdForCrabSubaddressId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressPersistentLocalIdentifierProvenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdForCrabSubaddressId(getAddresses, message, ct));

            For <RequestPersistentLocalIdForCrabHouseNumberId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressPersistentLocalIdentifierProvenanceFactory)
            .Handle(async(message, ct) => await RequestPersistentLocalIdForCrabHouseNumberId(getAddresses, message, ct));

            For <RequestPersistentLocalIdForCrabSubaddressId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressPersistentLocalIdentifierProvenanceFactory)
            .Handle(async(message, ct) => await RequestPersistentLocalIdForCrabSubaddressId(getAddresses, message, ct));

            For <AssignPersistentLocalIdToAddress>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, addressPersistentLocalIdentifierProvenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdToAddress(getAddresses, message, ct));
        }
        public AddressCommandHandlerModule(
            Func <IAddresses> getAddresses,
            Func <ConcurrentUnitOfWork> getUnitOfWork,
            IPersistentLocalIdGenerator persistentLocalIdGenerator,
            Func <IStreamStore> getStreamStore,
            EventMapping eventMapping,
            EventSerializer eventSerializer,
            AddressProvenanceFactory provenanceFactory)
        {
            _persistentLocalIdGenerator = persistentLocalIdGenerator;

            For <RegisterAddress>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle((message, ct) =>
            {
                var addressId = message.Command.AddressId;
                var address   = Address.Register(
                    addressId,
                    message.Command.StreetNameId,
                    message.Command.HouseNumber);

                var addresses = getAddresses();
                addresses.Add(addressId, address);

                return(Task.CompletedTask);
            });

            For <ImportHouseNumberFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberStatusFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberStatusFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberPositionFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberPositionFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberMailCantonFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberMailCantonFromCrab(getAddresses, message, ct));

            For <ImportHouseNumberSubaddressFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportHouseNumberSubaddressFromCrab(getAddresses, message, ct));

            For <ImportSubaddressFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressFromCrab(getAddresses, message, ct));

            For <ImportSubaddressStatusFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressStatusFromCrab(getAddresses, message, ct));

            For <ImportSubaddressPositionFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressPositionFromCrab(getAddresses, message, ct));

            For <ImportSubaddressMailCantonFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await ImportSubaddressMailCantonFromCrab(getAddresses, message, ct));

            For <AssignPersistentLocalIdForCrabHouseNumberId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            //.AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdForCrabHouseNumberId(getAddresses, message, ct));

            For <AssignPersistentLocalIdForCrabSubaddressId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            //.AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdForCrabSubaddressId(getAddresses, message, ct));

            For <RequestPersistentLocalIdForCrabHouseNumberId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            //.AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await RequestPersistentLocalIdForCrabHouseNumberId(getAddresses, message, ct));

            For <RequestPersistentLocalIdForCrabSubaddressId>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            //.AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await RequestPersistentLocalIdForCrabSubaddressId(getAddresses, message, ct));

            For <AssignPersistentLocalIdToAddress>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => await AssignPersistentLocalIdToAddress(getAddresses, message, ct));
        }