diff --git a/src/SmartTalk.Core/Services/AutoTest/AutoTestDataProvider.cs b/src/SmartTalk.Core/Services/AutoTest/AutoTestDataProvider.cs index 2c696c961..eedc10b6c 100644 --- a/src/SmartTalk.Core/Services/AutoTest/AutoTestDataProvider.cs +++ b/src/SmartTalk.Core/Services/AutoTest/AutoTestDataProvider.cs @@ -1,6 +1,7 @@ using AutoMapper; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; +using Serilog; using SmartTalk.Core.Data; using SmartTalk.Core.Domain.AutoTest; using SmartTalk.Core.Ioc; @@ -120,28 +121,52 @@ on autoTestDataSetItem.DataItemId equals autoTestDataItem.Id select autoTestDataItem; var count = await query.CountAsync(cancellationToken).ConfigureAwait(false); - + + var allItems = await query.ToListAsync(cancellationToken).ConfigureAwait(false); + + var sortedItems = allItems.OrderByDescending(item => + { + try + { + if (string.IsNullOrWhiteSpace(item.InputJson)) return DateTime.MinValue; + + var jsonObject = JsonConvert.DeserializeObject>(item.InputJson); + + if (jsonObject != null && jsonObject.TryGetValue("OrderDate", out var orderDateObj)) + { + if (DateTime.TryParse(orderDateObj?.ToString(), out var orderDate)) + { + return orderDate; + } + } + } + catch (Exception ex) + { + Log.Error(ex, "Unexpected error while extracting OrderDate from AutoTestDataItem {ItemId}", item.Id); + } + + return DateTime.MinValue; + }); + + var sortedItemsList = sortedItems.ToList(); + List resultItems; - if (page.HasValue && pageSize.HasValue) { - resultItems = await query - .OrderByDescending(x => x.CreatedAt) + resultItems = sortedItemsList .Skip((page.Value - 1) * pageSize.Value) .Take(pageSize.Value) - .ToListAsync(cancellationToken).ConfigureAwait(false); + .ToList(); } else { - resultItems = await query - .OrderByDescending(x => x.CreatedAt) - .ToListAsync(cancellationToken) - .ConfigureAwait(false); + resultItems = sortedItemsList; } return (count, resultItems); } + public async Task> GetDataItemIdsByDataSetIdAsync(int dataSetId, CancellationToken cancellationToken) { return await _repository.Query()