示例#1
0
        /// <summary>
        /// Loads table items from DynamoDb
        /// - Filter property is used to query against DynamoDb table
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IEnumerable <T> LoadTableItems <T>(LoadTableItemsRequest request)
        {
            //LambdaLogger.Log($"Entering: LoadTableItems({ JsonConvert.SerializeObject(request) }");

            var response = new List <T>();

            try
            {
                //SearchDocumentsRequest searchDocumentsRequest = CreateSearchDocumentsRequest(request);

                //var tableItems = DynamoDbHelper.SearchDocuments(searchDocumentsRequest);

                //TODOING: build conditions from request filter

                var tableItems = DynamoDbHelper.Scan <T>(request.Conditions);

                //TODO: Handle order by expression and record cap here

                //Use request to hit dynamodb
                //If has an id, then can use dynamodb GetItem, else need to query based on filter
                response = tableItems.ToList();
            }
            catch (Exception exp)
            {
                LambdaLogger.Log($"Error: { exp }");

                //LambdaLogger.Log($"Leaving: LoadTableItems({ JsonConvert.SerializeObject(response) }");
                return(response);
            }

            //LambdaLogger.Log($"Leaving: LoadTableItems({ JsonConvert.SerializeObject(response) }");
            return(response);
        }
示例#2
0
        //DONUT USE
        public UpsertTableItemResponse UpsertTableItems(UpsertTableItemsRequest request)
        {
            LambdaLogger.Log($"Entering: UpsertTableItems({ JsonConvert.SerializeObject(request) }");

            var response = new UpsertTableItemResponse
            {
                IsSuccess = true
            };

            try
            {
                //First scan table to see which documents already exist


                //Need dynamo db helper method to write
                DynamoDbHelper.BatchWriteDocuments(request.Table, request.Documents);

                //Because the batch save won't return because I don't wanna await that call
                response.Documents = request.Documents;
            }
            catch (Exception exp)
            {
                LambdaLogger.Log($"Error: { exp }");

                response.IsSuccess    = false;
                response.ErrorMessage = "Error while inserting table item.";

                LambdaLogger.Log($"Leaving: UpsertTableItems({ JsonConvert.SerializeObject(response) }");
                return(response);
            }

            LambdaLogger.Log($"Leaving: UpsertTableItems({ JsonConvert.SerializeObject(response) }");
            return(response);
        }
示例#3
0
        /// <summary>
        /// Loads table from DynamoDb
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public LoadTableResponse LoadTable(LoadTableRequest request)
        {
            LambdaLogger.Log($"Entering: LoadTable({ JsonConvert.SerializeObject(request) })");

            var response = new LoadTableResponse
            {
                IsSuccess = true
            };

            try
            {
                response.ResponseTable = DynamoDbHelper.GetTable(request.TableName);
            }
            catch (Exception exp)
            {
                LambdaLogger.Log($"Error: { exp }");

                response.IsSuccess    = false;
                response.ErrorMessage = "Error while loading table.";

                LambdaLogger.Log($"Leaving: LoadTable({ JsonConvert.SerializeObject(response) })");
                return(response);
            }

            LambdaLogger.Log($"Leaving: LoadTable({ JsonConvert.SerializeObject(response) })");
            return(response);
        }
示例#4
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            try
            {
                var tableKeys = DynamoDbHelper.GetTableKeys(Table);

                foreach (var document in DocumentList)
                {
                    InfoText += ResourceStrings.RemovingItem;
                    KeyText   = string.Empty;
                    foreach (var key in tableKeys)
                    {
                        KeyText += string.Format(ResourceStrings.KeyValuePairString, key.Key, document[key.Key].AsString());
                    }
                    InfoText += KeyText;
                    Table.DeleteItem(document);
                }
            }
            catch (Exception ex)
            {
                var errorExecuting = new ErrorRecord(ex, string.Format(ErrorStrings.ErrorRemovingDocument, KeyText), ErrorCategory.InvalidData, ex.Source);
                WriteError(errorExecuting);
            }
        }
示例#5
0
 private async Task InsertDataAsync(DataModel dataModel)
 {
     var dbHelper = new DynamoDbHelper();
     await dbHelper.Insert(new DbInsertItem
     {
         TableName = "datainfo",
         Values    = new Dictionary <string, object>
         {
             {
                 "id", Guid.NewGuid().ToString()
             },
             {
                 "filename", dataModel.FileName
             },
             {
                 "name", dataModel.Name
             },
             {
                 "email", dataModel.Email
             },
             {
                 "phone", dataModel.Phone
             },
             {
                 "time", DateTimeOffset.Now
             }
         }
     });
 }
示例#6
0
        public Card FindByName(string name, string manaCost)
        {
            LambdaLogger.Log($"Entering: FindByName({name})");

            //var cards = FindAll(string.Format("Name = {0}", name)).FirstOrDefault();
            var card = DynamoDbHelper.Load <Card>(name, manaCost);

            LambdaLogger.Log($"Leaving: FindByName({ JsonConvert.SerializeObject(card) })");

            return(card);
        }
示例#7
0
 public async Task DeleteTableItemsAsync <T>(IEnumerable <T> items)
 {
     try
     {
         await DynamoDbHelper.DeleteAsync <T>(items);
     }
     catch (Exception exp)
     {
         LambdaLogger.Log($"Error occured during DeleteTableItems({ JsonConvert.SerializeObject(items) })");
         throw;
     }
 }
 protected override void ProcessRecord()
 {
     base.ProcessRecord();
     try
     {
         DocumentList = DynamoDbHelper.GetDocumentListFromScan(Client, Request);
     }
     catch (Exception ex)
     {
         var errorExecuting = new ErrorRecord(ex, ErrorStrings.GatherDocumentListError, ErrorCategory.InvalidData, ex.Source);
         ThrowTerminatingError(errorExecuting);
     }
 }
示例#9
0
 protected override void BeginProcessing()
 {
     base.BeginProcessing();
     try
     {
         Table = DynamoDbHelper.GetTable(Client, TableName);
     }
     catch (Exception ex)
     {
         var errorExecuting = new ErrorRecord(ex, ErrorStrings.TableDoesNotExistError, ErrorCategory.InvalidData, ex.Source);
         ThrowTerminatingError(errorExecuting);
     }
 }
示例#10
0
        public void SaveTableItems <T>(IEnumerable <T> items)
        {
            //LambdaLogger.Log($"Entering: SaveTableItems({ JsonConvert.SerializeObject(items) }");

            try
            {
                DynamoDbHelper.Save <T>(items);
            }
            catch (Exception exp)
            {
                LambdaLogger.Log($"Error occurred during SaveTableItems({ JsonConvert.SerializeObject(items) }) - Exception: { exp }");
                throw;
            }

            //LambdaLogger.Log($"Leaving: SaveTableItems({ JsonConvert.SerializeObject(items) }");
        }
 protected override void BeginProcessing()
 {
     base.BeginProcessing();
     try
     {
         if (!string.IsNullOrWhiteSpace(FilterExpression) && Parameters == null)
         {
             throw new Exception(ErrorStrings.FilterExistsNoParameters);
         }
     }
     catch (Exception ex)
     {
         var errorExecuting = new ErrorRecord(ex, ErrorStrings.TableDoesNotExistError, ErrorCategory.InvalidData, ex.Source);
         ThrowTerminatingError(errorExecuting);
     }
     try
     {
         Table = DynamoDbHelper.GetTable(Client, TableName);
     }
     catch (Exception ex)
     {
         var errorExecuting = new ErrorRecord(ex, ErrorStrings.TableDoesNotExistError, ErrorCategory.InvalidData, ex.Source);
         ThrowTerminatingError(errorExecuting);
     }
     try
     {
         if (!string.IsNullOrWhiteSpace(FilterExpression) && (Parameters != null || Parameters.ParamterCount > 0))
         {
             Request = DynamoDbHelper.CreateScanRequest(TableName, FilterExpression, Parameters.ParameterDictionary);
         }
         else if (!string.IsNullOrWhiteSpace(FilterExpression) && (Parameters == null) || Parameters.ParamterCount == 0)
         {
             Request = DynamoDbHelper.CreateScanRequest(TableName, FilterExpression);
         }
         else
         {
             Request = DynamoDbHelper.CreateScanRequest(TableName);
         }
     }
     catch (Exception ex)
     {
         var errorExecuting = new ErrorRecord(ex, ErrorStrings.ScanRequestCreationError, ErrorCategory.InvalidData, ex.Source);
         ThrowTerminatingError(errorExecuting);
     }
 }
示例#12
0
        internal static IContainer ConfigureContainer(HttpConfiguration config)
        {
            var builder = new ContainerBuilder();

            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

            builder.RegisterWebApiFilterProvider(config);

            builder.RegisterType <Context>().As <IContext>().SingleInstance();

            builder.Register(c => new AmazonDynamoDBClient(DynamoDbHelper.ConfigureDynamoDb())).SingleInstance();

            builder.RegisterType <ReviewTable>().AsSelf();

            // TODO: configure different sinks for information and error and stuff in between
            Log.Logger = new LoggerConfiguration()
                         //.WriteTo.DynamoDB("Local-Log") // TODO: how do we configure this for local and different envs?
                         .WriteTo.Trace()
                         .MinimumLevel.Debug()
                         .CreateLogger();

            builder.Register(c => new GlobalExceptionFilter(c.Resolve <ILogger>()))
            .AsWebApiExceptionFilterFor <ApiController>().SingleInstance();    // should this be single instance, that is the default in web api...?

            builder.Register(c => new IntegrationTestFilter())
            .AsWebApiActionFilterFor <TestController>().SingleInstance();

            builder.Register(c => new RequestLogFilter(c.Resolve <ILogger>()))
            .AsWebApiActionFilterFor <ApiController>().SingleInstance(); // single instance or not?

            builder.RegisterLogger();

            var container = builder.Build();

            return(container);
        }
 public CategoriesEndpointTests(MoneyMateApiWebApplicationFactory factory)
 {
     _httpClient     = factory.CreateDefaultClient();
     _dynamoDbHelper = new DynamoDbHelper();
 }
示例#14
0
 public ServiceContext()
 {
     Repository    = new DaoFactory();
     DynamoContext = new DynamoDBContext(DynamoDbHelper.GetClient());
 }
 public AnalyticsEndpointTests(MoneyMateApiWebApplicationFactory factory)
 {
     HttpClient     = factory.CreateDefaultClient();
     DynamoDbHelper = new DynamoDbHelper();
 }