using System; using System.Collections.Generic; using System.Threading.Tasks; using Amazon.Lambda.Core; using Amazon.Lambda.APIGatewayEvents; using Amazon.Lambda.Annotations; using Amazon.Lambda.Annotations.APIGateway; using TestServerlessApp.Services; namespace TestServerlessApp { public class SimpleCalculator { private readonly ISimpleCalculatorService _simpleCalculatorService; /// /// Default constructor that Lambda will invoke. /// public SimpleCalculator(ISimpleCalculatorService simpleCalculatorService) { this._simpleCalculatorService = simpleCalculatorService; } [LambdaFunction(ResourceName = "SimpleCalculatorAdd", PackageType = LambdaPackageType.Image)] [RestApi(LambdaHttpMethod.Get, "/SimpleCalculator/Add")] public int Add([FromQuery]int x, [FromQuery]int y) { return _simpleCalculatorService.Add(x, y); } [LambdaFunction(ResourceName = "SimpleCalculatorSubtract", PackageType = LambdaPackageType.Image)] [RestApi(LambdaHttpMethod.Get, "/SimpleCalculator/Subtract")] public APIGatewayProxyResponse Subtract([FromHeader]int x, [FromHeader]int y, [FromServices]ISimpleCalculatorService simpleCalculatorService) { return new APIGatewayProxyResponse { StatusCode = 200, Body = simpleCalculatorService.Subtract(x, y).ToString() }; } [LambdaFunction(ResourceName = "SimpleCalculatorMultiply", PackageType = LambdaPackageType.Image)] [RestApi(LambdaHttpMethod.Get, "/SimpleCalculator/Multiply/{x}/{y}")] public string Multiply(int x, int y) { return _simpleCalculatorService.Multiply(x, y).ToString(); } [LambdaFunction(ResourceName = "SimpleCalculatorDivideAsync", PackageType = LambdaPackageType.Image)] [RestApi(template: "/SimpleCalculator/DivideAsync/{x}/{y}", method: LambdaHttpMethod.Get)] public async Task DivideAsync([FromRoute(Name = "x")]int first, [FromRoute(Name = "y")]int second) { return await Task.FromResult(_simpleCalculatorService.Divide(first, second)); } [LambdaFunction(ResourceName = "PI", PackageType = LambdaPackageType.Image)] public double Pi([FromServices]ISimpleCalculatorService simpleCalculatorService) { return simpleCalculatorService.PI(); } [LambdaFunction(ResourceName = "Random", PackageType = LambdaPackageType.Image)] public async Task Random(int maxValue, ILambdaContext context) { context.Logger.Log($"Max value: {maxValue}"); var value = new Random().Next(maxValue); return await Task.FromResult(value); } [LambdaFunction(ResourceName = "Randoms", PackageType = LambdaPackageType.Image)] public IList Randoms(RandomsInput input, ILambdaContext context) { context.Logger.Log($"Count: {input.Count}"); context.Logger.Log($"Max value: {input.MaxValue}"); var random = new Random(); var nums = new List(); for (int i = 0; i < input.Count; i++) { nums.Add(random.Next(input.MaxValue)); } return nums; } public class RandomsInput { public int Count { get; set; } public int MaxValue { get; set; } } } }