diff options
author | crupest <crupest@outlook.com> | 2022-12-10 16:56:33 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-12-20 20:32:53 +0800 |
commit | f208e75f9e074a3faab489de1093f660b87c2ec7 (patch) | |
tree | 2c2379c5155b7cef31c56c6559418ce1d66128a5 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs | |
parent | 8c478bb1a07a55b9056ada029e0d6f9fe34d8d38 (diff) | |
download | crupest-f208e75f9e074a3faab489de1093f660b87c2ec7.tar.gz crupest-f208e75f9e074a3faab489de1093f660b87c2ec7.tar.bz2 crupest-f208e75f9e074a3faab489de1093f660b87c2ec7.zip |
Develop secret api. v24
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs')
-rw-r--r-- | docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs | 53 |
1 files changed, 50 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 88b5ced..f1fb99b 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs @@ -86,16 +86,39 @@ public class ColumnInfo protected void OnBeforeInsert(ColumnInfo column, ref object? value) { - TryCoerceStringFromNullToEmpty(ref value); - if (column.IsNotNull && !column.IsAutoIncrement) + if (column.IsClientGenerate && value is not null) + { + throw new Exception($"Column {column.ColumnName} can't be set manually."); + } + + var defaultValueGeneratorMethod = DefaultValueGeneratorMethod; + if (defaultValueGeneratorMethod is not null) { - throw new Exception($"Column {column.ColumnName} can't be empty."); + value = defaultValueGeneratorMethod.Invoke(null, new object[] { }); } + + + OnBeforeSet(column, ref value); } protected void OnBeforeUpdate(ColumnInfo column, ref object? value) { + OnBeforeSet(column, ref value); + + if (column.IsNoUpdate) + { + throw new Exception($"Column {column.ColumnName} not updatable."); + } + } + + protected void OnBeforeSet(ColumnInfo column, ref object? value) + { TryCoerceStringFromNullToEmpty(ref value); + + if (value is null && column.IsNotNull) + { + throw new Exception($"Column {column.ColumnName} can't be null."); + } } public string ColumnName @@ -108,9 +131,33 @@ public class ColumnInfo } } + public MethodInfo? DefaultValueGeneratorMethod + { + get + { + object? value = Metadata.GetValueOrDefault(ColumnMetadataKeys.DefaultValueGenerator); + Debug.Assert(value is null || value is string); + MethodInfo? result; + if (value is null) + { + string methodName = ColumnName + "DefaultValueGenerator"; + result = Table.EntityType.GetMethod(methodName, BindingFlags.Static); + } + else + { + string methodName = (string)value; + result = Table.EntityType.GetMethod(methodName, BindingFlags.Static) ?? throw new Exception("The default value generator does not exist."); + } + + return result; + } + } + public bool IsPrimaryKey => Metadata.GetValueOrDefault(ColumnMetadataKeys.IsPrimaryKey) is true; public bool IsAutoIncrement => Metadata.GetValueOrDefault(ColumnMetadataKeys.IsAutoIncrement) is true; public bool IsNotNull => IsPrimaryKey || Metadata.GetValueOrDefault(ColumnMetadataKeys.NotNull) is true; + public bool IsClientGenerate => Metadata.GetValueOrDefault(ColumnMetadataKeys.ClientGenerate) is true; + public bool IsNoUpdate => Metadata.GetValueOrDefault(ColumnMetadataKeys.NoUpdate) is true; public ColumnIndexType Index => Metadata.GetValueOrDefault<ColumnIndexType?>(ColumnMetadataKeys.Index) ?? ColumnIndexType.None; |