diff --git a/DigitalTwins-CodeFirst-dotnet.sln b/DigitalTwins-CodeFirst-dotnet.sln index 1eb76ec..9ad69d2 100644 --- a/DigitalTwins-CodeFirst-dotnet.sln +++ b/DigitalTwins-CodeFirst-dotnet.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 16.0.30114.105 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telstra.Twins", "Telstra.Twins\Telstra.Twins.csproj", "{C1F33CDE-6D9F-4533-97DA-4168525D48B7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telstra.Twins.Common", "Telstra.Twins.Common\Telstra.Twins.Common.csproj", "{0B3217F0-CF2D-479B-ADB9-3FB58A1845DE}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{D8068994-FDA6-41F1-9196-59AADA892F11}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telstra.Twins.Test", "Tests\Telstra.Twins.Test\Telstra.Twins.Test.csproj", "{4E5BF74D-C0EF-4D13-872C-F40FC347AD67}" diff --git a/Telstra.Twins.Common/Telstra.Twins.Common.csproj b/Telstra.Twins.Common/Telstra.Twins.Common.csproj deleted file mode 100644 index 4b3c2a1..0000000 --- a/Telstra.Twins.Common/Telstra.Twins.Common.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - netcoreapp3.1 - false - 1.0.1 - Telstra ADT Team - Telstra - Digital Twins Common - - - - - - - diff --git a/Telstra.Twins/Attributes/DigitalTwinAttribute.cs b/Telstra.Twins/Attributes/DigitalTwinAttribute.cs index 48cdf65..ed820c2 100644 --- a/Telstra.Twins/Attributes/DigitalTwinAttribute.cs +++ b/Telstra.Twins/Attributes/DigitalTwinAttribute.cs @@ -1,7 +1,5 @@ #nullable enable using System; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; // ReSharper disable InconsistentNaming namespace Telstra.Twins.Attributes @@ -43,29 +41,11 @@ public string GetFullModelId(Type t) /// The new parent model Id. public string? ExtendsModelId { get; set; } - /// - /// Gets or sets the of the . - /// - /// The of the . - public Type? NamingStrategyType - { - get => _namingStrategyType; - set - { - _namingStrategyType = value; - NamingStrategyInstance = null; - } - } - - private Type? _namingStrategyType; - internal NamingStrategy? NamingStrategyInstance { get; set; } - /// /// Initializes a new instance of the class. /// public DigitalTwinAttribute() { - NamingStrategyType = typeof(CamelCaseNamingStrategy); } } } diff --git a/Telstra.Twins.Common/AttributeCache.cs b/Telstra.Twins/Common/AttributeCache.cs similarity index 100% rename from Telstra.Twins.Common/AttributeCache.cs rename to Telstra.Twins/Common/AttributeCache.cs diff --git a/Telstra.Twins.Common/Guard.cs b/Telstra.Twins/Common/Guard.cs similarity index 100% rename from Telstra.Twins.Common/Guard.cs rename to Telstra.Twins/Common/Guard.cs diff --git a/Telstra.Twins.Common/StringHelpers.cs b/Telstra.Twins/Common/StringHelpers.cs similarity index 100% rename from Telstra.Twins.Common/StringHelpers.cs rename to Telstra.Twins/Common/StringHelpers.cs diff --git a/Telstra.Twins.Common/ThreadSafeList.cs b/Telstra.Twins/Common/ThreadSafeList.cs similarity index 100% rename from Telstra.Twins.Common/ThreadSafeList.cs rename to Telstra.Twins/Common/ThreadSafeList.cs diff --git a/Telstra.Twins/Core/ContextJsonConverter.cs b/Telstra.Twins/Core/ContextJsonConverter.cs deleted file mode 100644 index 7524e0a..0000000 --- a/Telstra.Twins/Core/ContextJsonConverter.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Telstra.Twins.Core -{ - /// - /// Converts a object to and from JSON. - /// - /// - public class ContextJsonConverter : JsonConverter - { - /// - public override Context ReadJson(JsonReader reader, Type objectType, Context existingValue, bool hasExistingValue, JsonSerializer serializer) - { - if (reader is null) - { - throw new ArgumentNullException(nameof(reader)); - } - - if (objectType is null) - { - throw new ArgumentNullException(nameof(objectType)); - } - - if (serializer is null) - { - throw new ArgumentNullException(nameof(serializer)); - } - - var context = hasExistingValue ? existingValue : new Context(); - - string name; - string language; - if (reader.TokenType == JsonToken.String) - { - name = (string)reader.Value; - language = null; - } - else - { - var o = JObject.Load(reader); - - var nameProperty = o.Property("name", StringComparison.OrdinalIgnoreCase); - name = nameProperty?.Value?.ToString() ?? "http://schema.org"; - - var languageProperty = o.Property("@language", StringComparison.OrdinalIgnoreCase); - language = languageProperty?.Value?.ToString(); - } - -#pragma warning disable CA1062 // Validate arguments of public methods - context.Name = name; -#pragma warning restore CA1062 // Validate arguments of public methods - context.Language = language; - return context; - } - - /// - public override void WriteJson(JsonWriter writer, Context value, JsonSerializer serializer) - { - if (writer is null) - { - throw new ArgumentNullException(nameof(writer)); - } - - if (value is null) - { - throw new ArgumentNullException(nameof(value)); - } - - if (serializer is null) - { - throw new ArgumentNullException(nameof(serializer)); - } - - if (string.IsNullOrWhiteSpace(value.Language)) - { - writer.WriteValue(value.Name); - } - else - { - writer.WriteStartObject(); - writer.WritePropertyName("name"); - writer.WriteValue(value.Name); - writer.WritePropertyName("@language"); - writer.WriteValue(value.Language); - writer.WriteEndObject(); - } - } - } -} \ No newline at end of file diff --git a/Telstra.Twins/DeviceTwin.cs b/Telstra.Twins/DeviceTwin.cs deleted file mode 100644 index 99e1044..0000000 --- a/Telstra.Twins/DeviceTwin.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Runtime.Serialization; -using Telstra.Twins.Attributes; -using Telstra.Twins.Models; - -namespace Telstra.Twins -{ - [DigitalTwin(Version = 1, DisplayName = "Telstra Device")] - public class Device : TwinBase - { - [TwinProperty] - public string VendorId { get; set; } - [TwinProperty] - public string DeviceId { get; set; } - } -} diff --git a/Telstra.Twins/DigitalTwinsClient.cs b/Telstra.Twins/DigitalTwinsClient.cs deleted file mode 100644 index ab4fadb..0000000 --- a/Telstra.Twins/DigitalTwinsClient.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Telstra.Twins -{ - // Exploring this approach - //public class DigitalTwinsClientFactory - //{ - // public DigitalTwin GetTwin(string json) => new DigitalTwin(json); - // public T GetTwin(string json) => (T)Activator.CreateInstance(typeof(T), new object[] { json }); - //} -} diff --git a/Telstra.Twins/EventRouteInfo.cs b/Telstra.Twins/EventRouteInfo.cs deleted file mode 100644 index 743bd61..0000000 --- a/Telstra.Twins/EventRouteInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Telstra.Twins -{ - public sealed class EventRouteInfo - { - public string Id { get; set; } = Guid.NewGuid().ToString(); - - public string RouteName { get; set; } - - public string EndPointName { get; set; } - - public string Filter { get; set; } - - } - -} diff --git a/Telstra.Twins/GenericTwin.cs b/Telstra.Twins/GenericTwin.cs index 1c8f17b..317b6f9 100644 --- a/Telstra.Twins/GenericTwin.cs +++ b/Telstra.Twins/GenericTwin.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; -using Newtonsoft.Json; +using System.Collections.Generic; using System.Text.Json; -using System.Runtime.Serialization; using System.Text.Json.Serialization; using Telstra.Twins.Attributes; @@ -13,7 +10,6 @@ public class GenericTwin : TwinBase { [TwinOnlyProperty] [JsonPropertyName("Contents")] - [JsonProperty("Contents")] [System.Text.Json.Serialization.JsonExtensionData] public IDictionary Contents { get; set; } = new Dictionary(); } diff --git a/Telstra.Twins/Helpers/JsonHelpers.cs b/Telstra.Twins/Helpers/JsonHelpers.cs index 533d3e3..c4012ac 100644 --- a/Telstra.Twins/Helpers/JsonHelpers.cs +++ b/Telstra.Twins/Helpers/JsonHelpers.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Linq; namespace Telstra.Twins.Helpers { diff --git a/Telstra.Twins/Helpers/ReflectionHelpers.cs b/Telstra.Twins/Helpers/ReflectionHelpers.cs index 57f459c..80728fd 100644 --- a/Telstra.Twins/Helpers/ReflectionHelpers.cs +++ b/Telstra.Twins/Helpers/ReflectionHelpers.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection; @@ -152,11 +151,6 @@ public static string GetTwinPropertyName(this PropertyInfo p) var customAttribute = p.GetCustomAttribute(); twinPropertyName = customAttribute?.Name; } - else if (Attribute.IsDefined(p, typeof(JsonPropertyAttribute))) - { - var customAttribute = p.GetCustomAttribute(); - twinPropertyName = customAttribute?.PropertyName; - } return twinPropertyName ?? p.Name.ToCamelCase(); } @@ -172,8 +166,8 @@ public static string GetModelPropertyName(this PropertyInfo p) } else if (Attribute.IsDefined(p, typeof(TwinPropertyAttribute))) { - var modelOnlyPropertyAttribute = p.GetCustomAttribute(); - modelPropertyName = modelOnlyPropertyAttribute?.PropertyName; + var modelOnlyPropertyAttribute = p.GetCustomAttribute(); + modelPropertyName = modelOnlyPropertyAttribute?.Name; } return modelPropertyName; @@ -187,11 +181,6 @@ public static string GetJsonPropertyName(this PropertyInfo p) { var jsonNameAttribute = p.GetCustomAttribute(); jsonPropertyName = jsonNameAttribute?.Name; - } - else if (Attribute.IsDefined(p, typeof(JsonPropertyAttribute))) - { - var jsonNameAttribute = p.GetCustomAttribute(); - jsonPropertyName = jsonNameAttribute?.PropertyName; } return jsonPropertyName; diff --git a/Telstra.Twins/ITwinsClient.cs b/Telstra.Twins/ITwinsClient.cs deleted file mode 100644 index 70d67b5..0000000 --- a/Telstra.Twins/ITwinsClient.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Azure; -using Azure.DigitalTwins.Core; -using Telstra.Twins.Responses; - -namespace Telstra.Twins -{ - public interface ITwinsClient - { - TwinsResponse> Query(string twinId, CancellationToken cancellationToken = default); - Task>> QueryAsync(string twinId, CancellationToken cancellationToken = default); - - #region Twins - Task> CreateTwinAsync(TwinBase twin, ETag? etag = null, CancellationToken cancellationToken = default); - TwinsResponse CreateTwin(TwinBase twin, ETag? etag = null, CancellationToken cancellationToken = default); - Task> GetTwinAsync(string twinId, CancellationToken cancellationToken = default); - TwinsResponse GetTwin(string twinId, CancellationToken cancellationToken = default); - Task UpdateTwinAsync(string twinId, JsonPatchDocument patch, ETag? etag = null, CancellationToken cancellationToken = default); - TwinsResponse UpdateTwin(string twinId, JsonPatchDocument patch, ETag? etag = null, CancellationToken cancellationToken = default); - Task DeleteTwinAsync(string twinId, ETag? etag = null, CancellationToken cancellationToken = default); - TwinsResponse DeleteTwin(string twinId, ETag? etag = null, CancellationToken cancellationToken = default); - #endregion // Twins - - Task> CreateRelationshipAsync(string sourceId, string targetId, string relationshipName, CancellationToken cancellationToken = default); - TwinsResponse DeleteRelationship(string twinId, string relationshipId, CancellationToken cancellationToken = default); - Task DeleteRelationshipAsync(string twinId, string relationshipId, CancellationToken cancellationToken = default); - TwinsResponse> GetRelationships(string twinId, string relationshipName, CancellationToken cancellationToken = default); - Task>> GetRelationshipsAsync(string twinId, string relationshipName, CancellationToken cancellationToken = default); - //Pageable GetIncomingRelationships(string twinId, CancellationToken cancellationToken = default); - //Task>> GetIncomingRelationshipsAsync(string twinId, CancellationToken cancellationToken = default); - - Task> CreateModelsAsync(List modelDTDL, CancellationToken cancellationToken = default); - TwinsResponse CreateModels(List modelDTDL, CancellationToken cancellationToken = default); - Task>> GetModelsAsync(List modelID, bool includeModelDefinitions, CancellationToken cancellationToken = default); - TwinsResponse> GetModels(List modelID, bool includeModelDefinitions, CancellationToken cancellationToken = default); - Task> GetModelAsync(string modelID, CancellationToken cancellationToken = default); - TwinsResponse GetModel(string modelID, CancellationToken cancellationToken = default); - Task DecommissionModelAsync(string modelID, CancellationToken cancellationToken = default); - TwinsResponse DecommissionModel(string modelID, CancellationToken cancellationToken = default); - Task DeleteModelAsync(string modelID, CancellationToken cancellationToken = default); - TwinsResponse DeleteModel(string modelID, CancellationToken cancellationToken = default); - - Task> GetComponentAsync(string twinId, string componentPath, CancellationToken cancellationToken = default); - TwinsResponse GetComponent(string twinId, string componentPath, CancellationToken cancellationToken = default); - Task UpdateComponentAsync(string twinId, string componentPath, JsonPatchDocument patch, ETag? etag = null, CancellationToken cancellationToken = default); - - Task CreateEventRoute(EventRouteInfo eventRouteInfo); - - } -} \ No newline at end of file diff --git a/Telstra.Twins/Models/Content.cs b/Telstra.Twins/Models/Content.cs index 3ca22fa..0f83bfd 100644 --- a/Telstra.Twins/Models/Content.cs +++ b/Telstra.Twins/Models/Content.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; -using Newtonsoft.Json; namespace Telstra.Twins.Models { @@ -13,18 +12,14 @@ protected Content(string baseType, string name = null, object schema = null) } [System.Text.Json.Serialization.JsonIgnore] - [Newtonsoft.Json.JsonIgnore] public string BaseType { get; set; } - - [JsonProperty("name", Order = -2)] + [JsonPropertyName("name")] public string Name { get; set; } - [JsonProperty("schema", Order = -1)] [JsonPropertyName("schema")] public object Schema { get; set; } - [JsonProperty("@type", Order = -3)] [JsonPropertyName("@type")] public virtual object Type { get { return BaseType; } } } diff --git a/Telstra.Twins/Models/ModelProperty.cs b/Telstra.Twins/Models/ModelProperty.cs index 57a4e62..e908d41 100644 --- a/Telstra.Twins/Models/ModelProperty.cs +++ b/Telstra.Twins/Models/ModelProperty.cs @@ -1,6 +1,4 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; -using Telstra.Twins.Serialization; +using System.Text.Json.Serialization; namespace Telstra.Twins.Models { @@ -15,7 +13,6 @@ public partial class ModelProperty : Content [Newtonsoft.Json.JsonIgnore] public string SemanticType { get; set; } - [JsonProperty("@type", Order = -3)] [JsonPropertyName("@type")] public override object Type { @@ -27,7 +24,6 @@ public override object Type } } - [JsonProperty("unit")] [JsonPropertyName("unit")] public string Unit { get; set; } diff --git a/Telstra.Twins/Models/TwinMetadata.cs b/Telstra.Twins/Models/TwinMetadata.cs index 4a5f7ad..865ada3 100644 --- a/Telstra.Twins/Models/TwinMetadata.cs +++ b/Telstra.Twins/Models/TwinMetadata.cs @@ -8,7 +8,6 @@ namespace Telstra.Twins.Models public class TwinMetadata : DigitalTwinMetadata { // used to suppress model from component serialization - [Newtonsoft.Json.JsonIgnore] [JsonIgnore] public bool IsComponent { get; set; } = false; } diff --git a/Telstra.Twins/Responses/AggregateTwinsResponse.ActionResult.cs b/Telstra.Twins/Responses/AggregateTwinsResponse.ActionResult.cs deleted file mode 100644 index 0c15621..0000000 --- a/Telstra.Twins/Responses/AggregateTwinsResponse.ActionResult.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using System.Net; -using System.Threading.Tasks; - -namespace Telstra.Twins.Responses -{ - public partial class AggregateTwinsResponse : IActionResult - { - public async Task ExecuteResultAsync(ActionContext context) => - await Task.FromResult(new ObjectResult(this) { StatusCode = (int)(this.Success ? HttpStatusCode.OK : this.FirstError) }); - } -} \ No newline at end of file diff --git a/Telstra.Twins/Responses/AggregateTwinsResponse.cs b/Telstra.Twins/Responses/AggregateTwinsResponse.cs deleted file mode 100644 index 367db85..0000000 --- a/Telstra.Twins/Responses/AggregateTwinsResponse.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Net; - -namespace Telstra.Twins.Responses -{ - public partial class AggregateTwinsResponse - { - public AggregateTwinsResponse() { } - public AggregateTwinsResponse(TwinsResponse twinsResponse) - { - Responses.Add(twinsResponse); - } - - public List Responses { get; } = new List(); - - public bool Success => !Responses.Any(r => r.Status != HttpStatusCode.OK); - - public HttpStatusCode FirstError => Responses.FirstOrDefault(r => r.Status != HttpStatusCode.OK).Status; - } - - public partial class AggregateTwinsResponse : AggregateTwinsResponse - { - public AggregateTwinsResponse() { } - public AggregateTwinsResponse(TwinsResponse twinsResponse) - { - Responses.Add(twinsResponse); - } - - public new List> Responses { get; } = new List>(); - } -} \ No newline at end of file diff --git a/Telstra.Twins/Responses/ModelsResponse.cs b/Telstra.Twins/Responses/ModelsResponse.cs deleted file mode 100644 index 2698a48..0000000 --- a/Telstra.Twins/Responses/ModelsResponse.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Telstra.Twins.Responses; - -namespace Telstra.Twins.API.Models -{ - public class ModelsResponse : TwinsResponse - { - public string ModelId { get; } - public string ModelDesc { get; } - public string Result { get; } - } -} diff --git a/Telstra.Twins/Responses/TwinsResponse.ActionResult.cs b/Telstra.Twins/Responses/TwinsResponse.ActionResult.cs deleted file mode 100644 index 6c2af3b..0000000 --- a/Telstra.Twins/Responses/TwinsResponse.ActionResult.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; - -namespace Telstra.Twins.Responses -{ - public partial class TwinsResponse : IActionResult - { - public async Task ExecuteResultAsync(ActionContext context) => - await new ObjectResult(this) { StatusCode = (int)this.Status } - .ExecuteResultAsync(context); - } - public partial class TwinsResponse : IActionResult - { - public new async Task ExecuteResultAsync(ActionContext context) => - await new ObjectResult(this.Status == System.Net.HttpStatusCode.OK ? (object)this.Data : this.Exception.error) { StatusCode = (int)this.Status } - .ExecuteResultAsync(context); - } -} \ No newline at end of file diff --git a/Telstra.Twins/Responses/TwinsResponse.Factory.cs b/Telstra.Twins/Responses/TwinsResponse.Factory.cs deleted file mode 100644 index a7b25ea..0000000 --- a/Telstra.Twins/Responses/TwinsResponse.Factory.cs +++ /dev/null @@ -1,142 +0,0 @@ -using Azure; -using Newtonsoft.Json; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Net; -using System.Runtime.CompilerServices; -using Telstra.Twins.Exceptions; - -namespace Telstra.Twins.Responses -{ - public partial class TwinsResponse - { - public static TwinsResponse Ok() => - new TwinsResponse() - { - Status = HttpStatusCode.OK - }; - - public static TwinsResponse Ok() => - new TwinsResponse() - { - Status = HttpStatusCode.OK, - }; - - public static TwinsResponse Ok(T t) => - new TwinsResponse() - { - Status = HttpStatusCode.OK, - Data = t - }; - - public static TwinsResponse Ok(Response r) => - new TwinsResponse() - { - Status = HttpStatusCode.OK, - Data = r.Value - }; - - public static TwinsResponse NotFound(string code, string msg = null) => - new TwinsResponse() - { - Status = HttpStatusCode.NotFound, - Exception = RequestFailedExceptionContent.Create(msg) - }; - - public static TwinsResponse NotFound(string msg = null) => - new TwinsResponse() - { - Status = HttpStatusCode.NotFound - }; - - - public static TwinsResponse FromResponse(Response r) => - new TwinsResponse() - { - Status = (HttpStatusCode)r.Status == HttpStatusCode.NoContent ? HttpStatusCode.OK : (HttpStatusCode)r.Status - }; - - public static TwinsResponse FromStringResponse(Response r) - { - var raw = r.GetRawResponse(); - var response = new TwinsResponse() - { - Status = (HttpStatusCode)raw.Status == HttpStatusCode.NoContent ? HttpStatusCode.OK : (HttpStatusCode)raw.Status, - Data = JsonConvert.DeserializeObject(r.Value) - }; - - return response; - } - - public static TwinsResponse Error(HttpStatusCode status, [CallerMemberName] string memberName = null) - { - return new TwinsResponse() - { - Status = status - }; - } - - public static TwinsResponse Error(RequestFailedException e, [CallerMemberName] string memberName = null) - { - var content = RequestFailedExceptionContent.Create(e); - Debug.WriteLine($"[{memberName}]: {content.error.message})"); - return new TwinsResponse() - { - Status = (HttpStatusCode)e.Status, - Exception = content - }; - } - - public static TwinsResponse Error(RequestFailedException e, [CallerMemberName] string memberName = null) - { - var content = RequestFailedExceptionContent.Create(e); - var msg = string.Empty; - if (content == null) - msg = e.Message; - else - { - var errors = new List() { content.error.message }; - if (content.error.details != null) - errors.AddRange(content.error.details?.Select(d => d.message)); - msg = string.Join("\n", errors); - } - Debug.WriteLine($"[{memberName}]: {msg})"); - return new TwinsResponse() - { - Status = (HttpStatusCode)e.Status, - Exception = content - }; - } - - public static TwinsResponse Error(HttpStatusCode status, string msg) - { - var content = RequestFailedExceptionContent.Create(msg); - return new TwinsResponse() - { - Status = status, - Exception = content - }; - } - - // NOTE - Value is dropped when casting to different type - // intended use is for casting exceptions from TwinsReponse to expected return type - public static TwinsResponse To(TwinsResponse from) - { - return new TwinsResponse() - { - Status = from.Status, - Exception = from.Exception - }; - } - public static TwinsResponse To(TwinsResponse from, T value) - { - return new TwinsResponse() - { - Status = from.Status, - Exception = from.Exception, - Data = value - }; - } - } -} \ No newline at end of file diff --git a/Telstra.Twins/Responses/TwinsResponse.cs b/Telstra.Twins/Responses/TwinsResponse.cs deleted file mode 100644 index 3546879..0000000 --- a/Telstra.Twins/Responses/TwinsResponse.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Net; -using Telstra.Twins.Exceptions; - -namespace Telstra.Twins.Responses -{ - [Serializable] - public partial class TwinsResponse - { - public HttpStatusCode Status { get; set; } - - public string ClientRequestId { get; set; } - - public RequestFailedExceptionContent Exception { get; set; } - } - - [Serializable] - public partial class TwinsResponse : TwinsResponse - { - public T Data { get; set; } - } -} \ No newline at end of file diff --git a/Telstra.Twins/Serialization/ComponentAwareContractResolver.cs b/Telstra.Twins/Serialization/ComponentAwareContractResolver.cs deleted file mode 100644 index 12d0d16..0000000 --- a/Telstra.Twins/Serialization/ComponentAwareContractResolver.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using System.Reflection; -using Telstra.Twins.Models; - -namespace Telstra.Twins.Serialization -{ - public class ComponentAwareContractResolver : DefaultContractResolver - { - protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) - { - var prop = base.CreateProperty(member, memberSerialization); - if (prop.DeclaringType == typeof(TwinMetadata) && prop.PropertyName == "$model") - { - prop.ShouldSerialize = instance => !(instance as TwinMetadata).IsComponent; - } - - if (prop.PropertyName == "$type") - prop.ShouldSerialize = instance => false; - - return prop; - } - } -} diff --git a/Telstra.Twins/Serialization/IntegerConverter.cs b/Telstra.Twins/Serialization/IntegerConverter.cs deleted file mode 100644 index f998931..0000000 --- a/Telstra.Twins/Serialization/IntegerConverter.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; - -namespace Telstra.Twins.Serialization -{ - public class JsonIntegerConverter : JsonConverter - { - - public override bool CanConvert(Type objectType) - { - return objectType == typeof(IDictionary); - } - - public override bool CanWrite => false; - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - var result = new Dictionary(); - reader.Read(); - - while (reader.TokenType == JsonToken.PropertyName) - { - var propertyName = (string)reader.Value; - reader.Read(); - object value; - if (reader.TokenType == JsonToken.Integer) - { - var temp = Convert.ToInt64(reader.Value); - if (temp <= Byte.MaxValue && temp >= Byte.MinValue) - value = Convert.ToByte(reader.Value); - else if (temp >= Int16.MinValue && temp <= Int16.MaxValue) - value = Convert.ToInt16(reader.Value); - else if (temp >= Int32.MinValue && temp <= Int32.MaxValue) - value = Convert.ToInt32(reader.Value); - else - value = temp; - } - else - value = serializer.Deserialize(reader); - result.Add(propertyName, value); - reader.Read(); - } - - return result; - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) => throw new NotImplementedException(); - } -} diff --git a/Telstra.Twins/Serialization/JsonDateTimeConverter.cs b/Telstra.Twins/Serialization/JsonDateTimeConverter.cs deleted file mode 100644 index 37f3678..0000000 --- a/Telstra.Twins/Serialization/JsonDateTimeConverter.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Globalization; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Telstra.Twins.Serialization -{ - public class JsonDateTimeConverter : JsonConverter - { - public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var date = reader.GetString(); - DateTimeOffset result; - - // First see if it's in ISO format - if (DateTimeOffset.TryParse(date, out result)) - return result; - - // could be in American format when calling GetDigitalTwin - if (DateTimeOffset.TryParseExact(date, "MM/dd/yyyy HH:mm:ss", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal, out result)) - return result; - - throw new FormatException($"DateTimeOffset not in correct format: {date}"); - } - - public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) - { - writer.WriteStringValue(value.ToString()); - } - } -} diff --git a/Telstra.Twins/Serialization/NewtonsoftJsonDateTimeConverter.cs b/Telstra.Twins/Serialization/NewtonsoftJsonDateTimeConverter.cs deleted file mode 100644 index 010acae..0000000 --- a/Telstra.Twins/Serialization/NewtonsoftJsonDateTimeConverter.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; - -namespace Telstra.Twins.Serialization -{ - public class NewtonsoftJsonDateTimeConverter : JsonConverter - { - public override DateTimeOffset ReadJson(JsonReader reader, Type objectType, [AllowNull] DateTimeOffset existingValue, bool hasExistingValue, JsonSerializer serializer) - { - var date = reader.ReadAsString(); - DateTimeOffset result; - - // First see if it's in ISO format - if (DateTimeOffset.TryParse(date, out result)) - return result; - - // could be in American format when calling GetDigitalTwin - if (DateTimeOffset.TryParseExact(date, "MM/dd/yyyy HH:mm:ss", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal, out result)) - return result; - - return existingValue; - } - - - public override void WriteJson(JsonWriter writer, [AllowNull] DateTimeOffset value, JsonSerializer serializer) => - writer.WriteValue(value.ToString()); - } -} diff --git a/Telstra.Twins/ServiceCollectionExtensions.cs b/Telstra.Twins/ServiceCollectionExtensions.cs deleted file mode 100644 index cc9dc3b..0000000 --- a/Telstra.Twins/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using MediatR; -using Microsoft.Extensions.DependencyInjection; - -namespace Telstra.Twins -{ - public static class ServiceCollectionExtensions - { - public static IServiceCollection RegisterMediator(this IServiceCollection services, params Assembly[] assemblies) - { - return services.AddMediatR(assemblies); - } - } -} \ No newline at end of file diff --git a/Telstra.Twins/Telemetry.cs b/Telstra.Twins/Telemetry.cs deleted file mode 100644 index 17298b3..0000000 --- a/Telstra.Twins/Telemetry.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace Telstra.Twins -{ - public class Telemetry - { - public T Value { get; private set; } - public DateTimeOffset Timestamp { get; private set; } - public void Update(T value) - { - this.Value = value; - this.Timestamp = DateTimeOffset.UtcNow; - } - } -} \ No newline at end of file diff --git a/Telstra.Twins/Telstra.Twins.csproj b/Telstra.Twins/Telstra.Twins.csproj index da1a604..35db41b 100644 --- a/Telstra.Twins/Telstra.Twins.csproj +++ b/Telstra.Twins/Telstra.Twins.csproj @@ -39,8 +39,4 @@ - - - - diff --git a/Telstra.Twins/TwinBase.Serializable.cs b/Telstra.Twins/TwinBase.Serializable.cs index 0a0220b..5ad45f8 100644 --- a/Telstra.Twins/TwinBase.Serializable.cs +++ b/Telstra.Twins/TwinBase.Serializable.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Text.Json.Serialization; using Azure.DigitalTwins.Core; -using Newtonsoft.Json; using Telstra.Twins.Attributes; using Telstra.Twins.Helpers; using Telstra.Twins.Common; @@ -163,7 +162,6 @@ public string ModelId [TwinOnlyProperty(DigitalTwinsJsonPropertyNames.DigitalTwinId)] [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinId)] - [JsonProperty(DigitalTwinsJsonPropertyNames.DigitalTwinId)] public string TwinId { get; set; } /// @@ -171,12 +169,10 @@ public string ModelId /// [TwinOnlyProperty(DigitalTwinsJsonPropertyNames.DigitalTwinETag)] [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinETag)] - [JsonProperty(DigitalTwinsJsonPropertyNames.DigitalTwinETag)] public string ETag { get; set; } [TwinOnlyProperty(DigitalTwinsJsonPropertyNames.DigitalTwinMetadata)] [JsonPropertyName(DigitalTwinsJsonPropertyNames.DigitalTwinMetadata)] - [JsonProperty(DigitalTwinsJsonPropertyNames.DigitalTwinMetadata)] public virtual TwinMetadata Metadata { get; set; } = new TwinMetadata(); private void ReadAttributeInfo() diff --git a/Telstra.Twins/TwinsClient.cs b/Telstra.Twins/TwinsClient.cs deleted file mode 100644 index 2286484..0000000 --- a/Telstra.Twins/TwinsClient.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Azure; -using Azure.DigitalTwins.Core; -using Telstra.Twins.Responses; - -namespace Telstra.Twins -{ - public abstract class TwinsClient : ITwinsClient - { - #region Twins - public abstract Task> CreateTwinAsync(TwinBase twin, ETag? etag = null, CancellationToken cancellationToken = default); - public abstract TwinsResponse CreateTwin(TwinBase twin, ETag? etag = null, CancellationToken cancellationToken = default); - public abstract TwinsResponse> Query(string query, CancellationToken cancellationToken = default); - public abstract Task>> QueryAsync(string query, CancellationToken cancellationToken = default); - public abstract Task> GetTwinAsync(string twinId, CancellationToken cancellationToken = default); - public abstract TwinsResponse GetTwin(string twinId, CancellationToken cancellationToken = default); - public abstract Task UpdateTwinAsync(string twinId, JsonPatchDocument patch, ETag? etag = null, CancellationToken cancellationToken = default); - public abstract TwinsResponse UpdateTwin(string twinId, JsonPatchDocument patch, ETag? etag = null, CancellationToken cancellationToken = default); - public abstract Task DeleteTwinAsync(string twinId, ETag? etag = null, - CancellationToken cancellationToken = default); - public abstract TwinsResponse DeleteTwin(string twinId, ETag? etag = null, - CancellationToken cancellationToken = default); - #endregion // Twins - public abstract Task> CreateRelationshipAsync(string sourceId, string targetId, string relationshipName, CancellationToken cancellationToken = default); - public abstract TwinsResponse DeleteRelationship(string twinId, string relationshipId, CancellationToken cancellationToken = default); - public abstract Task DeleteRelationshipAsync(string twinId, string relationshipId, CancellationToken cancellationToken = default); - - public abstract Task>> GetRelationshipsAsync(string twinId, string relationshipName, CancellationToken cancellationToken = default); - public abstract TwinsResponse> GetRelationships(string twinId, string relationshipName, CancellationToken cancellationToken = default); - //public abstract TwinsResponse> GetIncomingRelationships(string twinId, CancellationToken cancellationToken = default); - //public abstract AsyncTwinsResponse> GetIncomingRelationshipsAsync(string twinId, CancellationToken cancellationToken = default); - - public abstract Task> CreateModelsAsync(List modelDTDL, CancellationToken cancellationToken = default); - public abstract TwinsResponse CreateModels(List modelDTDL, CancellationToken cancellationToken = default); - public abstract Task>> GetModelsAsync(List modelIDs, bool includeModelDefinitions, CancellationToken cancellationToken = default); - public abstract TwinsResponse> GetModels(List modelIDs, bool includeModelDefinitions, CancellationToken cancellationToken = default); - public abstract Task DecommissionModelAsync(string modelID, CancellationToken cancellationToken = default); - public abstract TwinsResponse DecommissionModel(string modelID, CancellationToken cancellationToken = default); - public abstract Task DeleteModelAsync(string modelID, CancellationToken cancellationToken = default); - public abstract TwinsResponse DeleteModel(string modelID, CancellationToken cancellationToken = default); - public abstract Task> GetModelAsync(string modelID, CancellationToken cancellationToken = default); - public abstract TwinsResponse GetModel(string modelID, CancellationToken cancellationToken = default); - - public abstract Task> GetComponentAsync(string twinId, string componentPath, CancellationToken cancellationToken = default); - public abstract TwinsResponse GetComponent(string twinId, string componentPath, CancellationToken cancellationToken = default); - - public abstract Task UpdateComponentAsync(string twinId, string componentPath, JsonPatchDocument patch, ETag? etag = null, - CancellationToken cancellationToken = default); - - public abstract Task CreateEventRoute(EventRouteInfo eventRouteInfo); - } -} \ No newline at end of file diff --git a/Telstra.Twins/Utils/TwinClassGenerator/TwinClassGenerator.cs b/Telstra.Twins/Utils/TwinClassGenerator/TwinClassGenerator.cs index 3d215a4..8fab2d2 100644 --- a/Telstra.Twins/Utils/TwinClassGenerator/TwinClassGenerator.cs +++ b/Telstra.Twins/Utils/TwinClassGenerator/TwinClassGenerator.cs @@ -1,12 +1,9 @@ -using Azure.Storage.Blobs.Models; -using Microsoft.Extensions.FileProviders; + using Newtonsoft.Json; -using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; -using System.Reflection.Metadata; using System.Text; using System.Text.RegularExpressions; using Telstra.Twins.Common; diff --git a/Tests/Telstra.Twins.Test/SerializationTests.cs b/Tests/Telstra.Twins.Test/SerializationTests.cs index 8cbbc13..3becc55 100644 --- a/Tests/Telstra.Twins.Test/SerializationTests.cs +++ b/Tests/Telstra.Twins.Test/SerializationTests.cs @@ -1,17 +1,10 @@ #nullable enable using System; using System.Collections.Generic; -using System.Runtime.Serialization; -using System.Text.Json; -using System.Text.Json.Serialization; -using Azure.DigitalTwins.Core; -using Telstra.Twins.Attributes; using Telstra.Twins.Core; -using Telstra.Twins.Models; using Telstra.Twins.Services; using Xunit; using Xunit.Abstractions; -using FluentAssertions; namespace Telstra.Twins.Test {