diff options
| author | crupest <crupest@outlook.com> | 2022-12-22 17:47:07 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2022-12-22 17:47:07 +0800 | 
| commit | 3469ac050b13b73d76f13dcbdfa77a1aefc49ae0 (patch) | |
| tree | 0fb74f6fb4e8603f9625a72ea82a06dbf72436e6 /docker/crupest-api/CrupestApi/CrupestApi.Commons | |
| parent | b022122b0a697f063433d5fe525e536bd23e8372 (diff) | |
| download | crupest-3469ac050b13b73d76f13dcbdfa77a1aefc49ae0.tar.gz crupest-3469ac050b13b73d76f13dcbdfa77a1aefc49ae0.tar.bz2 crupest-3469ac050b13b73d76f13dcbdfa77a1aefc49ae0.zip  | |
Develop secret api. v58
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; }  | 
