Blame view
sources/RoboforkApp.AWS/DynamoDb/DynamoService.cs
3.58 KB
1debe12ff
|
1 2 3 4 |
using System.Collections.Generic; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DataModel; using RoboforkApp.AWS.Contracts; |
de8826297
|
5 |
using Amazon; |
1debe12ff
|
6 7 8 9 10 |
namespace RoboforkApp.AWS.DynamoDb { public class DynamoService : ITableDataService { |
de8826297
|
11 12 13 |
const string AWS_ACCESS_KEY = "AKIAI3CHRBBEA5I4WOMA"; const string AWS_SECRET_KEY = "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"; |
1debe12ff
|
14 15 16 17 18 |
public readonly DynamoDBContext DbContext; public AmazonDynamoDBClient DynamoClient; public DynamoService() { |
de8826297
|
19 |
DynamoClient = new AmazonDynamoDBClient(AWS_ACCESS_KEY, AWS_SECRET_KEY, RegionEndpoint.APNortheast1); |
1debe12ff
|
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
DbContext = new DynamoDBContext(DynamoClient, new DynamoDBContextConfig { //Setting the Consistent property to true ensures that you'll always get the latest ConsistentRead = true, SkipVersionCheck = true }); } /// <summary> /// The Store method allows you to save a POCO to DynamoDb /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> public void Store<T>(T item) where T : new() { DbContext.Save(item); } /// <summary> /// The BatchStore Method allows you to store a list of items of type T to dynamoDb /// </summary> /// <typeparam name="T"></typeparam> /// <param name="items"></param> public void BatchStore<T>(IEnumerable<T> items) where T : class { var itemBatch = DbContext.CreateBatchWrite<T>(); foreach (var item in items) { itemBatch.AddPutItem(item); } itemBatch.Execute(); } /// <summary> /// Uses the scan operator to retrieve all items in a table /// <remarks>[CAUTION] This operation can be very expensive if your table is large</remarks> /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public IEnumerable<T> GetAll<T>() where T : class { IEnumerable<T> items = DbContext.Scan<T>(); return items; } /// <summary> /// Retrieves an item based on a search key /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public T GetItem<T>(string key) where T : class { return DbContext.Load<T>(key); } /// <summary> /// Method Updates and existing item in the table /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> public void UpdateItem<T>(T item) where T : class { T savedItem = DbContext.Load(item); if (savedItem == null) { throw new AmazonDynamoDBException("The item does not exist in the Table"); } DbContext.Save(item); } /// <summary> /// Deletes an Item from the table. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> public void DeleteItem<T>(T item) { var savedItem = DbContext.Load(item); if (savedItem == null) { throw new AmazonDynamoDBException("The item does not exist in the Table"); } DbContext.Delete(item); } } } |