aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-11-11 01:12:29 +0800
committerYuqian Yang <crupest@crupest.life>2024-12-19 21:42:01 +0800
commita7fb0508867ee53934be18a6606aa8bc12c2645b (patch)
tree5994f0a62733b13f9f330e3515260ae20dc4a0bd /dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs
parent7692763f83ad1be735b0b9e9ab0af8ce666d8de8 (diff)
downloadcrupest-a7fb0508867ee53934be18a6606aa8bc12c2645b.tar.gz
crupest-a7fb0508867ee53934be18a6606aa8bc12c2645b.tar.bz2
crupest-a7fb0508867ee53934be18a6606aa8bc12c2645b.zip
HALF WORK: 2024.12.19
Re-organize file structure.
Diffstat (limited to 'dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs')
-rw-r--r--dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs50
1 files changed, 50 insertions, 0 deletions
diff --git a/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs
new file mode 100644
index 0000000..734d044
--- /dev/null
+++ b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/OrderByClause.cs
@@ -0,0 +1,50 @@
+namespace CrupestApi.Commons.Crud;
+
+public class OrderByItem
+{
+ public OrderByItem(string columnName, bool isAscending)
+ {
+ ColumnName = columnName;
+ IsAscending = isAscending;
+ }
+
+ public string ColumnName { get; }
+ public bool IsAscending { get; }
+
+ public string GenerateSql()
+ {
+ return $"{ColumnName} {(IsAscending ? "ASC" : "DESC")}";
+ }
+}
+
+public interface IOrderByClause : IClause
+{
+ List<OrderByItem> Items { get; }
+ // Contains "ORDER BY" keyword!
+ string GenerateSql(string? dbProviderId = null);
+}
+
+public class OrderByClause : IOrderByClause
+{
+ public List<OrderByItem> Items { get; } = new List<OrderByItem>();
+
+ public OrderByClause(params OrderByItem[] items)
+ {
+ Items.AddRange(items);
+ }
+
+ public static OrderByClause Create(params OrderByItem[] items)
+ {
+ return new OrderByClause(items);
+ }
+
+ public List<string> GetRelatedColumns()
+ {
+ return Items.Select(x => x.ColumnName).ToList();
+ }
+
+ public string GenerateSql(string? dbProviderId = null)
+ {
+ return "ORDER BY " + string.Join(", ", Items.Select(i => i.GenerateSql()));
+ }
+}