From 787a9dd09bba5350e14e539a92b89a3ccb5fb1ec Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Mohammadi Date: Sat, 4 Jan 2025 23:06:13 +0330 Subject: [PATCH] Performance improvements --- Services/HandleStartMessage.cs | 11 ++++++++--- Services/ProcessPosts.cs | 3 ++- Web/ServerStartup.cs | 15 ++++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Services/HandleStartMessage.cs b/Services/HandleStartMessage.cs index 686578f..e17a3e5 100755 --- a/Services/HandleStartMessage.cs +++ b/Services/HandleStartMessage.cs @@ -18,10 +18,15 @@ public class HandleStartMessage (callbackQuery != null ? "Callback" : "Start command")); // choose all media attachments that are approved - var mediaAttachmentsToSelect = await _db.AsQueryable() - .Where(post => post.MediaAttachments.Any(media => media.Approved)) - .ToListAsync(); + + // OLD QUERY + // var mediaAttachmentsToSelect = await _db.AsQueryable() + // .Where(post => post.MediaAttachments.Any(media => media.Approved)) + // .ToListAsync(); + var filter = Builders.Filter.ElemMatch(post => post.MediaAttachments, Builders.Filter.Eq(media => media.Approved, true)); + var mediaAttachmentsToSelect = await _db.Find(filter).ToListAsync(); + // select random approved media attachment var selectedMediaAttachment = mediaAttachmentsToSelect[new Random().Next(mediaAttachmentsToSelect.Count)]; // send media attachment diff --git a/Services/ProcessPosts.cs b/Services/ProcessPosts.cs index b23f5bc..265bd77 100755 --- a/Services/ProcessPosts.cs +++ b/Services/ProcessPosts.cs @@ -37,6 +37,7 @@ public class ProcessPosts $" Mastodon ", ParseMode.Html , replyMarkup: new InlineKeyboardMarkup().AddButton("Approve", $"approve-{media.MediaId}").AddButton("Reject", $"reject-{media.MediaId}")); validPosts.Add(post); + newPosts++; } catch (Exception ex) { @@ -44,7 +45,7 @@ public class ProcessPosts media.PreviewUrl); } - newPosts++; + } // Insert post diff --git a/Web/ServerStartup.cs b/Web/ServerStartup.cs index 5c9739c..33c2558 100755 --- a/Web/ServerStartup.cs +++ b/Web/ServerStartup.cs @@ -1,10 +1,10 @@ +using System.Diagnostics; using System.Reflection; using System.Text; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using MongoDB.Driver; -using MongoDB.Driver.Linq; using mstdnCats.Models; namespace mstdnCats.Services; @@ -47,11 +47,16 @@ public class ServerStartup endpoints.MapGet("/api/gimme", async context => { // Api endpoint - // Choose all media attachments that are approved - var mediaAttachmentsToSelect = await _db.AsQueryable() - .Where(post => post.MediaAttachments.Any(media => media.Approved)) - .ToListAsync(); + // Measure execution time + var stopwatch = Stopwatch.StartNew(); + // Choose all posts media attachments that are approved + var filter = Builders.Filter.ElemMatch(post => post.MediaAttachments, Builders.Filter.Eq(media => media.Approved, true)); + var mediaAttachmentsToSelect = await _db.Find(filter).ToListAsync(); + + // Stop and print execution time + stopwatch.Stop(); + Console.WriteLine($"Query executed in: {stopwatch.ElapsedMilliseconds} ms"); // Select random approved media attachment var selectedPost = mediaAttachmentsToSelect[new Random().Next(mediaAttachmentsToSelect.Count)];