|  | @@ -0,0 +1,48 @@
 | 
	
		
			
				|  |  | +using System;
 | 
	
		
			
				|  |  | +using Jellyfin.Server.Implementations.ValueConverters;
 | 
	
		
			
				|  |  | +using Microsoft.EntityFrameworkCore;
 | 
	
		
			
				|  |  | +using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace Jellyfin.Server.Implementations
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    /// <summary>
 | 
	
		
			
				|  |  | +    /// Model builder extensions.
 | 
	
		
			
				|  |  | +    /// </summary>
 | 
	
		
			
				|  |  | +    public static class ModelBuilderExtensions
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// Specify value converter for the object type.
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  | +        /// <param name="modelBuilder">The model builder.</param>
 | 
	
		
			
				|  |  | +        /// <param name="converter">The <see cref="ValueConverter{TModel,TProvider}"/>.</param>
 | 
	
		
			
				|  |  | +        /// <typeparam name="T">The type to convert.</typeparam>
 | 
	
		
			
				|  |  | +        /// <returns>The modified <see cref="ModelBuilder"/>.</returns>
 | 
	
		
			
				|  |  | +        public static ModelBuilder UseValueConverterForType<T>(this ModelBuilder modelBuilder, ValueConverter converter)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var type = typeof(T);
 | 
	
		
			
				|  |  | +            foreach (var entityType in modelBuilder.Model.GetEntityTypes())
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                foreach (var property in entityType.GetProperties())
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    if (property.ClrType == type)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        property.SetValueConverter(converter);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            return modelBuilder;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// Specify the default <see cref="DateTimeKind"/>.
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  | +        /// <param name="modelBuilder">The model builder to extend.</param>
 | 
	
		
			
				|  |  | +        /// <param name="kind">The <see cref="DateTimeKind"/> to specify.</param>
 | 
	
		
			
				|  |  | +        public static void SetDefaultDateTimeKind(this ModelBuilder modelBuilder, DateTimeKind kind)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            modelBuilder.UseValueConverterForType<DateTime>(new DateTimeKindValueConverter(kind));
 | 
	
		
			
				|  |  | +            modelBuilder.UseValueConverterForType<DateTime?>(new DateTimeKindValueConverter(kind));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |