|
1 | 1 | using Azure.Identity; |
| 2 | +using UrlShortener.Api; |
| 3 | +using UrlShortener.Api.Extensions; |
| 4 | +using UrlShortener.Core.Urls.Add; |
2 | 5 |
|
3 | 6 | var builder = WebApplication.CreateBuilder(args); |
4 | 7 |
|
|
10 | 13 | new DefaultAzureCredential()); |
11 | 14 | } |
12 | 15 |
|
| 16 | +builder.Services.AddSingleton(TimeProvider.System) |
| 17 | + .AddSingleton<IEnvironmentManager, EnvironmentManager>(); |
| 18 | +builder.Services |
| 19 | + .AddUrlFeature(); |
| 20 | + |
| 21 | +builder.Services.AddHttpClient("TokenRangeService", |
| 22 | + client => |
| 23 | + { |
| 24 | + client.BaseAddress = |
| 25 | + new Uri(builder.Configuration["TokenRangeService:Endpoint"]!); // TODO: Add to bicep |
| 26 | + }); |
| 27 | + |
| 28 | +builder.Services.AddSingleton<ITokenRangeApiClient, TokenRangeApiClient>(); |
| 29 | +builder.Services.AddHostedService<TokenManager>(); |
| 30 | + |
13 | 31 | builder.Services.AddOpenApi(); |
14 | 32 |
|
15 | 33 | var app = builder.Build(); |
|
21 | 39 |
|
22 | 40 | app.UseHttpsRedirection(); |
23 | 41 |
|
24 | | -var summaries = new[] |
25 | | -{ |
26 | | - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" |
27 | | -}; |
28 | | - |
29 | | -app.MapGet("/weatherforecast", () => |
30 | | -{ |
31 | | - var forecast = Enumerable.Range(1, 5).Select(index => |
32 | | - new WeatherForecast |
33 | | - ( |
34 | | - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), |
35 | | - Random.Shared.Next(-20, 55), |
36 | | - summaries[Random.Shared.Next(summaries.Length)] |
37 | | - )) |
38 | | - .ToArray(); |
39 | | - return forecast; |
40 | | -}) |
41 | | -.WithName("GetWeatherForecast"); |
| 42 | +app.MapPost("/api/urls", |
| 43 | + async (AddUrlHandler handler, |
| 44 | + AddUrlRequest request, |
| 45 | + CancellationToken cancellationToken) => |
| 46 | + { |
| 47 | + var requestWithUser = request with |
| 48 | + { |
| 49 | + CreatedBy = "alnuaimi.me" |
| 50 | + }; |
| 51 | + var result = await handler.HandleAsync(requestWithUser, cancellationToken); |
| 52 | + |
| 53 | + if (!result.Succeeded) |
| 54 | + { |
| 55 | + return Results.BadRequest(result.Error); |
| 56 | + } |
| 57 | + |
| 58 | + return Results.Created($"/api/urls/{result.Value!.ShortUrl}", |
| 59 | + result.Value); |
| 60 | + }); |
42 | 61 |
|
43 | 62 | app.Run(); |
44 | | - |
45 | | -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) |
46 | | -{ |
47 | | - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |
48 | | -} |
|
0 commit comments