using System; using System.Collections.Generic; using Luticate2.Auth.Utils.Business.Utils; using Luticate2.Auth.Utils.Dbo.Pagination; using Luticate2.Auth.Utils.Dbo.Result; namespace Luticate2.Auth.Utils.Business.Pagination { public static class LuOrderByParser { public static LuResult Parse(IEnumerable data, LuExpressionUtils.LuExpressionParserOptions options) { var orderByDbo = new LuOrderByDbo { OrderByFields = new List() }; foreach (var orderByFieldStr in data) { var orderByFieldResult = Parse(orderByFieldStr, options); if (!orderByFieldResult) { return orderByFieldResult.To(); } var orderByFieldDbo = orderByFieldResult.Data; orderByDbo.OrderByFields.Add(orderByFieldDbo); } return LuResult.Ok(orderByDbo); } public static LuResult Parse(string data, LuExpressionUtils.LuExpressionParserOptions options) { var orderByFieldDbo = new LuOrderByFieldDbo(); if (data.EndsWith(":desc", StringComparison.OrdinalIgnoreCase)) { orderByFieldDbo.Asc = false; data = data.Substring(0, data.Length - 5); } else { orderByFieldDbo.Asc = true; if (data.EndsWith(":asc", StringComparison.OrdinalIgnoreCase)) { data = data.Substring(0, data.Length - 4); } } var completeData = $"(x) => ({data})"; var expressionResult = LuExpressionUtils.Parse(completeData, options); if (!expressionResult) { return expressionResult.To(); } orderByFieldDbo.Expression = expressionResult.Data; return LuResult.Ok(orderByFieldDbo); } } }