using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; using Amazon.Lambda.APIGatewayEvents; using Amazon.Lambda.Core; using Amazon.Lambda.RuntimeSupport; using Amazon.Lambda.Serialization.SystemTextJson; using Amazon.XRay.Recorder.Handlers.AwsSdk; using Shared; using Shared.DataAccess; namespace GetProducts; public class Function { static ProductsDAO dataAccess; static Function() { AWSSDKHandler.RegisterXRayForAllServices(); dataAccess = new DynamoDbProducts(); } /// /// The main entry point for the custom runtime. /// /// private static async Task Main() { Func> handler = FunctionHandler; await LambdaBootstrapBuilder.Create(handler, new SourceGeneratorLambdaJsonSerializer(options => { options.PropertyNameCaseInsensitive = true; })) .Build() .RunAsync(); } public static async Task FunctionHandler(APIGatewayHttpApiV2ProxyRequest apigProxyEvent, ILambdaContext context) { if (!apigProxyEvent.RequestContext.Http.Method.Equals(HttpMethod.Get.Method)) { return new APIGatewayHttpApiV2ProxyResponse { Body = "Only GET allowed", StatusCode = (int)HttpStatusCode.MethodNotAllowed, }; } context.Logger.LogInformation($"Received {apigProxyEvent}"); var products = await dataAccess.GetAllProducts(); context.Logger.LogInformation($"Found {products.Products.Count} product(s)"); return new APIGatewayHttpApiV2ProxyResponse { Body = JsonSerializer.Serialize(products, CustomJsonSerializerContext.Default.ProductWrapper), StatusCode = 200, Headers = new Dictionary {{"Content-Type", "application/json"}} }; } }