mirror of
https://github.com/Damillora/Shioriko.git
synced 2024-10-31 20:17:32 +00:00
feat: fix filters
This commit is contained in:
parent
9db1fa5bb8
commit
a0868e15a1
@ -57,11 +57,11 @@ func postGet(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var postResult []models.PostListItem
|
var postResult []models.PostListItem
|
||||||
var tagStrings []string
|
var tagObjs []database.Tag
|
||||||
for _, post := range posts {
|
for _, post := range posts {
|
||||||
|
|
||||||
for _, tag := range post.Tags {
|
for _, tag := range post.Tags {
|
||||||
tagStrings = append(tagStrings, tag.TagType.Name+":"+tag.Name)
|
tagObjs = append(tagObjs, tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
postResult = append(postResult, models.PostListItem{
|
postResult = append(postResult, models.PostListItem{
|
||||||
@ -70,14 +70,14 @@ func postGet(c *gin.Context) {
|
|||||||
ImagePath: "/data/" + post.Blob.FilePath,
|
ImagePath: "/data/" + post.Blob.FilePath,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
tagObjs := services.GetTagFilterString(tagStrings)
|
tagFilters := services.GetTagFilter(tagObjs)
|
||||||
|
|
||||||
c.JSON(http.StatusOK, models.PostPaginationResponse{
|
c.JSON(http.StatusOK, models.PostPaginationResponse{
|
||||||
CurrentPage: page,
|
CurrentPage: page,
|
||||||
TotalPage: totalPage,
|
TotalPage: totalPage,
|
||||||
PostCount: postPages,
|
PostCount: postPages,
|
||||||
Posts: postResult,
|
Posts: postResult,
|
||||||
Tags: tagObjs,
|
Tags: tagFilters,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package services
|
package services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/Damillora/Shioriko/pkg/database"
|
"github.com/Damillora/Shioriko/pkg/database"
|
||||||
"github.com/Damillora/Shioriko/pkg/models"
|
"github.com/Damillora/Shioriko/pkg/models"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
@ -20,8 +22,34 @@ func GetPostTags(page int, tagSyntax []string) []database.Post {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return []database.Post{}
|
return []database.Post{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tagIds []string
|
||||||
|
for _, tag := range tags {
|
||||||
|
tagIds = append(tagIds, tag.ID)
|
||||||
|
}
|
||||||
|
fmt.Printf("%v", tagIds)
|
||||||
|
|
||||||
|
var postIds []string
|
||||||
|
database.DB.
|
||||||
|
Model(&tags).
|
||||||
|
Joins("join post_tags on post_tags.tag_id = tags.id").
|
||||||
|
Select("post_tags.post_id").
|
||||||
|
Where("post_tags.tag_id IN ?", tagIds).
|
||||||
|
Group("post_tags.post_id").
|
||||||
|
Having("count(*) = ?", len(tagIds)).
|
||||||
|
Distinct().
|
||||||
|
Find(&postIds)
|
||||||
|
|
||||||
var posts []database.Post
|
var posts []database.Post
|
||||||
database.DB.Model(&tags).Distinct().Joins("Blob").Preload("Tags").Preload("Tags.TagType").Order("created_at desc").Offset((page - 1) * perPage).Limit(20).Association("Posts").Find(&posts)
|
database.DB.
|
||||||
|
Joins("Blob").
|
||||||
|
Preload("Tags").
|
||||||
|
Preload("Tags.TagType").
|
||||||
|
Where("posts.id IN ?", postIds).
|
||||||
|
Order("created_at desc").
|
||||||
|
Offset((page - 1) * perPage).
|
||||||
|
Limit(20).
|
||||||
|
Find(&posts)
|
||||||
return posts
|
return posts
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +123,23 @@ func CountPostPagesTag(tagSyntax []string) int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tagIds []string
|
||||||
|
for _, tag := range tags {
|
||||||
|
tagIds = append(tagIds, tag.ID)
|
||||||
|
}
|
||||||
|
fmt.Printf("%v", tagIds)
|
||||||
|
|
||||||
var count int64
|
var count int64
|
||||||
count = database.DB.Model(&tags).Distinct().Joins("Blob").Preload("Tags").Preload("Tags.TagType").Association("Posts").Count()
|
database.DB.
|
||||||
|
Model(&tags).
|
||||||
|
Distinct().
|
||||||
|
Joins("join post_tags on post_tags.tag_id = tags.id").
|
||||||
|
Select("post_tags.post_id").
|
||||||
|
Where("post_tags.tag_id IN ?", tagIds).
|
||||||
|
Group("post_tags.post_id").
|
||||||
|
Having("count(*) = ?", len(tagIds)).
|
||||||
|
Count(&count)
|
||||||
|
|
||||||
return int(count)
|
return int(count)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<div class="container has-text-centered">
|
<div class="container has-text-centered">
|
||||||
<form on:submit|preventDefault={onSearch}>
|
<form on:submit|preventDefault={onSearch}>
|
||||||
<div class="field has-addons">
|
<div class="field has-addons">
|
||||||
<div class="control is-expanded">
|
<div class="control has-text-left is-expanded">
|
||||||
<div class="control" id="tags">
|
<div class="control" id="tags">
|
||||||
<Tags
|
<Tags
|
||||||
tags={searchTerms}
|
tags={searchTerms}
|
||||||
|
@ -24,7 +24,13 @@
|
|||||||
const data = await getPostSearchTag({ page, q: searchTerms.join("+") });
|
const data = await getPostSearchTag({ page, q: searchTerms.join("+") });
|
||||||
if (data.posts) {
|
if (data.posts) {
|
||||||
posts = data.posts;
|
posts = data.posts;
|
||||||
tags = data.tags.sort((a, b) => b.postCount - a.postCount);
|
tags = data.tags
|
||||||
|
.filter(
|
||||||
|
(x) =>
|
||||||
|
!searchTerms.includes(x.tagName) &&
|
||||||
|
!searchTerms.includes(x.tagType + ":" + x.tagName)
|
||||||
|
)
|
||||||
|
.sort((a, b) => b.postCount - a.postCount);
|
||||||
totalPages = data.totalPage;
|
totalPages = data.totalPage;
|
||||||
postCount = data.postCount;
|
postCount = data.postCount;
|
||||||
pagination = paginate(page, totalPages);
|
pagination = paginate(page, totalPages);
|
||||||
|
Loading…
Reference in New Issue
Block a user