// Note: repository implementation removed for workshop exercise (TODOs in project files) using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); // Add services builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(o => { o.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "CampusWorkshops API", Version = "v1", Description = "API para gestão de workshops do campus (MVP in-memory)." }); }); // DI var app = builder.Build(); // Exception handler that returns RFC7807 ProblemDetails for unhandled errors app.UseExceptionHandler(errApp => { errApp.Run(async context => { var feature = context.Features.Get(); var ex = feature?.Error; var pd = new ProblemDetails { Title = "An unexpected error occurred.", Status = StatusCodes.Status500InternalServerError, Detail = app.Environment.IsDevelopment() ? ex?.Message : null }; context.Response.StatusCode = pd.Status.Value; context.Response.ContentType = "application/problem+json"; await context.Response.WriteAsJsonAsync(pd); }); }); app.UseHttpsRedirection(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "CampusWorkshops API v1"); c.RoutePrefix = "swagger"; // serve at /swagger }); app.MapControllers(); app.Run();