public RoadNetworkChangesArchiveCommandModule(
            IBlobClient client,
            IStreamStore store,
            IRoadNetworkSnapshotReader snapshotReader,
            IZipArchiveValidator validator,
            IClock clock)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (store == null)
            {
                throw new ArgumentNullException(nameof(store));
            }
            if (validator == null)
            {
                throw new ArgumentNullException(nameof(validator));
            }
            if (clock == null)
            {
                throw new ArgumentNullException(nameof(clock));
            }

            For <Messages.UploadRoadNetworkChangesArchive>()
            .UseRoadRegistryContext(store, snapshotReader, EnrichEvent.WithTime(clock))
            .Handle(async(context, message, ct) =>
            {
                var archiveId   = new ArchiveId(message.Body.ArchiveId);
                var upload      = RoadNetworkChangesArchive.Upload(archiveId);
                var archiveBlob = await client.GetBlobAsync(new BlobName(archiveId), ct);
                using (var archiveBlobStream = await archiveBlob.OpenAsync(ct))
                    using (var archive = new ZipArchive(archiveBlobStream, ZipArchiveMode.Read, false))
                    {
                        upload.ValidateArchiveUsing(archive, validator);
                    }
                context.RoadNetworkChangesArchives.Add(upload);
            });
        }
示例#2
0
        public void ValidateArchiveUsing(ZipArchive archive, IZipArchiveValidator validator)
        {
            var problems = validator.Validate(archive);

            if (!problems.OfType <FileError>().Any())
            {
                Apply(
                    new RoadNetworkChangesArchiveAccepted
                {
                    ArchiveId = Id,
                    Problems  = problems.Select(problem => problem.Translate()).ToArray()
                });
            }
            else
            {
                Apply(
                    new RoadNetworkChangesArchiveRejected
                {
                    ArchiveId = Id,
                    Problems  = problems.Select(problem => problem.Translate()).ToArray()
                });
            }
        }