From 3295ac48edc8612db8b0d5a68c8fa90cbe9363bf Mon Sep 17 00:00:00 2001 From: sunface Date: Mon, 8 Mar 2021 17:05:42 +0800 Subject: [PATCH] updat --- pages/search/posts.tsx | 6 +++--- pages/search/users.tsx | 4 ++-- server/internal/cache/cache.go | 3 +++ server/internal/search/search.go | 17 ++++++++++++----- server/pkg/models/post.go | 8 ++++++++ server/pkg/models/user.go | 8 ++++++++ src/components/search-filters.tsx | 5 +++-- src/components/story/post-card.tsx | 6 +++--- src/components/users/user-card.tsx | 6 +++++- src/data/links.tsx | 4 ++-- 10 files changed, 49 insertions(+), 18 deletions(-) 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] } ]