diff --git a/internal/accessor/news/get_all.go b/internal/accessor/news/get_all.go index adfa76e..246bfd1 100644 --- a/internal/accessor/news/get_all.go +++ b/internal/accessor/news/get_all.go @@ -1,6 +1,16 @@ 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) { 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) } + if filter.Active == string(active) { + query = query.Where("news.live_at <= ?", timeutils.Now()) + } + query. Select("news.*, COUNT(content_logs.content_id) as clicked"). Group("news.id"). diff --git a/internal/api/http/news/get_all.go b/internal/api/http/news/get_all.go index 6879587..d37e6c8 100644 --- a/internal/api/http/news/get_all.go +++ b/internal/api/http/news/get_all.go @@ -23,8 +23,13 @@ func GetAll( category := query.Get("categories") 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 { response.ResponseWithErrorCode( diff --git a/internal/domain/news/spec.go b/internal/domain/news/spec.go index e6435db..2bba6e3 100644 --- a/internal/domain/news/spec.go +++ b/internal/domain/news/spec.go @@ -51,7 +51,12 @@ type NewsUpdate struct { LiveAt time.Time `json:"live_at"` } +type Filter struct { + Category, Tags, Active string +} + type NewsFilter struct { Tags []string Category []string + Active string } diff --git a/internal/services/news/get_all.go b/internal/services/news/get_all.go index 8499e64..ae59127 100644 --- a/internal/services/news/get_all.go +++ b/internal/services/news/get_all.go @@ -5,15 +5,15 @@ import ( "strings" ) -func (i *impl) GetAll(categoriesCode, tagCodes string) ([]newsdomain.News, error) { +func (i *impl) GetAll(filter newsdomain.Filter) ([]newsdomain.News, error) { var err error categories := []string{} tags := []string{} news := []newsdomain.News{} - tagCodeArr := strings.Split(tagCodes, " ") - categoryCodeArr := strings.Split(categoriesCode, " ") + tagCodeArr := strings.Split(filter.Tags, " ") + categoryCodeArr := strings.Split(filter.Category, " ") if len(tagCodeArr) > 0 && tagCodeArr[0] != "" { 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, Category: categories, + Active: filter.Active, } - return i.newsRepo.GetAll(filter) + return i.newsRepo.GetAll(filterSpec) } diff --git a/internal/services/news/impl.go b/internal/services/news/impl.go index 84ae3e3..59054e8 100644 --- a/internal/services/news/impl.go +++ b/internal/services/news/impl.go @@ -16,7 +16,7 @@ type impl struct { } type News interface { - GetAll(string, string) ([]newsdomain.News, error) + GetAll(filter newsdomain.Filter) ([]newsdomain.News, error) GetBySlug(string) (*newsdomain.News, error) Create(newsdomain.NewsReq, string) error Update(string, newsdomain.NewsUpdate) error