示例#1
0
    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);
    }