public async Task <Document?> Get(DocumentId id, CancellationToken token = default) { id.VerifyNotNull(nameof(id)); string zipFileName = id.ToZipFileName(); _logger.LogTrace($"Reading {zipFileName}"); byte[]? data = await _store.Read(zipFileName, token); if (data == null) { _logger.LogTrace($"File {zipFileName} not found"); return(null); } using var dataStream = new MemoryStream(data); using var zip = new ZipArchive(dataStream, ZipArchiveMode.Read, leaveOpen: true); byte[] defaultPackage = zip.Read(_defaultPath); Document?document = Json.Default.Deserialize <Document>(Encoding.UTF8.GetString(defaultPackage)); if (document == null) { _logger.LogWarning($"File {zipFileName} cannot be deserialize into {nameof(Document)}"); return(null); } _logger.LogTrace($"File {zipFileName} read and {nameof(Document)} returned"); return(document); }