public async Task <IActionResult> GetCompletedMemeories([FromQuery] CompletedMemoryParams queryParams) { queryParams.UserId = UserId; queryParams.UserRoles = new[] { UserRole }; if (queryParams?.FromDate > queryParams?.ToDate) { return(BadRequest("Invalid date range")); } var memories = await _repo.GetCompletedMemories(queryParams); var dto = memories .GroupBy(km => km.Memory.Category) .OrderBy(c => c.Key.Id) .Select(c => new KidMemoryCategory { CategoryId = c.Key.Id, CategoryName = c.Key.Name, KidMemories = c.GroupBy(km => km.Kid) .OrderBy(km => km.Key.LastName) .Select(k => new KidMemoryDetail { FirstName = k.Key.FirstName, LastName = k.Key.LastName, Completed = k.OrderByDescending(x => x.DateCompleted).ThenBy(x => x.Memory.Name) .Select(x => new CompletedMemoryDetail { MemoryId = x.Memory.Id, MemoryName = x.Memory.Name, MemoryDescription = x.Memory.Description, DateCompleted = x.DateCompleted, }) }) }); return(Ok(dto)); }