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); }); }
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() }); } }