aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-11 10:43:56 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:53 +0800
commitbd523a6a7cac09fe580223c3d75e41e1e100f603 (patch)
tree8dcc9fd28c2b7281eb40fa143e96c70518aeefd8 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs
parentc53adadcbf93a3b5c1f9c8e2b88bdd0efb122709 (diff)
downloadcrupest-bd523a6a7cac09fe580223c3d75e41e1e100f603.tar.gz
crupest-bd523a6a7cac09fe580223c3d75e41e1e100f603.tar.bz2
crupest-bd523a6a7cac09fe580223c3d75e41e1e100f603.zip
Develop secret api. v26
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs62
1 files changed, 62 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs
new file mode 100644
index 0000000..4b253b7
--- /dev/null
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ParamMap.cs
@@ -0,0 +1,62 @@
+using System.Data;
+using System.Diagnostics;
+
+namespace CrupestApi.Commons.Crud;
+
+public record ParamInfo(string Name, object? Value, string? ColumnName = null);
+
+public class ParamList : List<ParamInfo>
+{
+ private static Random random = new Random();
+ private const string chars = "abcdefghijklmnopqrstuvwxyz";
+ public static string GenerateRandomKey(int length)
+ {
+ lock (random)
+ {
+ var result = new string(Enumerable.Repeat(chars, length)
+ .Select(s => s[random.Next(s.Length)]).ToArray());
+ return result;
+ }
+ }
+
+ public string GenerateRandomParameterName()
+ {
+ var parameterName = GenerateRandomKey(10);
+ int retryTimes = 1;
+ while (ContainsKey(parameterName))
+ {
+ retryTimes++;
+ Debug.Assert(retryTimes <= 100);
+ parameterName = GenerateRandomKey(10);
+ }
+ return parameterName;
+ }
+
+
+ public bool ContainsKey(string name)
+ {
+ return this.SingleOrDefault(p => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) is not null;
+ }
+
+ public object? this[string key]
+ {
+ get
+ {
+ return this.SingleOrDefault(p => p.Name.Equals(key, StringComparison.OrdinalIgnoreCase)) ?? throw new KeyNotFoundException("Key not found.");
+ }
+ }
+
+ public void Add(string name, object? value, string? columnName = null)
+ {
+ Add(new ParamInfo(name, value, columnName));
+ }
+
+ // Return the random name.
+ public string AddRandomNameParameter(object? value, string? columnName = null)
+ {
+ var parameterName = GenerateRandomParameterName();
+ var param = new ParamInfo(parameterName, value, columnName);
+ Add(param);
+ return parameterName;
+ }
+}