mirror of https://github.com/sunface/rust-course
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.
63 lines
1.7 KiB
63 lines
1.7 KiB
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
|
|
}
|