aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Web
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-11-16 14:35:19 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-11-16 14:35:19 +0200
commit0ee81ef847af3702b3b37f94cc62e835f9294e55 (patch)
treee3cc6daea355c8cc7a5dbf48f5e0c594230d90fb /Software/Visual_Studio/Web
parent76b22e4d05cbd8d771f678e4b5adc2dc5159afa8 (diff)
downloadTango-0ee81ef847af3702b3b37f94cc62e835f9294e55.tar.gz
Tango-0ee81ef847af3702b3b37f94cc62e835f9294e55.zip
Working on DataStore WebAPI & CLI.
Diffstat (limited to 'Software/Visual_Studio/Web')
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Controllers/DataStoreController.cs150
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItem.cs26
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItemType.cs14
-rw-r--r--Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj13
4 files changed, 202 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DataStoreController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DataStoreController.cs
new file mode 100644
index 000000000..3deab9205
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DataStoreController.cs
@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Web.Http;
+using Tango.BL.Entities;
+using Tango.DataStore;
+using Tango.DataStore.EF;
+using Tango.MachineService.DataStore;
+using Tango.Web.Helpers;
+
+namespace Tango.MachineService.Controllers
+{
+ public class DataStoreController : ApiController
+ {
+ private IDataStoreManager _manager;
+
+ public DataStoreController()
+ {
+ _manager = new EFDataStoreManager();
+ }
+
+ public List<DataStoreWebItem> Get(String sn = null, String collection = null, String key = null)
+ {
+ try
+ {
+ using (var db = ObservablesContextHelper.CreateContext())
+ {
+ if (sn != null)
+ {
+ var machineGuid = db.Machines.Where(x => x.SerialNumber == sn).Select(x => x.Guid).FirstOrDefault();
+
+ if (machineGuid == null)
+ {
+ return ThrowException<List<DataStoreWebItem>>(new KeyNotFoundException(), HttpStatusCode.NotFound, "The specified machine serial number could not be found.");
+ }
+
+ var localItems = db.DataStoreItems.Where(x => x.MachineGuid == machineGuid && (collection == null || x.CollectionName == collection) && (key == null || x.Key == key)).ToList();
+ var globalItems = db.GlobalDataStoreItems.Where(x => (collection == null || x.CollectionName == collection) && (key == null || x.Key == key)).ToList();
+
+ List<DataStoreWebItem> finalList = new List<DataStoreWebItem>();
+
+ foreach (var localItem in localItems)
+ {
+ var globalItem = globalItems.FirstOrDefault(x => x.CollectionName == localItem.CollectionName && x.Key == localItem.Key);
+ finalList.Add(localItem.ToWebItem(globalItem));
+ globalItems.Remove(globalItem);
+ }
+
+ finalList.AddRange(globalItems.Select(x => x.ToWebItem()));
+
+ return finalList;
+ }
+ else
+ {
+ var globalItems = db.GlobalDataStoreItems.Where(x => (collection == null || x.CollectionName == collection) && (key == null || x.Key == key)).ToList();
+
+ var finalList = globalItems.Select(x => x.ToWebItem()).ToList();
+
+ return finalList;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ return ThrowException<List<DataStoreWebItem>>(ex, HttpStatusCode.InternalServerError, ex.FlattenMessage());
+ }
+ }
+
+ public void Post([FromBody]string value)
+ {
+
+ }
+
+ public void Put(int id, [FromBody]string value)
+ {
+
+ }
+
+ private T ThrowException<T>(Exception ex, HttpStatusCode code, String message = null)
+ {
+ throw new HttpResponseException(new HttpResponseMessage(code)
+ {
+ Content = new StringContent(message != null ? message : ex.Message),
+ ReasonPhrase = ex.FlattenMessage()
+ });
+ }
+ }
+
+ #region Extension Methods
+
+ public static class IDataStoreExtensions
+ {
+ public static DataStoreWebItem ToWebItem(this DataStoreItem item, GlobalDataStoreItem globalItem = null)
+ {
+ IDataStoreItem dsItem = item.ToDataStoreItem();
+ DataStoreWebItem webItem = new DataStoreWebItem();
+ webItem.Collection = item.CollectionName;
+ webItem.Type = globalItem != null ? DataStoreWebItemType.Overrides : DataStoreWebItemType.Local;
+ webItem.DataType = dsItem.Type;
+ webItem.Date = dsItem.Date;
+ webItem.Key = dsItem.Key;
+ webItem.LocalValue = dsItem.Value;
+
+ if (webItem.LocalValue is DataStoreProtoObject protoObject)
+ {
+ webItem.LocalValue = protoObject.Message;
+ webItem.ProtoMessageType = protoObject.MessageType;
+ }
+
+ if (globalItem != null)
+ {
+ var dsGlobalItem = globalItem.ToDataStoreItem();
+
+ webItem.GlobalValue = dsGlobalItem.Value;
+
+ if (webItem.GlobalValue is DataStoreProtoObject protoObjectGlobal)
+ {
+ webItem.GlobalValue = protoObjectGlobal.Message;
+ webItem.ProtoMessageType = protoObjectGlobal.MessageType;
+ }
+ }
+
+ return webItem;
+ }
+
+ public static DataStoreWebItem ToWebItem(this GlobalDataStoreItem item)
+ {
+ IDataStoreItem dsItem = item.ToDataStoreItem();
+ DataStoreWebItem webItem = new DataStoreWebItem();
+ webItem.Collection = item.CollectionName;
+ webItem.Type = DataStoreWebItemType.Global;
+ webItem.DataType = dsItem.Type;
+ webItem.Date = dsItem.Date;
+ webItem.Key = dsItem.Key;
+ webItem.GlobalValue = dsItem.Value;
+
+ if (webItem.GlobalValue is DataStoreProtoObject protoObject)
+ {
+ webItem.GlobalValue = protoObject.Message;
+ webItem.ProtoMessageType = protoObject.MessageType;
+ }
+
+ return webItem;
+ }
+ }
+
+ #endregion
+}
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItem.cs b/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItem.cs
new file mode 100644
index 000000000..ed8a8a385
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItem.cs
@@ -0,0 +1,26 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Tango.DataStore;
+using Tango.PMR.Common;
+
+namespace Tango.MachineService.DataStore
+{
+ public class DataStoreWebItem
+ {
+ public String Collection { get; set; }
+ [JsonConverter(typeof(StringEnumConverter))]
+ public DataStoreWebItemType Type { get; set; }
+ public DateTime Date { get; set; }
+ public String Key { get; set; }
+ [JsonConverter(typeof(StringEnumConverter))]
+ public DataType DataType { get; set; }
+ [JsonConverter(typeof(StringEnumConverter))]
+ public MessageType ProtoMessageType { get; set; }
+ public Object LocalValue { get; set; }
+ public Object GlobalValue { get; set; }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItemType.cs b/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItemType.cs
new file mode 100644
index 000000000..0ba8e1a5e
--- /dev/null
+++ b/Software/Visual_Studio/Web/Tango.MachineService/DataStore/DataStoreWebItemType.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+
+namespace Tango.MachineService.DataStore
+{
+ public enum DataStoreWebItemType
+ {
+ Local,
+ Global,
+ Overrides
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj
index c662b1e87..bc60327ba 100644
--- a/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj
+++ b/Software/Visual_Studio/Web/Tango.MachineService/Tango.MachineService.csproj
@@ -316,11 +316,14 @@
</Compile>
<Compile Include="App_Start\BundleConfig.cs" />
<Compile Include="App_Start\FilterConfig.cs" />
+ <Compile Include="Controllers\DataStoreController.cs" />
<Compile Include="Controllers\FSEAccountController.cs" />
<Compile Include="Controllers\FSEDownloadsController.cs" />
<Compile Include="Controllers\DownloadsController.cs" />
<Compile Include="Controllers\AccountController.cs" />
<Compile Include="Controllers\FSEController.cs" />
+ <Compile Include="DataStore\DataStoreWebItem.cs" />
+ <Compile Include="DataStore\DataStoreWebItemType.cs" />
<Compile Include="Filters\JwtTokenFilter.cs" />
<Compile Include="Hubs\ExternalBridgeHub.cs" />
<Compile Include="MachineServiceConfig.cs" />
@@ -402,6 +405,14 @@
</Content>
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore.EF\Tango.DataStore.EF.csproj">
+ <Project>{88d9906b-8fc4-4fe0-b7eb-127a0a8fcee4}</Project>
+ <Name>Tango.DataStore.EF</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore\Tango.DataStore.csproj">
+ <Project>{e0364dfa-0721-4637-9d32-9d22aac109d6}</Project>
+ <Name>Tango.DataStore</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\FSE\Tango.FSE.Web\Tango.FSE.Web.csproj">
<Project>{d6f7d31d-7f8c-45e2-ae0a-fbbd1f5f9d5f}</Project>
<Name>Tango.FSE.Web</Name>
@@ -490,7 +501,7 @@
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">