package search import ( "database/sql" "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, page, perPage int64) []*models.Story { posts := make([]*models.Story, 0) // postsMap := make(map[string]*models.Post) // search by title sqlq := "%" + query + "%" var rows *sql.Rows var err error if filter == models.FilterFavorites { rows, err = db.Conn.Query(story.PostQueryPrefix+"where status=? and (title LIKE ? or brief LIKE ?) ORDER BY likes DESC LIMIT ?,?", models.StatusPublished, sqlq, sqlq, (page-1)*perPage, perPage) } else { rows, err = db.Conn.Query(story.PostQueryPrefix+"where status=? and (title LIKE ? or brief LIKE ?) ORDER BY created DESC LIMIT ?,?", models.StatusPublished, sqlq, sqlq, (page-1)*perPage, perPage) } if err != nil { logger.Warn("get user posts error", "error", err) return posts } posts = story.GetPosts(user, rows) 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 }