diff --git a/src/Hyperledger.Aries/AskarStore/DefaultStorageRecordService.cs b/src/Hyperledger.Aries/AskarStore/DefaultStorageRecordService.cs new file mode 100644 index 00000000..1f0c869e --- /dev/null +++ b/src/Hyperledger.Aries/AskarStore/DefaultStorageRecordService.cs @@ -0,0 +1,81 @@ +using aries_askar_dotnet.AriesAskar; +using aries_askar_dotnet.Models; +using Hyperledger.Aries.AskarStore.Models; +using Hyperledger.Aries.Extensions; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace Hyperledger.Aries.AskarStore +{ + public class DefaultStorageRecordService : IStorageRecordService + { + private readonly JsonSerializerSettings _jsonSettings; + public async Task CreateSession(Store store) + { + Session session = store.CreateSession(); + await session.StartAsync(); + return session; + } + public async Task AddRecord(Store store, StorageRecord record) + { + Session session = await CreateSession(store); + return await session.InsertAsync(record.Type, record.Id, record.Value, record.Tags); + } + + public async Task FindRecord(Store store, StorageRecord record, string tag_query, long limit, bool for_update = false) + { + Session session = await CreateSession(store); + var items = await session.FetchAllAsync(record.Type, tag_query, limit, for_update); + var row = JArray.Parse(items.ToJson())[0].ToObject(); + return new StorageRecord + { + Id = row.Id, + Type = row.Type, + Value = row.Value, + Tags = row.Tags + }; + } + + public async Task GetRecord(Store store, string recordType, string recordId, bool for_update = false) + { + Session session = await CreateSession(store); + var item = await session.FetchAsync(recordType, recordId, for_update); + var record = JsonConvert.DeserializeObject(item.ToJson(), _jsonSettings); + return new StorageRecord + { + Id = record.Id, + Type = record.Type, + Value = record.Value, + Tags = record.Tags + }; + } + + public async Task RemoveRecord(Store store, StorageRecord record) + { + Session session = await CreateSession(store); + return await session.RemoveAsync(record.Type, record.Id); + } + + public async Task UpdateRecord(Store store, StorageRecord record, string value, string tags) + { + Session session = await CreateSession(store); + return await session.ReplaceAsync(record.Type, record.Id, value, tags); + } + + public async Task> FindAllRecord(Store store, StorageRecord record, string tag_query, long limit, bool for_update = false) + { + Session session = await CreateSession(store); + var items = await session.FetchAllAsync(record.Type, tag_query, limit, for_update); + var rows = JsonConvert.DeserializeObject>(items.ToJson()); + var results = new List(); + foreach (StorageRecord row in rows) { + results.Add(row); + } + return results; + } + } +} diff --git a/src/Hyperledger.Aries/AskarStore/DefaultStoreService.cs b/src/Hyperledger.Aries/AskarStore/DefaultStorageService.cs similarity index 94% rename from src/Hyperledger.Aries/AskarStore/DefaultStoreService.cs rename to src/Hyperledger.Aries/AskarStore/DefaultStorageService.cs index 9a3a2cdc..5407b4e0 100644 --- a/src/Hyperledger.Aries/AskarStore/DefaultStoreService.cs +++ b/src/Hyperledger.Aries/AskarStore/DefaultStorageService.cs @@ -7,7 +7,7 @@ namespace Hyperledger.Aries.AskarStore { - public class DefaultStoreService : IStoreService + public class DefaultStorageService : IStorageService { public Task GenerateRawKeyAsync(string Seed = null) { diff --git a/src/Hyperledger.Aries/AskarStore/IStorageRecordService.cs b/src/Hyperledger.Aries/AskarStore/IStorageRecordService.cs new file mode 100644 index 00000000..7f365634 --- /dev/null +++ b/src/Hyperledger.Aries/AskarStore/IStorageRecordService.cs @@ -0,0 +1,19 @@ +using aries_askar_dotnet.Models; +using Hyperledger.Aries.AskarStore.Models; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace Hyperledger.Aries.AskarStore +{ + public interface IStorageRecordService + { + Task AddRecord(Store store, StorageRecord record); + Task UpdateRecord(Store store, StorageRecord record, string value, string tags); + Task RemoveRecord(Store store, StorageRecord record); + Task GetRecord(Store store, string recordType, string recordId, bool for_update = false); + Task FindRecord(Store store, StorageRecord record, string tag_query, long limit, bool for_update = false); + Task> FindAllRecord(Store store, StorageRecord record, string tag_query, long limit, bool for_update = false); + } +} diff --git a/src/Hyperledger.Aries/AskarStore/IStoreService.cs b/src/Hyperledger.Aries/AskarStore/IStorageService.cs similarity index 90% rename from src/Hyperledger.Aries/AskarStore/IStoreService.cs rename to src/Hyperledger.Aries/AskarStore/IStorageService.cs index 0ec61c4a..ca2b1747 100644 --- a/src/Hyperledger.Aries/AskarStore/IStoreService.cs +++ b/src/Hyperledger.Aries/AskarStore/IStorageService.cs @@ -6,7 +6,7 @@ namespace Hyperledger.Aries.AskarStore { - public interface IStoreService + public interface IStorageService { Task RemoveStoreAsync(Store store); Task OpenStore(Store store, bool provision =false); diff --git a/src/Hyperledger.Aries/AskarStore/Models/StorageRecord.cs b/src/Hyperledger.Aries/AskarStore/Models/StorageRecord.cs new file mode 100644 index 00000000..89cfdb67 --- /dev/null +++ b/src/Hyperledger.Aries/AskarStore/Models/StorageRecord.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Hyperledger.Aries.AskarStore.Models +{ + public class StorageRecord + { + public string Id { get; set; } + public string Value { get; set; } + public string Type { get; set; } + public string Tags { get; set; } + } +}