using System; using System.Data; using Dapper; using Wabbajack.Common; using Wabbajack.Lib; using Wabbajack.Lib.AuthorApi; using Wabbajack.Lib.Downloaders; using Wabbajack.Lib.ModListRegistry; namespace Wabbajack.Server.DataLayer { public partial class SqlService { static SqlService() { SqlMapper.AddTypeHandler(new HashMapper()); SqlMapper.AddTypeHandler(new RelativePathMapper()); SqlMapper.AddTypeHandler(new JsonMapper()); SqlMapper.AddTypeHandler(new JsonMapper()); SqlMapper.AddTypeHandler(new JsonMapper()); SqlMapper.AddTypeHandler(new VersionMapper()); SqlMapper.AddTypeHandler(new GameMapper()); SqlMapper.AddTypeHandler(new DateTimeHandler()); } /// /// Needed to make sure dates are all in UTC format /// private class DateTimeHandler : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, DateTime value) { parameter.Value = value; } public override DateTime Parse(object value) { return DateTime.SpecifyKind((DateTime)value, DateTimeKind.Utc); } } class JsonMapper : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, T value) { parameter.Value = value.ToJson(); } public override T Parse(object value) { return ((string)value).FromJsonString(); } } class RelativePathMapper : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, RelativePath value) { parameter.Value = value.ToJson(); } public override RelativePath Parse(object value) { return (RelativePath)(string)value; } } class HashMapper : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, Hash value) { parameter.Value = (long)value; } public override Hash Parse(object value) { return Hash.FromLong((long)value); } } class VersionMapper : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, Version value) { parameter.Value = value.ToString(); } public override Version Parse(object value) { return Version.Parse((string)value); } } class GameMapper : SqlMapper.TypeHandler { public override void SetValue(IDbDataParameter parameter, Game value) { parameter.Value = value.ToString(); } public override Game Parse(object value) { return GameRegistry.GetByFuzzyName((string)value).Game; } } } }