diff --git a/pages/search/posts.tsx b/pages/search/posts.tsx
index 6b92c7e6..3cec2a03 100644
--- a/pages/search/posts.tsx
+++ b/pages/search/posts.tsx
@@ -16,7 +16,7 @@ import { requestApi } from "utils/axios/request"
import { addParamToUrl, removeParamFromUrl } from "utils/url"
const PostsSearchPage = () => {
- let filter = SearchFilter.Best
+ let filter = SearchFilter.Favorites
const router = useRouter()
const q = router.query.q
@@ -81,10 +81,10 @@ const PostsSearchPage = () => {
- setTempQuery(e.currentTarget.value)} onKeyUp={(e) => startSearch(e)} size="lg" placeholder="type to search..." variant="unstyled" />
+ setTempQuery(e.currentTarget.value)} onKeyUp={(e) => startSearch(e)} size="lg" placeholder="type and enter to search..." variant="unstyled" />
-
+
{results.length === 0 && }
{results.length > 0 &&
diff --git a/pages/search/users.tsx b/pages/search/users.tsx
index a54b529d..af85c1b9 100644
--- a/pages/search/users.tsx
+++ b/pages/search/users.tsx
@@ -19,7 +19,7 @@ import UserCard from "components/users/user-card"
import Users from "components/users/users"
const PostsSearchPage = () => {
- let filter = SearchFilter.Best
+ let filter = SearchFilter.Favorites
const router = useRouter()
const q = router.query.q
@@ -87,7 +87,7 @@ const PostsSearchPage = () => {
setTempQuery(e.currentTarget.value)} onKeyUp={(e) => startSearch(e)} size="lg" placeholder="type to search..." variant="unstyled" />
-
+
{results.length === 0 ? : }
diff --git a/server/internal/cache/cache.go b/server/internal/cache/cache.go
index edd1aaf3..a8f1ae68 100644
--- a/server/internal/cache/cache.go
+++ b/server/internal/cache/cache.go
@@ -3,6 +3,7 @@ package cache
import (
"time"
+ "github.com/imdotdev/im.dev/server/internal/interaction"
"github.com/imdotdev/im.dev/server/pkg/db"
"github.com/imdotdev/im.dev/server/pkg/log"
"github.com/imdotdev/im.dev/server/pkg/models"
@@ -38,6 +39,8 @@ func Init() {
if user.Cover == "" {
user.Cover = models.DefaultCover
}
+
+ user.Follows = interaction.GetFollows(user.ID)
users = append(users, user)
}
diff --git a/server/internal/search/search.go b/server/internal/search/search.go
index ea48255e..659067d5 100644
--- a/server/internal/search/search.go
+++ b/server/internal/search/search.go
@@ -14,20 +14,26 @@ import (
var logger = log.RootLogger.New("logger", "search")
-func Posts(user *models.User, filter, query string) models.Posts {
- posts := make(models.Posts, 0)
+func Posts(user *models.User, filter, query string) []*models.Post {
+ posts := make([]*models.Post, 0)
// postsMap := make(map[string]*models.Post)
// search by title
- rows, err := db.Conn.Query("select id,slug,title,url,cover,brief,creator,created,updated from posts where title LIKE ?", "%"+query+"%")
+ 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)
if err != nil {
logger.Warn("get user posts error", "error", err)
return posts
}
posts = story.GetPosts(user, rows)
- sort.Sort(posts)
+
+ if filter == models.FilterFavorites {
+ sort.Sort(models.FavorPosts(posts))
+ } else {
+ sort.Sort(models.Posts(posts))
+ }
return posts
}
@@ -35,7 +41,7 @@ func Posts(user *models.User, filter, query string) models.Posts {
func Users(user *models.User, filter, query string) []*models.User {
allUsers := cache.Users
- users := make([]*models.User, 0)
+ users := make(models.Users, 0)
for _, u := range allUsers {
if strings.Contains(strings.ToLower(u.Nickname), strings.ToLower(query)) {
users = append(users, u)
@@ -52,5 +58,6 @@ func Users(user *models.User, filter, query string) []*models.User {
u.Followed = interaction.GetFollowed(u.ID, user.ID)
}
+ sort.Sort(users)
return users
}
diff --git a/server/pkg/models/post.go b/server/pkg/models/post.go
index 98530e9a..c6ba3815 100644
--- a/server/pkg/models/post.go
+++ b/server/pkg/models/post.go
@@ -37,3 +37,11 @@ func (ar Posts) Swap(i, j int) { ar[i], ar[j] = ar[j], ar[i] }
func (ar Posts) Less(i, j int) bool {
return ar[i].Created.Unix() > ar[j].Created.Unix()
}
+
+type FavorPosts []*Post
+
+func (ar FavorPosts) Len() int { return len(ar) }
+func (ar FavorPosts) Swap(i, j int) { ar[i], ar[j] = ar[j], ar[i] }
+func (ar FavorPosts) Less(i, j int) bool {
+ return ar[i].Likes > ar[j].Likes
+}
diff --git a/server/pkg/models/user.go b/server/pkg/models/user.go
index c61c50b6..772c68c6 100644
--- a/server/pkg/models/user.go
+++ b/server/pkg/models/user.go
@@ -37,6 +37,14 @@ type User struct {
Created time.Time `json:"created"`
}
+type Users []*User
+
+func (ar Users) Len() int { return len(ar) }
+func (ar Users) Swap(i, j int) { ar[i], ar[j] = ar[j], ar[i] }
+func (ar Users) Less(i, j int) bool {
+ return ar[i].Follows > ar[j].Follows
+}
+
func (user *User) Query(id string, username string, email string) error {
err := db.Conn.QueryRow(`SELECT id,username,role,nickname,email,avatar,last_seen_at,created FROM user WHERE id=? or username=? or email=?`,
id, username, email).Scan(&user.ID, &user.Username, &user.Role, &user.Nickname, &user.Email, &user.Avatar, &user.LastSeenAt, &user.Created)
diff --git a/src/components/search-filters.tsx b/src/components/search-filters.tsx
index f43e4069..6267a3ab 100644
--- a/src/components/search-filters.tsx
+++ b/src/components/search-filters.tsx
@@ -5,13 +5,14 @@ import { getSvgIcon } from "components/svg-icon"
import { SearchFilter } from "src/types/search"
interface Props {
+ initFilter?: string
filters?: SearchFilter[]
onChange: any
}
export const SearchFilters = (props:Props) => {
- const {filters=[SearchFilter.Best,SearchFilter.Featured,SearchFilter.Recent],onChange} = props
- const [filter, setFilter] = useState(SearchFilter.Best)
+ const {initFilter=SearchFilter.Best,filters=[SearchFilter.Best,SearchFilter.Featured,SearchFilter.Recent],onChange} = props
+ const [filter, setFilter] = useState(initFilter)
const changeFilter = f => {
onChange(f)
diff --git a/src/components/story/post-card.tsx b/src/components/story/post-card.tsx
index 3778949b..de3f7673 100644
--- a/src/components/story/post-card.tsx
+++ b/src/components/story/post-card.tsx
@@ -26,14 +26,14 @@ export const PostCard = (props: Props) => {
-
-
+
- {type !== "classic" && {post.rawTags.map(t => #{t.name})}}
+ {type !== "classic" && {post.rawTags.map(t => #{t.name})}}
{
}
-
+
+ {user.follows} followers
+
+
+
)
}
diff --git a/src/data/links.tsx b/src/data/links.tsx
index ebe3170f..0ee9de9f 100644
--- a/src/data/links.tsx
+++ b/src/data/links.tsx
@@ -23,14 +23,14 @@ export const searchLinks: any[] = [{
path: `${ReserveUrls.Search}/posts`,
icon: getSvgIcon("post"),
disabled: false,
- filters: [SearchFilter.Best,SearchFilter.Recent]
+ filters: [SearchFilter.Favorites,SearchFilter.Recent]
},
{
title: '用户',
path: `${ReserveUrls.Search}/users`,
icon: getSvgIcon('user','1.5rem'),
disabled: false,
- filters: [SearchFilter.Best]
+ filters: [SearchFilter.Favorites]
}
]