Forge
csharp3407750f
1using AgentForge.Abstractions;
2using AgentForge.Data;
3using AgentForge.Plugin.Releases.Pages;
4using AgentForge.Plugin.Sdk;
5using AgentForge.Plugin.View;
6using Microsoft.AspNetCore.Builder;
7using Microsoft.AspNetCore.Http;
8using Microsoft.Extensions.DependencyInjection;
9
10namespace AgentForge.Plugin.Releases;
11
12internal static class ForgeReleaseViewEndpoints
13{
14 internal static void Map(WebApplication app)
15 {
16 app.MapGet($"/view/repos/{ForgeRepoRouting.Pattern}/releases", RenderReleasesHome);
17 }
18
19 private static IResult RenderReleasesHome(
20 string name,
21 string? groupStack,
22 ForgeRepository repository,
23 HttpContext http)
24 {
25 var repo = ForgePluginEndpoints.RequireRepo(repository, name, http);
26 var grouping = http.RequestServices.GetService<IForgeReleaseListGrouping>();
27 var listBasePath = $"/view/repos/{ForgeRepoNames.ToUrlPath(repo.Name)}/releases";
28 var stack = grouping?.ParseGroupStack(groupStack) ?? [];
29 var context = new ForgeReleaseListViewContext(repo.Name, listBasePath, stack);
30 var releases = ForgeReleaseSource.List(repo.Name);
31 var body = ForgeReleaseListPage.Render(repo.Name, releases, grouping, context);
32 return ForgeViewPresenter.RepoPage($"Releases · {repo.Name}", repo, "releases", repository, body, http);
33 }
34}
35
View only · write via MCP/CIDE