package search
import (
"sort"
"strings"
"github.com/imdotdev/im.dev/server/internal/interaction"
"github.com/imdotdev/im.dev/server/internal/story"
"github.com/imdotdev/im.dev/server/pkg/db"
"github.com/imdotdev/im.dev/server/pkg/log"
"github.com/imdotdev/im.dev/server/pkg/models"
)
var logger = log . RootLogger . New ( "logger" , "search" )
func Posts ( user * models . User , filter , query string ) [ ] * models . Story {
posts := make ( [ ] * models . Story , 0 )
// postsMap := make(map[string]*models.Post)
// search by title
sqlq := "%" + query + "%"
rows , err := db . Conn . Query ( "select id,type,slug,title,url,cover,brief,creator,created,updated from story where status=? and (title LIKE ? or brief LIKE ?)" , models . StatusPublished , sqlq , sqlq )
if err != nil {
logger . Warn ( "get user posts error" , "error" , err )
return posts
}
posts = story . GetPosts ( user , rows )
if filter == models . FilterFavorites {
sort . Sort ( models . FavorStories ( posts ) )
} else {
sort . Sort ( models . Stories ( posts ) )
}
return posts
}
func Users ( user * models . User , filter , query string ) [ ] * models . User {
users := make ( models . Users , 0 )
for _ , u := range models . UsersCache {
if strings . Contains ( strings . ToLower ( u . Nickname ) , strings . ToLower ( query ) ) {
users = append ( users , u )
continue
}
if strings . Contains ( strings . ToLower ( u . Username ) , strings . ToLower ( query ) ) {
users = append ( users , u )
continue
}
}
for _ , u := range users {
u . Followed = interaction . GetFollowed ( u . ID , user . ID )
}
sort . Sort ( users )
return users
}