using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
namespace MoShiro.Backend.Api;
public static class EndpointConventions
{
/// 每个端点都必须有 operationId(snake_case,资源_动作)、summary 和 tag。
public static RouteHandlerBuilder Api(this RouteHandlerBuilder builder, string operationId, string summary, string tag) =>
builder.WithName(operationId).WithSummary(summary).WithTags(tag);
public static RouteHandlerBuilder Returns(this RouteHandlerBuilder builder, int status = StatusCodes.Status200OK) =>
builder.Produces(status);
/// 登记该端点可能返回的错误状态(problem+json),让 OpenAPI 文档完整。
public static RouteHandlerBuilder ProducesProblems(this RouteHandlerBuilder builder, params int[] statuses)
{
foreach (int status in statuses)
{
builder.Produces(status, Problems.ContentType);
}
return builder;
}
}