aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-10 16:56:33 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:53 +0800
commitf208e75f9e074a3faab489de1093f660b87c2ec7 (patch)
tree2c2379c5155b7cef31c56c6559418ce1d66128a5 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
parent8c478bb1a07a55b9056ada029e0d6f9fe34d8d38 (diff)
downloadcrupest-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.cs53
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;