fix: filter active in news

This commit is contained in:
ericprd 2025-03-20 13:13:28 +08:00
parent 8d7500610e
commit 24f0fe6efa
5 changed files with 33 additions and 8 deletions

View File

@ -1,6 +1,16 @@
package newsrepository package newsrepository
import newsdomain "legalgo-BE-go/internal/domain/news" import (
newsdomain "legalgo-BE-go/internal/domain/news"
timeutils "legalgo-BE-go/internal/utilities/time_utils"
)
type is_active string
const (
active is_active = "true"
notActive is_active = "false"
)
func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) { func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) {
var news []newsdomain.News var news []newsdomain.News
@ -20,6 +30,10 @@ func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, erro
Where("nt.tag_id IN (?)", filter.Tags) Where("nt.tag_id IN (?)", filter.Tags)
} }
if filter.Active == string(active) {
query = query.Where("news.live_at <= ?", timeutils.Now())
}
query. query.
Select("news.*, COUNT(content_logs.content_id) as clicked"). Select("news.*, COUNT(content_logs.content_id) as clicked").
Group("news.id"). Group("news.id").

View File

@ -23,8 +23,13 @@ func GetAll(
category := query.Get("categories") category := query.Get("categories")
tags := query.Get("tags") tags := query.Get("tags")
activeOnly := query.Get("active")
news, err = newsSvc.GetAll(category, tags) news, err = newsSvc.GetAll(newsdomain.Filter{
Category: category,
Tags: tags,
Active: activeOnly,
})
if err != nil { if err != nil {
response.ResponseWithErrorCode( response.ResponseWithErrorCode(

View File

@ -51,7 +51,12 @@ type NewsUpdate struct {
LiveAt time.Time `json:"live_at"` LiveAt time.Time `json:"live_at"`
} }
type Filter struct {
Category, Tags, Active string
}
type NewsFilter struct { type NewsFilter struct {
Tags []string Tags []string
Category []string Category []string
Active string
} }

View File

@ -5,15 +5,15 @@ import (
"strings" "strings"
) )
func (i *impl) GetAll(categoriesCode, tagCodes string) ([]newsdomain.News, error) { func (i *impl) GetAll(filter newsdomain.Filter) ([]newsdomain.News, error) {
var err error var err error
categories := []string{} categories := []string{}
tags := []string{} tags := []string{}
news := []newsdomain.News{} news := []newsdomain.News{}
tagCodeArr := strings.Split(tagCodes, " ") tagCodeArr := strings.Split(filter.Tags, " ")
categoryCodeArr := strings.Split(categoriesCode, " ") categoryCodeArr := strings.Split(filter.Category, " ")
if len(tagCodeArr) > 0 && tagCodeArr[0] != "" { if len(tagCodeArr) > 0 && tagCodeArr[0] != "" {
tags, err = i.tagRepo.GetIDsByCodes(tagCodeArr) tags, err = i.tagRepo.GetIDsByCodes(tagCodeArr)
@ -37,9 +37,10 @@ func (i *impl) GetAll(categoriesCode, tagCodes string) ([]newsdomain.News, error
} }
} }
filter := newsdomain.NewsFilter{ filterSpec := newsdomain.NewsFilter{
Tags: tags, Tags: tags,
Category: categories, Category: categories,
Active: filter.Active,
} }
return i.newsRepo.GetAll(filter) return i.newsRepo.GetAll(filterSpec)
} }

View File

@ -16,7 +16,7 @@ type impl struct {
} }
type News interface { type News interface {
GetAll(string, string) ([]newsdomain.News, error) GetAll(filter newsdomain.Filter) ([]newsdomain.News, error)
GetBySlug(string) (*newsdomain.News, error) GetBySlug(string) (*newsdomain.News, error)
Create(newsdomain.NewsReq, string) error Create(newsdomain.NewsReq, string) error
Update(string, newsdomain.NewsUpdate) error Update(string, newsdomain.NewsUpdate) error