You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.5 KiB

4 years ago
package search
import (
"sort"
"strings"
"github.com/imdotdev/im.dev/server/internal/cache"
"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")
4 years ago
func Posts(user *models.User, filter, query string) []*models.Post {
posts := make([]*models.Post, 0)
4 years ago
// postsMap := make(map[string]*models.Post)
// search by title
4 years ago
sqlq := "%" + query + "%"
rows, err := db.Conn.Query("select id,slug,title,url,cover,brief,creator,created,updated from posts where title LIKE ? or brief LIKE ?", sqlq, sqlq)
4 years ago
if err != nil {
logger.Warn("get user posts error", "error", err)
return posts
}
posts = story.GetPosts(user, rows)
4 years ago
if filter == models.FilterFavorites {
sort.Sort(models.FavorPosts(posts))
} else {
sort.Sort(models.Posts(posts))
}
4 years ago
return posts
}
func Users(user *models.User, filter, query string) []*models.User {
allUsers := cache.Users
4 years ago
users := make(models.Users, 0)
4 years ago
for _, u := range allUsers {
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)
}
4 years ago
sort.Sort(users)
4 years ago
return users
}