Skip to content
This repository was archived by the owner on Apr 17, 2025. It is now read-only.

Commit 25d0042

Browse files
committed
Refactoring
2 parents b23874e + 9d85432 commit 25d0042

File tree

9 files changed

+77
-35
lines changed

9 files changed

+77
-35
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace NET6CustomLibrary.DateTime.Comparer;
2+
3+
public class DateOnlyComparer : ValueComparer<DateOnly>
4+
{
5+
public DateOnlyComparer() : base(
6+
(d1, d2) => d1.DayNumber == d2.DayNumber,
7+
d => d.GetHashCode())
8+
{
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace NET6CustomLibrary.DateTime.Comparer;
2+
3+
public class TimeOnlyComparer : ValueComparer<TimeOnly>
4+
{
5+
public TimeOnlyComparer() : base(
6+
(t1, t2) => t1.Ticks == t2.Ticks,
7+
t => t.GetHashCode())
8+
{
9+
}
10+
}
Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
namespace NET6CustomLibrary.DateTime.Converters;
22

3-
public class DateOnlyConverter : JsonConverter<DateOnly>
3+
//public class DateOnlyConverter : JsonConverter<DateOnly>
4+
//{
5+
// public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
6+
// {
7+
// var value = reader.GetString();
8+
// return DateOnly.Parse(value);
9+
// }
10+
11+
// public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
12+
// => writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
13+
//}
14+
15+
public class DateOnlyConverter : ValueConverter<DateOnly, System.DateTime>
416
{
5-
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
17+
public DateOnlyConverter() : base(
18+
dateOnly => dateOnly.ToDateTime(TimeOnly.MinValue),
19+
dateTime => DateOnly.FromDateTime(dateTime))
620
{
7-
var value = reader.GetString();
8-
return DateOnly.Parse(value);
921
}
10-
11-
public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
12-
=> writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
1322
}
Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
namespace NET6CustomLibrary.DateTime.Converters;
22

3-
public class TimeOnlyConverter : JsonConverter<TimeOnly>
3+
//public class TimeOnlyConverter : JsonConverter<TimeOnly>
4+
//{
5+
// public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
6+
// {
7+
// var value = reader.GetString();
8+
// return TimeOnly.Parse(value!);
9+
// }
10+
11+
// //public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
12+
// // => writer.WriteStringValue(value.ToString("HH:mm:ss.fff"));
13+
// public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
14+
// => writer.WriteStringValue(value.ToString("HH:mm:ss"));
15+
//}
16+
17+
public class TimeOnlyConverter : ValueConverter<TimeOnly, TimeSpan>
418
{
5-
public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
19+
public TimeOnlyConverter() : base(
20+
timeOnly => timeOnly.ToTimeSpan(),
21+
timeSpan => TimeOnly.FromTimeSpan(timeSpan))
622
{
7-
var value = reader.GetString();
8-
return TimeOnly.Parse(value!);
923
}
10-
11-
public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
12-
=> writer.WriteStringValue(value.ToString("HH:mm:ss.fff"));
1324
}

src/NET6CustomLibrary/DateTime/Converters/UtcDateTimeConverter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ public override System.DateTime Read(ref Utf8JsonReader reader, Type typeToConve
1717
=> reader.GetDateTime().ToUniversalTime();
1818

1919
public override void Write(Utf8JsonWriter writer, System.DateTime value, JsonSerializerOptions options)
20-
=> writer.WriteStringValue((value.Kind == DateTimeKind.Local ? value.ToUniversalTime() : value).ToString(serializationFormat));
20+
=> writer.WriteStringValue((value.Kind == DateTimeKind.Local ? value.ToUniversalTime() : value)
21+
.ToString(serializationFormat));
2122
}

src/NET6CustomLibrary/DateTime/TypeConverters/DateOnlyTypeConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace NET6CustomLibrary.DateTime.TypeConverters;
22

3-
public class DateOnlyTypeConverter : TypeConverter
3+
internal class DateOnlyTypeConverter : TypeConverter
44
{
55
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
66
{

src/NET6CustomLibrary/Docs/README-DateTimeOnly.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
# Date and Time only configuration
22

33

4+
## Add the converters and the comparers in the OnModelCreating method of the DbContext
5+
```csharp
6+
modelBuilder.Entity<MyEntity>(builder =>
7+
{
8+
// Date is a DateOnly property and date on database
9+
builder.Property(x => x.Date)
10+
.HasConversion<DateOnlyConverter, DateOnlyComparer>();
11+
12+
// Time is a TimeOnly property and time on database
13+
builder.Property(x => x.Time)
14+
.HasConversion<TimeOnlyConverter, TimeOnlyComparer>();
15+
});
16+
17+
```
18+
419
## Registering services at Startup
520

621
```csharp

src/NET6CustomLibrary/Extensions/DependencyInjection.cs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
public static class DependencyInjection
44
{
5-
#region "SERILOG"
65
public static IServiceCollection AddSerilogServices(this IServiceCollection services)
76
{
87
services.AddTransient<ILoggerService, LoggerService>();
@@ -29,9 +28,7 @@ public static WebApplicationBuilder AddSerilogOptionsBuilder(this WebApplication
2928

3029
return builder;
3130
}
32-
#endregion
3331

34-
#region "MULTI LANGUAGE"
3532
public static IServiceCollection AddSupportedCultures(this IServiceCollection services, string[] cultures)
3633
{
3734
var supportedCultures = cultures;
@@ -56,23 +53,21 @@ public static WebApplication UseLocalizationConfiguration(this WebApplication ap
5653

5754
return app;
5855
}
59-
#endregion
6056

61-
#region "DATE and TIME ONLY"
6257
public static IMvcBuilder AddDateTimeJsonOptions(this IMvcBuilder builder)
6358
{
6459
builder.AddJsonOptions(options =>
6560
{
6661
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
67-
options.JsonSerializerOptions.Converters.Add(new DateOnlyConverter());
68-
options.JsonSerializerOptions.Converters.Add(new TimeOnlyConverter());
62+
//options.JsonSerializerOptions.Converters.Add(new DateOnlyConverter());
63+
//options.JsonSerializerOptions.Converters.Add(new TimeOnlyConverter());
6964
options.JsonSerializerOptions.Converters.Add(new UtcDateTimeConverter());
7065
});
7166

7267
return builder;
7368
}
7469

75-
[Obsolete("This method is deprecated. Please indicate the TypeDescriptors as indicated in the README", true)]
70+
//[Obsolete("This method is deprecated. Please indicate the TypeDescriptors as indicated in the README", false)]
7671
public static IServiceCollection AddDateTimeOnlyAttributes(this IServiceCollection services)
7772
{
7873
TypeDescriptor.AddAttributes(typeof(DateOnly), new TypeConverterAttribute(typeof(DateOnlyTypeConverter)));
@@ -98,9 +93,7 @@ public static SwaggerGenOptions AddDateTimeSwaggerGenOptions(this SwaggerGenOpti
9893

9994
return options;
10095
}
101-
#endregion
10296

103-
#region "JSON"
10497
public static IMvcBuilder AddSimpleJsonOptions(this IMvcBuilder builder)
10598
{
10699
builder.AddJsonOptions(options =>
@@ -109,9 +102,7 @@ public static IMvcBuilder AddSimpleJsonOptions(this IMvcBuilder builder)
109102
});
110103
return builder;
111104
}
112-
#endregion
113105

114-
#region "EFCORE DBContext Generics"
115106
public static IServiceCollection AddDbContextGenericsMethods<TDbContext>(this IServiceCollection services) where TDbContext : DbContext
116107
{
117108
services.AddScoped<DbContext, TDbContext>();
@@ -121,9 +112,7 @@ public static IServiceCollection AddDbContextGenericsMethods<TDbContext>(this IS
121112

122113
return services;
123114
}
124-
#endregion
125115

126-
#region "EFCORE DBContext"
127116
public static IServiceCollection AddDbContextUseMySql<TDbContext>(this IServiceCollection services, string connectionString, int retryOnFailure) where TDbContext : DbContext
128117
{
129118
services.AddDbContextPool<TDbContext>(optionBuilder =>
@@ -144,9 +133,7 @@ public static IServiceCollection AddDbContextUseMySql<TDbContext>(this IServiceC
144133
});
145134
return services;
146135
}
147-
#endregion
148136

149-
#region "DATABASE HEALTH CHECKS"
150137
public static IServiceCollection AddMySqlHealthChecks(this IServiceCollection services, string connectionString, string nameAsyncCheck)
151138
{
152139
services.AddHealthChecks()
@@ -213,9 +200,7 @@ public static IEndpointRouteBuilder AddDatabaseHealthChecks(this IEndpointRouteB
213200

214201
return builder;
215202
}
216-
#endregion
217203

218-
#region "MAILKIT"
219204
public static IServiceCollection AddMailKitEmailSenderService(this IServiceCollection services, IConfiguration configuration)
220205
{
221206
services
@@ -227,5 +212,4 @@ public static IServiceCollection AddMailKitEmailSenderService(this IServiceColle
227212

228213
return services;
229214
}
230-
#endregion
231215
}

src/NET6CustomLibrary/GlobalUsings.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
global using Microsoft.AspNetCore.Identity.UI.Services;
1818
global using Microsoft.AspNetCore.Routing;
1919
global using Microsoft.EntityFrameworkCore;
20+
global using Microsoft.EntityFrameworkCore.ChangeTracking;
21+
global using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
2022
global using Microsoft.Extensions.Configuration;
2123
global using Microsoft.Extensions.DependencyInjection;
2224
global using Microsoft.Extensions.Diagnostics.HealthChecks;

0 commit comments

Comments
 (0)