diff options
| author | crupest <crupest@outlook.com> | 2022-12-05 16:36:00 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2022-12-20 20:32:52 +0800 | 
| commit | db0932004e2d7462288044e4dd9c353d9b534793 (patch) | |
| tree | db58c85b14ed5939fb421f266c9374d7deb82dc9 /docker | |
| parent | 875a3863cf009cf3521f5cbb06548b1de22536e2 (diff) | |
| download | crupest-db0932004e2d7462288044e4dd9c353d9b534793.tar.gz crupest-db0932004e2d7462288044e4dd9c353d9b534793.tar.bz2 crupest-db0932004e2d7462288044e4dd9c353d9b534793.zip | |
Develop secret api. v9
Diffstat (limited to 'docker')
4 files changed, 36 insertions, 3 deletions
| diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs index b76e1ae..c3d118c 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs @@ -16,7 +16,7 @@ public class ColumnInfo      }      // A column with no property. -    public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo, ColumnTypeInfoRegistry? typeRegistry = null) +    public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo, ColumnIndexType indexType = ColumnIndexType.None, ColumnTypeInfoRegistry? typeRegistry = null)      {          if (typeRegistry is null)          { @@ -33,6 +33,7 @@ public class ColumnInfo          IsPrimaryKey = isPrimaryKey;          IsAutoIncrement = isAutoIncrement;          TypeRegistry = typeRegistry; +        IndexType = indexType;      }      public ColumnInfo(Type entityType, string entityPropertyName, ColumnTypeInfoRegistry? typeRegistry = null) @@ -58,11 +59,13 @@ public class ColumnInfo          {              SqlColumnName = PropertyName;              Nullable = true; +            IndexType = ColumnIndexType.None;          }          else          {              SqlColumnName = columnAttribute.DatabaseName ?? PropertyName;              Nullable = !columnAttribute.NonNullable; +            IndexType = columnAttribute.IndexType;          }          ColumnTypeInfo = typeRegistry.GetRequiredByDataType(PropertyRealType); @@ -80,6 +83,7 @@ public class ColumnInfo      public bool Nullable { get; }      public bool IsPrimaryKey { get; }      public bool IsAutoIncrement { get; } +    public ColumnIndexType IndexType { get; }      public string SqlType => TypeRegistry.GetSqlType(ColumnTypeInfo); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs index cbf38f7..6f46cd5 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs @@ -5,6 +5,13 @@ public interface IColumnMetadata  } +public enum ColumnIndexType +{ +    None, +    Unique, +    NonUnique +} +  [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]  public class ColumnAttribute : Attribute, IColumnMetadata  { @@ -17,5 +24,8 @@ public class ColumnAttribute : Attribute, IColumnMetadata      // default false      public bool IsPrimaryKey { get; set; } +    // default false      public bool IsAutoIncrement { get; set; } + +    public ColumnIndexType IndexType { get; set; } = ColumnIndexType.None;  } diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs index 63a247b..acb05f8 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs @@ -1,4 +1,3 @@ -using System.Data;  using Dapper;  using Microsoft.Data.Sqlite;  using Microsoft.Extensions.Options; diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs index 660cd4d..38daa3f 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs @@ -1,3 +1,4 @@ +using System.Text;  using Dapper;  using Microsoft.Data.Sqlite; @@ -78,7 +79,21 @@ public class TableInfo          }      } -    public string GenerateCreateTableSql() +    public string GenerateCreateIndexSql() +    { +        var sb = new StringBuilder(); + +        foreach (var column in ColumnInfos) +        { +            if (column.IndexType == ColumnIndexType.None) continue; + +            sb.Append($"CREATE {(column.IndexType == ColumnIndexType.Unique ? "UNIQUE" : "")} INDEX {TableName}_{column.SqlColumnName}_index ON {TableName} ({column.SqlColumnName});\n"); +        } + +        return sb.ToString(); +    } + +    public string GenerateCreateTableSql(bool createIndex = true)      {          var tableName = TableName;          var columnSql = string.Join(",\n", ColumnInfos.Select(c => c.GenerateCreateTableColumnString())); @@ -89,6 +104,11 @@ CREATE TABLE {tableName}(  );          "; +        if (createIndex) +        { +            sql += GenerateCreateIndexSql(); +        } +          return sql;      } | 
