Skip to content

Commit e0f870c

Browse files
committed
Add support for primitive type date
1 parent b42d72b commit e0f870c

57 files changed

Lines changed: 432 additions & 118 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Newtonsoft.Json.Converters;
2+
3+
namespace Dibix.Http
4+
{
5+
public sealed class DateOnlyJsonConverter : IsoDateTimeConverter
6+
{
7+
public DateOnlyJsonConverter() => DateTimeFormat = "yyyy'-'MM'-'dd";
8+
}
9+
}

shared/Metadata/PrimitiveType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public enum PrimitiveType
1313
Decimal,
1414
Binary,
1515
Stream,
16+
Date,
1617
DateTime,
1718
DateTimeOffset,
1819
String,

src/Dibix.Http.Client/Dibix.Http.Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<Compile Include="..\..\shared\Diagnostics\Guard.cs" Link="Diagnostics\%(Filename)%(Extension)" />
99
<Compile Include="..\..\shared\Extensions\CollectionExtensions.cs" Link="Extensions\%(Filename)%(Extension)" />
1010
<Compile Include="..\..\shared\Http\KnownHeaders.cs" Link="Client\%(Filename)%(Extension)" />
11+
<Compile Include="..\..\shared\Json\DateOnlyJsonConverter.cs" Link="Client\%(Filename)%(Extension)" />
1112
</ItemGroup>
1213

1314
<ItemGroup>

src/Dibix.Http.Server.AspNet/Dibix.Http.Server.AspNet.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
<ItemGroup>
88
<Compile Include="..\..\shared\Diagnostics\Guard.cs" Link="%(Filename)%(Extension)" />
99
<Compile Include="..\..\shared\Http\KnownHeaders.cs" Link="%(Filename)%(Extension)" />
10+
<Compile Include="..\..\shared\Json\DateOnlyJsonConverter.cs" Link="%(Filename)%(Extension)" />
11+
</ItemGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Newtonsoft.Json" />
1015
</ItemGroup>
1116

1217
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Text.Json;
3+
using System.Text.Json.Serialization;
4+
5+
namespace Dibix.Http.Server.AspNetCore
6+
{
7+
public sealed class DateOnlyJsonConverter : JsonConverter<DateTime>
8+
{
9+
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.GetDateTime();
10+
11+
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
12+
{
13+
writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
14+
}
15+
}
16+
}

src/Dibix.Sdk.CodeGeneration/Mapping/PrimitiveTypeMap.cs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Data;
4-
using System.Linq;
54
using Microsoft.OpenApi.Models;
65
using Microsoft.SqlServer.TransactSql.ScriptDom;
76

87
namespace Dibix.Sdk.CodeGeneration
98
{
109
internal static class PrimitiveTypeMap
1110
{
12-
private static readonly IDictionary<Type, PrimitiveType> ClrTypeMap = new Dictionary<Type, PrimitiveType>
13-
{
14-
[typeof(bool)] = PrimitiveType.Boolean
15-
, [typeof(byte)] = PrimitiveType.Byte
16-
, [typeof(short)] = PrimitiveType.Int16
17-
, [typeof(int)] = PrimitiveType.Int32
18-
, [typeof(long)] = PrimitiveType.Int64
19-
, [typeof(float)] = PrimitiveType.Float
20-
, [typeof(double)] = PrimitiveType.Double
21-
, [typeof(decimal)] = PrimitiveType.Decimal
22-
, [typeof(byte[])] = PrimitiveType.Binary
23-
, [typeof(DateTime)] = PrimitiveType.DateTime
24-
, [typeof(DateTimeOffset)] = PrimitiveType.DateTimeOffset
25-
, [typeof(string)] = PrimitiveType.String
26-
, [typeof(Uri)] = PrimitiveType.Uri
27-
, [typeof(Guid)] = PrimitiveType.UUID
28-
};
29-
// System.ReflectionOnlyType <> System.RuntimeType
30-
private static readonly IDictionary<Guid, PrimitiveType> GuidMap = ClrTypeMap.ToDictionary(x => x.Key.GUID, x => x.Value);
3111
private static readonly IDictionary<SqlDataTypeOption, PrimitiveType> ScriptDomTypeMap = new Dictionary<SqlDataTypeOption, PrimitiveType>
3212
{
3313
[SqlDataTypeOption.Bit] = PrimitiveType.Boolean
@@ -43,7 +23,7 @@ internal static class PrimitiveTypeMap
4323
, [SqlDataTypeOption.Numeric] = PrimitiveType.Decimal
4424
, [SqlDataTypeOption.Binary] = PrimitiveType.Binary
4525
, [SqlDataTypeOption.VarBinary] = PrimitiveType.Binary
46-
, [SqlDataTypeOption.Date] = PrimitiveType.DateTime
26+
, [SqlDataTypeOption.Date] = PrimitiveType.Date
4727
, [SqlDataTypeOption.DateTime] = PrimitiveType.DateTime
4828
, [SqlDataTypeOption.DateTime2] = PrimitiveType.DateTime
4929
, [SqlDataTypeOption.DateTimeOffset] = PrimitiveType.DateTimeOffset
@@ -68,6 +48,7 @@ internal static class PrimitiveTypeMap
6848
, [PrimitiveType.Decimal] = SqlDbType.Decimal
6949
, [PrimitiveType.Binary] = SqlDbType.VarBinary
7050
, [PrimitiveType.Stream] = SqlDbType.VarBinary
51+
, [PrimitiveType.Date] = SqlDbType.Date
7152
, [PrimitiveType.DateTime] = SqlDbType.DateTime
7253
, [PrimitiveType.DateTimeOffset] = SqlDbType.DateTimeOffset
7354
, [PrimitiveType.String] = SqlDbType.NVarChar
@@ -87,6 +68,7 @@ internal static class PrimitiveTypeMap
8768
, [PrimitiveType.Decimal] = () => new OpenApiSchema { Type = "number", Format = "double" }
8869
, [PrimitiveType.Binary] = () => new OpenApiSchema { Type = "string", Format = "byte" }
8970
, [PrimitiveType.Stream] = () => new OpenApiSchema { Type = "string", Format = "binary" }
71+
, [PrimitiveType.Date] = () => new OpenApiSchema { Type = "string", Format = "date" }
9072
, [PrimitiveType.DateTime] = () => new OpenApiSchema { Type = "string", Format = "date-time" }
9173
, [PrimitiveType.DateTimeOffset] = () => new OpenApiSchema { Type = "string", Format = "date-time" }
9274
, [PrimitiveType.String] = () => new OpenApiSchema { Type = "string" }
@@ -95,7 +77,6 @@ internal static class PrimitiveTypeMap
9577
, [PrimitiveType.Xml] = () => new OpenApiSchema { Type = "string" }
9678
};
9779

98-
public static bool TryGetPrimitiveType(Type clrType, out PrimitiveType primitiveType) => GuidMap.TryGetValue(clrType.GUID, out primitiveType);
9980
public static bool TryGetPrimitiveType(SqlDataTypeOption sqlDataType, out PrimitiveType primitiveType) => ScriptDomTypeMap.TryGetValue(sqlDataType, out primitiveType);
10081

10182
public static SqlDbType GetSqlDbType(PrimitiveType primitiveType) => SqlClientTypeMap[primitiveType];

src/Dibix.Sdk.CodeGeneration/OpenApi/OpenApiGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ private static IOpenApiAny ParseDefaultValue(PrimitiveType type, object value)
525525
case PrimitiveType.Int64: return new OpenApiLong((long)value);
526526
case PrimitiveType.Float: return new OpenApiFloat((float)value);
527527
case PrimitiveType.Double: return new OpenApiDouble((double)value);
528+
case PrimitiveType.Date: return new OpenApiDate((DateTime)value);
528529
case PrimitiveType.DateTime: return new OpenApiDateTime((DateTime)value);
529530
case PrimitiveType.DateTimeOffset: return new OpenApiDateTime((DateTimeOffset)value);
530531
case PrimitiveType.String: return new OpenApiString((string)value);

src/Dibix.Sdk.CodeGeneration/Output/AccessorCodeGenerator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ public AccessorCodeGenerator(CodeGenerationModel model, ISchemaRegistry schemaRe
1414
protected override IEnumerable<ArtifactWriterBase> SelectWriters(CodeGenerationModel model)
1515
{
1616
const CodeGenerationOutputFilter outputFilter = CodeGenerationOutputFilter.Local;
17+
const ActionCompatibilityLevel compatibilityLevel = ActionCompatibilityLevel.Reflection;
1718
yield return new DaoExecutorWriter(model, outputFilter);
1819
yield return new DaoExecutorInputClassWriter(model, outputFilter);
19-
yield return new DaoContractClassWriter(model, outputFilter, JsonSerializerFlavor.NewtonsoftJson);
20+
yield return new DaoContractClassWriter(model, outputFilter, compatibilityLevel, JsonSerializerFlavor.NewtonsoftJson);
2021
yield return new DaoStructuredTypeWriter(model, outputFilter);
21-
yield return new ApiDescriptionWriter(model, ActionCompatibilityLevel.Reflection);
22+
yield return new ApiDescriptionWriter(model, compatibilityLevel);
2223
yield return new ApiControllerClassWriter(model);
2324
}
2425

src/Dibix.Sdk.CodeGeneration/Output/ClientContractClassWriter.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ namespace Dibix.Sdk.CodeGeneration
55
{
66
internal sealed class ClientContractClassWriter : ContractClassWriter
77
{
8+
public override JsonSerializerFlavor SerializerFlavor => JsonSerializerFlavor.NewtonsoftJson;
9+
public override string DateOnlyJsonConverterNamespace => "Dibix.Http";
10+
811
public ClientContractClassWriter(CodeGenerationModel model) : base(model, outputFilter: CodeGenerationOutputFilter.Referenced) { }
912

1013
protected override bool ProcessProperty(ObjectSchema schema, ObjectSchemaProperty property, ICollection<CSharpAnnotation> propertyAnnotations, CodeGenerationContext context)

src/Dibix.Sdk.CodeGeneration/Output/CodeGenerationContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public sealed class CodeGenerationContext
2121
, [PrimitiveType.Decimal] = "decimal"
2222
, [PrimitiveType.Binary] = "byte[]"
2323
, [PrimitiveType.Stream] = "System.IO.Stream"
24+
, [PrimitiveType.Date] = "System.DateTime"
2425
, [PrimitiveType.DateTime] = "System.DateTime"
2526
, [PrimitiveType.DateTimeOffset] = "System.DateTimeOffset"
2627
, [PrimitiveType.String] = "string"

0 commit comments

Comments
 (0)