/// <summary> /// A simple function that takes a string and does a ToUpper /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public async Task <APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { if (request.Resource.Contains("item")) { if (request.HttpMethod == "POST" && request.QueryStringParameters.ContainsKey("tableName")) { var obj = JsonConvert.DeserializeObject(request.Body); var data = JObject.FromObject(obj); var itemRepo = new ItemRepo(new AmazonDynamoDBClient()); try{ await itemRepo.AddNewItem(request.QueryStringParameters["tableName"], (JArray)data["item"]); return(new APIGatewayProxyResponse { StatusCode = 200 }); }catch {} } else if (request.HttpMethod == "PUT" && request.QueryStringParameters.ContainsKey("tableName")) { var obj = JsonConvert.DeserializeObject(request.Body); var data = JObject.FromObject(obj); var itemRepo = new ItemRepo(new AmazonDynamoDBClient()); try{ await itemRepo.UpdateItem(request.QueryStringParameters["tableName"], (JArray)data["item"]); return(new APIGatewayProxyResponse { StatusCode = 200 }); }catch {} } else if (request.HttpMethod == "DELETE" && request.QueryStringParameters.ContainsKey("tableName")) { var itemRepo = new ItemRepo(new AmazonDynamoDBClient()); try{ if (request.QueryStringParameters.ContainsKey("rangeKey")) { await itemRepo.RemoveItem(request.QueryStringParameters["tableName"], request.QueryStringParameters["hashKey"], request.QueryStringParameters["rangeKey"]); } else { await itemRepo.RemoveItem(request.QueryStringParameters["tableName"], request.QueryStringParameters["hashKey"], null); } return(await Task.FromResult(new APIGatewayProxyResponse { StatusCode = 200 })); }catch {} } else if (request.HttpMethod == "GET" && request.QueryStringParameters.ContainsKey("tableName") && request.QueryStringParameters.ContainsKey("hashKey")) { var itemRepo = new ItemRepo(new AmazonDynamoDBClient()); var item = new Document(); if (request.QueryStringParameters.ContainsKey("rangeKey") is true) { item = await itemRepo.GetItem(request.QueryStringParameters["tableName"], request.QueryStringParameters["hashKey"], request.QueryStringParameters["rangeKey"]); } else { item = await itemRepo.GetItem(request.QueryStringParameters["tableName"], request.QueryStringParameters["hashKey"], null); } return(new APIGatewayProxyResponse { StatusCode = 200, Body = JsonConvert.SerializeObject(item) }); } return(await Task.FromResult(new APIGatewayProxyResponse { StatusCode = 404 })); } if (request.HttpMethod == "GET" && request.Resource.Contains("getattr")) { var tableRepo = new TableRepo(new AmazonDynamoDBClient()); var attr = await tableRepo.GetTableAttr(request.QueryStringParameters["tableName"]); return(new APIGatewayProxyResponse { StatusCode = 200, Body = JsonConvert.SerializeObject(attr) }); } else if (request.HttpMethod == "GET" && request.Resource.Contains("gettable")) { var itemRepo = new ItemRepo(new AmazonDynamoDBClient()); var table = await itemRepo.GetItems(request.QueryStringParameters["tableName"]); return(new APIGatewayProxyResponse { StatusCode = 200, Body = JsonConvert.SerializeObject(table) }); } else if (request.HttpMethod == "GET") { var tableRepo = new TableRepo(new AmazonDynamoDBClient()); var tables = await tableRepo.GetTablesAsync(); return(new APIGatewayProxyResponse { StatusCode = 200, Body = JsonConvert.SerializeObject(tables) }); } else if (request.HttpMethod == "POST") { var table = JsonConvert.DeserializeObject <Dtos.CreateTableDto>(request.Body); if (table == null) { return new APIGatewayProxyResponse { StatusCode = 400 } } ; var tableRepo = new TableRepo(new AmazonDynamoDBClient()); if (await tableRepo.CreateTableAsync(table)) { return(new APIGatewayProxyResponse { StatusCode = 200, Body = "OK" }); } else { return(new APIGatewayProxyResponse { StatusCode = 400 }); } } else if (request.HttpMethod == "DELETE") { if (request.QueryStringParameters.ContainsKey("tableName")) { var tableName = request.QueryStringParameters["tableName"]; var tableRepo = new TableRepo(new AmazonDynamoDBClient()); if (await tableRepo.RemoveTableAsync(tableName)) { return(new APIGatewayProxyResponse { StatusCode = 200 }); } else { return(new APIGatewayProxyResponse { StatusCode = 400 }); } } return(new APIGatewayProxyResponse { StatusCode = 400 }); } return(await Task.FromResult(new APIGatewayProxyResponse { StatusCode = 404 })); } }