public MunicipalityCommandHandlerModule(
            Func <IMunicipalities> getMunicipalities,
            Func <ConcurrentUnitOfWork> getUnitOfWork,
            Func <IStreamStore> getStreamStore,
            EventMapping eventMapping,
            EventSerializer eventSerializer,
            StreetNameProvenanceFactory provenanceFactory)
        {
            For <ImportMunicipality>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) =>
            {
                var municipality = await getMunicipalities().GetOptionalAsync(message.Command.MunicipalityId, ct);

                if (municipality.HasValue)
                {
                    throw new AggregateSourceException($"Municipality with id {message.Command.MunicipalityId} already exists");
                }

                var newMunicipality = Municipality.Register(message.Command.MunicipalityId, message.Command.NisCode);

                getMunicipalities().Add(newMunicipality.MunicipalityId, newMunicipality);
            });

            For <ChangeMunicipalityNisCode>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) =>
            {
                var municipality = await getMunicipalities().GetAsync(message.Command.MunicipalityId, ct);
                municipality.ChangeNisCode(message.Command.NisCode);
            });

            For <SetMunicipalityToCurrent>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) =>
            {
                var municipality = await getMunicipalities().GetAsync(message.Command.MunicipalityId, ct);
                municipality.BecomeCurrent();
            });

            For <RetireMunicipality>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) =>
            {
                var municipality = await getMunicipalities().GetAsync(message.Command.MunicipalityId, ct);
                municipality.Retire();
            });
        }
 public StreetNameCommandHandlerModule(
     Func <IMunicipalities> getMunicipalities,
     Func <ConcurrentUnitOfWork> getUnitOfWork,
     Func <IStreamStore> getStreamStore,
     EventMapping eventMapping,
     EventSerializer eventSerializer,
     StreetNameProvenanceFactory provenanceFactory)
 {
     For <ProposeStreetName>()
     .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
     .AddProvenance(getUnitOfWork, provenanceFactory)
     .Handle(async(message, ct) =>
     {
         var municipality = await getMunicipalities().GetAsync(message.Command.MunicipalityId, ct);
         municipality.ProposeStreetName(message.Command.StreetNameNames, message.Command.PersistentLocalId);
     });
 }
Exemplo n.º 3
0
        public StreetNameCommandHandlerModule(
            Func <IStreetNames> getStreetNames,
            Func <ConcurrentUnitOfWork> getUnitOfWork,
            Func <IStreamStore> getStreamStore,
            EventMapping eventMapping,
            EventSerializer eventSerializer,
            StreetNameProvenanceFactory provenanceFactory)
        {
            For <ImportStreetNameFromCrab>()
            .AddSqlStreamStore(getStreamStore, getUnitOfWork, eventMapping, eventSerializer)
            .AddProvenance(getUnitOfWork, provenanceFactory)
            .Handle(async(message, ct) => { await ImportStreetNameFromCrab(getStreetNames, message, ct); });

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