public static OpenApiDocument GetAsaphOpenApiDocument( IConfiguration configuration, ClaimsPrincipal requester) { // Get Azure AD B2C configuration IConfiguration azureAdb2cConfiguration = configuration.GetSection("AzureAdb2c"); // Get Swagger UI configuration IConfiguration swaggerUIConfiguration = configuration.GetSection("SwaggerUI"); // Return the OpenApiDocument for the Asaph API return(new OpenApiDocument { Info = new OpenApiInfo { Title = "Asaph API", Version = "1.0.0", }, SecurityRequirements = GetOpenApiSecurityRequirements(swaggerUIConfiguration), Paths = new OpenApiPaths { ["/song-directors"] = SongDirectorApiModel.GetOpenApiPath(requester), }, Components = new OpenApiComponents { Schemas = new Dictionary <string, OpenApiSchema> { ["SongDirector"] = SongDirectorApiModel.GetJsonSchema(requester), }, SecuritySchemes = new Dictionary <string, OpenApiSecurityScheme> { ["oauth2"] = new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows() { Implicit = new OpenApiOAuthFlow() { AuthorizationUrl = GetAuthorizationUrl(azureAdb2cConfiguration), // Colons aren't allowed in config keys, so scopes keys and values // are swapped. This swaps them back. Scopes = swaggerUIConfiguration .GetSection("Scopes") .GetChildren() .ToDictionary(kv => kv.Value, kv => kv.Key), TokenUrl = GetTokenUrl(azureAdb2cConfiguration), }, }, }, }, }, }); }
/// <inheritdoc/> public IResult SongDirectorAdded(AddSongDirectorResponse response) { // Validate song director id if (response.AddedSongDirector?.Id == null) { throw new ArgumentException("Id must be set for an added song director."); } // Get the URL for the added song director string addedSongDirectorUrl = new Uri( ResourceBaseUri, response.AddedSongDirector.Id) .ToString(); // Create a response object for the added song director SongDirectorApiModel addSongDirectorResponse = SongDirectorApiModel .AddedSongDirector(addedSongDirectorUrl); // Return the IActionResult representing the add return(Results.Created(addedSongDirectorUrl, addSongDirectorResponse)); }
/// <inheritdoc/> public IResult Success(GetSongDirectorsResponse response) { if (response.SongDirectors == null) { throw new ArgumentException("Song directors must be set for a successful Get" + "Song Directors response."); } // Convert use case models to API models IEnumerable <SongDirectorApiModel> songDirectorApiModels = response.SongDirectors .Select(useCaseModel => SongDirectorApiModel .RetrievedSongDirector( HydraContext, new Uri(ResourceBaseUri, useCaseModel.Id), useCaseModel)); return(Results.Ok(songDirectorApiModels)); }