diff --git a/pkg/app/post_routes.go b/pkg/app/post_routes.go index 9bc8053..a439d8f 100644 --- a/pkg/app/post_routes.go +++ b/pkg/app/post_routes.go @@ -57,11 +57,11 @@ func postGet(c *gin.Context) { } var postResult []models.PostListItem - var tagStrings []string + var tagObjs []database.Tag for _, post := range posts { for _, tag := range post.Tags { - tagStrings = append(tagStrings, tag.TagType.Name+":"+tag.Name) + tagObjs = append(tagObjs, tag) } postResult = append(postResult, models.PostListItem{ @@ -70,14 +70,14 @@ func postGet(c *gin.Context) { ImagePath: "/data/" + post.Blob.FilePath, }) } - tagObjs := services.GetTagFilterString(tagStrings) + tagFilters := services.GetTagFilter(tagObjs) c.JSON(http.StatusOK, models.PostPaginationResponse{ CurrentPage: page, TotalPage: totalPage, PostCount: postPages, Posts: postResult, - Tags: tagObjs, + Tags: tagFilters, }) } diff --git a/pkg/services/post.go b/pkg/services/post.go index 1e45bf2..8cc3b7f 100644 --- a/pkg/services/post.go +++ b/pkg/services/post.go @@ -1,6 +1,8 @@ package services import ( + "fmt" + "github.com/Damillora/Shioriko/pkg/database" "github.com/Damillora/Shioriko/pkg/models" "github.com/google/uuid" @@ -20,8 +22,34 @@ func GetPostTags(page int, tagSyntax []string) []database.Post { if err != nil { 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 - 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 } @@ -95,8 +123,23 @@ func CountPostPagesTag(tagSyntax []string) int { return 0 } + var tagIds []string + for _, tag := range tags { + tagIds = append(tagIds, tag.ID) + } + fmt.Printf("%v", tagIds) + 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) } diff --git a/web/app/src/routes/Home.svelte b/web/app/src/routes/Home.svelte index 02acb4c..430d0b8 100644 --- a/web/app/src/routes/Home.svelte +++ b/web/app/src/routes/Home.svelte @@ -34,7 +34,7 @@
-
+
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; postCount = data.postCount; pagination = paginate(page, totalPages); @@ -113,7 +119,7 @@ {#if tagInfo}

- Tag: + Tag: {tagInfo.tagName.split("_").join(" ")}

{#if tagInfo.tagNote}