@@ -6,6 +6,13 @@ const User = require("../models/User")
66const { uploadImageToCloudinary } = require ( "../utils/imageUploader" )
77const CourseProgress = require ( "../models/CourseProgress" )
88const { convertSecondsToDuration } = require ( "../utils/secToDuration" )
9+ const searchIndex = require ( "../services/searchIndex" )
10+
11+ const refreshSearchIndex = ( ) => {
12+ searchIndex . rebuild ( ) . catch ( ( err ) => {
13+ console . error ( "[SearchIndex] Rebuild failed:" , err . message )
14+ } )
15+ }
916// Function to create a new course
1017exports . createCourse = async ( req , res ) => {
1118 try {
@@ -115,6 +122,7 @@ exports.createCourse = async (req, res) => {
115122 { new : true }
116123 )
117124 console . log ( "HEREEEEEEEE" , categoryDetails2 )
125+ refreshSearchIndex ( )
118126 // Return the new course and a success message
119127 res . status ( 200 ) . json ( {
120128 success : true ,
@@ -185,6 +193,7 @@ exports.editCourse = async (req, res) => {
185193 } )
186194 . exec ( )
187195
196+ refreshSearchIndex ( )
188197 res . json ( {
189198 success : true ,
190199 message : "Course updated successfully" ,
@@ -477,6 +486,7 @@ exports.deleteCourse = async (req, res) => {
477486 // Delete the course
478487 await Course . findByIdAndDelete ( courseId )
479488
489+ refreshSearchIndex ( )
480490 return res . status ( 200 ) . json ( {
481491 success : true ,
482492 message : "Course deleted successfully" ,
@@ -491,6 +501,36 @@ exports.deleteCourse = async (req, res) => {
491501 }
492502}
493503
504+ // Trie-backed search auto-suggestions
505+ exports . getSearchSuggestions = async ( req , res ) => {
506+ try {
507+ const { query, limit } = req . query ;
508+ const trimmedQuery = ( query || "" ) . trim ( ) ;
509+
510+ if ( ! trimmedQuery ) {
511+ return res . status ( 200 ) . json ( {
512+ success : true ,
513+ data : [ ] ,
514+ } ) ;
515+ }
516+
517+ const maxResults = Math . min ( parseInt ( limit , 10 ) || 8 , 20 ) ;
518+ const suggestions = searchIndex . getSuggestions ( trimmedQuery , maxResults ) ;
519+
520+ return res . status ( 200 ) . json ( {
521+ success : true ,
522+ data : suggestions ,
523+ } ) ;
524+ } catch ( error ) {
525+ console . error ( error ) ;
526+ return res . status ( 500 ) . json ( {
527+ success : false ,
528+ message : "Failed to fetch search suggestions" ,
529+ error : error . message ,
530+ } ) ;
531+ }
532+ } ;
533+
494534// Search Courses by query (including instructor name)
495535exports . searchCourse = async ( req , res ) => {
496536 try {
0 commit comments