diff options
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons')
6 files changed, 39 insertions, 9 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs index 7e38469..7f1782b 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs @@ -186,6 +186,23 @@ public class ColumnInfo } } + public object? GenerateDefaultValue() + { + if (DefaultValueGeneratorMethod is not null) + { + return InvokeDefaultValueGenerator(); + } + + if (Metadata.TryGetValue(ColumnMetadataKeys.DefaultValue, out object? value)) + { + return value; + } + else + { + return null; + } + } + public string GenerateCreateTableColumnString(string? dbProviderId = null) { StringBuilder result = new StringBuilder(); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs index 5d20772..26f6105 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs @@ -42,6 +42,8 @@ public static class ColumnMetadataKeys /// </summary> public const string ActAsKey = nameof(ColumnAttribute.ActAsKey); + public const string DefaultValue = nameof(ColumnAttribute.DefaultValue); + /// <summary> /// Default value is null, aka, whether a default value generator is specified. /// Set to true or false to override it. @@ -130,6 +132,8 @@ public class ColumnAttribute : Attribute, IColumnMetadata /// <seealso cref="ColumnMetadataKeys.ActAsKey"/> public bool ActAsKey { get; init; } + public object? DefaultValue { get; init; } + public bool? CanBeGenerated { get; init; } = null; public bool TryGetValue(string key, out object? value) diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnTypeInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnTypeInfo.cs index 2f15e50..19eff52 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnTypeInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnTypeInfo.cs @@ -8,6 +8,7 @@ namespace CrupestApi.Commons.Crud; public interface IColumnTypeInfo { + public static IColumnTypeInfo BoolColumnTypeInfo { get; } = new SimpleColumnTypeInfo<bool>(); public static IColumnTypeInfo IntColumnTypeInfo { get; } = new SimpleColumnTypeInfo<int>(); public static IColumnTypeInfo ShortColumnTypeInfo { get; } = new SimpleColumnTypeInfo<short>(); public static IColumnTypeInfo SByteColumnTypeInfo { get; } = new SimpleColumnTypeInfo<sbyte>(); @@ -25,7 +26,11 @@ public interface IColumnTypeInfo { get { - if (DatabaseClrType == typeof(int)) + if (DatabaseClrType == typeof(bool)) + { + return DbType.Boolean; + } + else if (DatabaseClrType == typeof(int)) { return DbType.Int32; } @@ -70,7 +75,7 @@ public interface IColumnTypeInfo return DbType switch { DbType.String => "TEXT", - DbType.Int16 or DbType.Int32 or DbType.Int64 => "INTEGER", + DbType.Boolean or DbType.Int16 or DbType.Int32 or DbType.Int64 => "INTEGER", DbType.Single or DbType.Double => "REAL", DbType.Binary => "BLOB", _ => throw new Exception($"Unsupported DbType: {DbType}"), @@ -175,6 +180,7 @@ public class ColumnTypeProvider : IColumnTypeProvider public ColumnTypeProvider() { + _typeMap.Add(IColumnTypeInfo.BoolColumnTypeInfo.ClrType, IColumnTypeInfo.BoolColumnTypeInfo); _typeMap.Add(IColumnTypeInfo.IntColumnTypeInfo.ClrType, IColumnTypeInfo.IntColumnTypeInfo); _typeMap.Add(IColumnTypeInfo.ShortColumnTypeInfo.ClrType, IColumnTypeInfo.ShortColumnTypeInfo); _typeMap.Add(IColumnTypeInfo.SByteColumnTypeInfo.ClrType, IColumnTypeInfo.SByteColumnTypeInfo); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs index ea8197a..39c7b43 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs @@ -11,7 +11,7 @@ public class EntityJsonHelper<TEntity> where TEntity : class private readonly TableInfo _table; private readonly IOptionsMonitor<JsonSerializerOptions> _jsonSerializerOptions; - public EntityJsonHelper(TableInfoFactory tableInfoFactory, IOptionsMonitor<JsonSerializerOptions> jsonSerializerOptions) + public EntityJsonHelper(ITableInfoFactory tableInfoFactory, IOptionsMonitor<JsonSerializerOptions> jsonSerializerOptions) { _table = tableInfoFactory.Get(typeof(TEntity)); _jsonSerializerOptions = jsonSerializerOptions; diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs index 6a88ee1..e9f2d85 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs @@ -511,7 +511,7 @@ CREATE TABLE {tableName}( if (value is null) { - value = column.InvokeDefaultValueGenerator(); + value = column.GenerateDefaultValue(); } if (value is null && column.IsAutoIncrement) @@ -526,6 +526,8 @@ CREATE TABLE {tableName}( column.InvokeValidator(value); + InsertItem realInsertItem; + if (value is DbNullValue) { if (column.IsNotNull) @@ -533,17 +535,18 @@ CREATE TABLE {tableName}( throw new Exception($"Column '{column.ColumnName}' is not nullable. Please specify a non-null value."); } - realInsert.Add(column.ColumnName, null); + realInsertItem = new InsertItem(column.ColumnName, null); } else { - realInsert.Add(column.ColumnName, value); + realInsertItem = new InsertItem(column.ColumnName, value); } + realInsert.Add(realInsertItem); - if (item?.ColumnName == KeyColumn.ColumnName) + if (realInsertItem.ColumnName == KeyColumn.ColumnName) { - key = item.Value; + key = realInsertItem.Value; } } diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs index 1f00f9a..c3a4de0 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Secrets/SecretInfo.cs @@ -14,7 +14,7 @@ public class SecretInfo public string Description { get; set; } = default!; [Column(NotNull = false)] public DateTime? ExpireTime { get; set; } - [Column(NotNull = true)] + [Column(NotNull = true, DefaultValue = false)] public bool Revoked { get; set; } [Column(NotNull = true)] public DateTime CreateTime { get; set; } |