using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace StellaOps.Provcache.Api; public static partial class ProvcacheEndpointExtensions { /// /// GET /v1/provcache/proofs/{proofRoot}/chunks/{chunkIndex} /// private static async Task GetSingleChunkAsync( string proofRoot, int chunkIndex, [FromServices] IEvidenceChunkRepository chunkRepository, ILogger logger, CancellationToken cancellationToken) { logger.LogDebug("GET /v1/provcache/proofs/{ProofRoot}/chunks/{ChunkIndex}", proofRoot, chunkIndex); try { var chunk = await chunkRepository.GetChunkAsync(proofRoot, chunkIndex, cancellationToken); if (chunk is null) { return Results.NotFound(); } return Results.Ok(new ProofChunkResponse { ChunkId = chunk.ChunkId, Index = chunk.ChunkIndex, Hash = chunk.ChunkHash, Size = chunk.BlobSize, ContentType = chunk.ContentType, Data = Convert.ToBase64String(chunk.Blob) }); } catch (Exception ex) { logger.LogError(ex, "Error getting chunk {ChunkIndex} for proof root {ProofRoot}", chunkIndex, proofRoot); return InternalError("Chunk retrieval failed"); } } }