aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
diff options
context:
space:
mode:
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
new file mode 100644
index 0000000..84267a3
--- /dev/null
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
@@ -0,0 +1,70 @@
+using System.Text;
+using Dapper;
+
+namespace CrupestApi.Commons.Crud;
+
+public class UpdateItem
+{
+ public UpdateItem(string columnName, object? value)
+ {
+ ColumnName = columnName;
+ Value = value;
+ }
+
+ public UpdateItem(KeyValuePair<string, object?> pair)
+ {
+ ColumnName = pair.Key;
+ Value = pair.Value;
+ }
+
+ public string ColumnName { get; set; }
+ public object? Value { get; set; }
+
+ public static implicit operator KeyValuePair<string, object?>(UpdateItem item)
+ {
+ return new(item.ColumnName, item.Value);
+ }
+
+ public static implicit operator UpdateItem(KeyValuePair<string, object?> pair)
+ {
+ return new(pair);
+ }
+}
+
+public class UpdateClause
+{
+ public List<UpdateItem> Items { get; } = new List<UpdateItem>();
+
+ public UpdateClause(IEnumerable<UpdateItem> items)
+ {
+ Items.AddRange(items);
+ }
+
+ public UpdateClause(params UpdateItem[] items)
+ {
+ Items.AddRange(items);
+ }
+
+ public List<string> GetRelatedColumns()
+ {
+ return Items.Select(i => i.ColumnName).ToList();
+ }
+
+ public string GenerateSql(DynamicParameters parameters)
+ {
+ StringBuilder result = new StringBuilder();
+
+ foreach (var item in Items)
+ {
+ if (result.Length > 0)
+ {
+ result.Append(", ");
+ }
+
+ var parameterName = parameters.AddRandomNameParameter(item.Value);
+ result.Append($"{item.ColumnName} = @{parameterName}");
+ }
+
+ return result.ToString();
+ }
+}