using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Nuuru.Server.Auth; using Nuuru.Server.Data; using Nuuru.Server.DTOs.Admin; using Nuuru.Server.Models.Booru; using Nuuru.Server.Services.Search; using Nuuru.Server.Services.Storage; namespace Nuuru.Server.Services { public interface IBulkPostService { Task GetPostCountAsync(string searchQuery); } public class BulkPostService : IBulkPostService { private readonly ApplicationDbContext _context; private readonly ILogger _logger; private readonly IPostService _postService; private readonly ICurrentUserContext _userContext; private readonly IMemoryCache _cache; public BulkPostService( ApplicationDbContext context, ILogger _logger, IPostService postService, ICurrentUserContext userContext, IMemoryCache cache) { this._context = context; this._logger = _logger; this._postService = postService; this._userContext = userContext; this._cache = cache; } public async Task GetPostCountAsync(string searchQuery) { if (string.IsNullOrWhiteSpace(searchQuery)) return 0; try { var tokenizer = new SearchTokenizer(searchQuery); var tokens = tokenizer.Tokenize(); var parser = new SearchParser(tokens); var parseResult = parser.Parse(); if (parseResult.Errors.Count > 0) return 0; var builder = new SearchQueryBuilder(_context, _userContext, _cache); await builder.PreResolveTagIdsAsync(parseResult); var dbQuery = builder.BuildCountQuery(parseResult); return await dbQuery.CountAsync(); } catch { return 0; } } } }