using Microsoft.Net.Http.Headers; public sealed record DocumentInput(string Body); public sealed record DocumentView(int Id,string Body,long Version); public sealed class ConditionalWriteProbe { private readonly object sync=new(); private TaskCompletionSource? release; private int entered; public bool Entered=>Volatile.Read(ref entered)==1; public void Arm() { lock(sync) { release=new(TaskCreationOptions.RunContinuationsAsynchronously); Volatile.Write(ref entered,0); } } public void Release() { lock(sync) release?.TrySetResult(true); } public Task PauseAsync(CancellationToken token) { lock(sync) { if(release is null)return Task.CompletedTask; Volatile.Write(ref entered,1); return release.Task.WaitAsync(token); } } } public static class HttpLabs { public static DocumentView Read(Store store) { using var c=store.Open(); using var command=Store.Command(c,"SELECT body,version FROM documents WHERE id=1"); using var row=command.ExecuteReader(); row.Read(); return new(1,row.GetString(0),row.GetInt64(1)); } public static EntityTagHeaderValue Tag(long version) => new("\"v"+version+"\""); public static void Map(WebApplication app) { app.MapGet("/documents/1",(HttpContext context,Store store)=> { var value=Read(store); var tag=Tag(value.Version); context.Response.GetTypedHeaders().ETag=tag; try { var candidates=context.Request.GetTypedHeaders().IfNoneMatch; if(candidates?.Any(candidate=>candidate.Tag.Value=="*" || candidate.Compare(tag,useStrongComparison:false))==true) return Results.StatusCode(304); } catch(FormatException) { return Results.BadRequest(new { error="Malformed conditional header" }); } return Results.Ok(value); }); app.MapPut("/documents/1",async (HttpContext context,DocumentInput input,Store store,ConditionalWriteProbe probe)=> { if(string.IsNullOrWhiteSpace(input.Body)||input.Body.Length>50) return Results.BadRequest(); IList? candidates; try { candidates=context.Request.GetTypedHeaders().IfMatch; } catch(FormatException) { return Results.BadRequest(); } if(candidates is null||candidates.Count==0) return Results.Problem(statusCode:428,title:"If-Match is required"); if(context.Request.Headers["X-Lab-Pause"]=="true")await probe.PauseAsync(context.RequestAborted); using var c=store.Open(); using var tx=c.BeginTransaction(); long current=Store.Number(c,"SELECT version FROM documents WHERE id=1",tx); bool any=candidates.Any(x=>x.Tag.Value=="*"); if(!any&&!candidates.Any(x=>x.Compare(Tag(current),useStrongComparison:true))) { tx.Rollback(); return Results.StatusCode(412); } using var update=Store.Command(c,"UPDATE documents SET body=$body,version=version+1 WHERE id=1 AND version=$version RETURNING version",tx,("$body",input.Body),("$version",current)); object? changed=update.ExecuteScalar(); if(changed is null) { tx.Rollback(); return Results.StatusCode(412); } long version=Convert.ToInt64(changed,System.Globalization.CultureInfo.InvariantCulture); tx.Commit(); context.Response.GetTypedHeaders().ETag=Tag(version); return Results.Ok(new DocumentView(1,input.Body,version)); }); app.MapPost("/lab/condition/arm",(ConditionalWriteProbe probe)=> { probe.Arm(); return Results.NoContent(); }); app.MapPost("/lab/condition/release",(ConditionalWriteProbe probe)=> { probe.Release(); return Results.NoContent(); }); app.MapGet("/lab/condition/evidence",(ConditionalWriteProbe probe)=>new { entered=probe.Entered }); app.MapGet("/api/v1/item",()=>Results.Ok(new { id=1,name="rune" })); app.MapGet("/api/v1/item-extra",()=>Results.Ok(new { id=1,name="rune",state="active" })); app.MapGet("/api/v2/item",()=>Results.Ok(new { id=1,displayName="rune",state="active" })); app.MapGet("/stream",async (HttpContext context,int? abortAfter,bool? fail)=> { if(abortAfter is not null&&abortAfter!=1) { context.Response.StatusCode=400; return; } context.Response.ContentType="application/x-ndjson"; for(int id=1;id<=2;id++) { await context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(new { type="item",id })+"\n",context.RequestAborted); await context.Response.Body.FlushAsync(context.RequestAborted); if(abortAfter==id) { context.Abort(); return; } if(fail==true&&id==1) { await context.Response.WriteAsync("{\"type\":\"error\",\"code\":\"controlled-failure\"}\n",context.RequestAborted); return; } } await context.Response.WriteAsync("{\"type\":\"complete\",\"count\":2}\n",context.RequestAborted); }); } }