fix: get news by query category and tags filters
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package categoryrepository
|
||||
|
||||
import (
|
||||
categorydomain "legalgo-BE-go/internal/domain/category"
|
||||
)
|
||||
|
||||
func (a *accessor) GetIDByCode(code string) (string, error) {
|
||||
var category string
|
||||
|
||||
if err := a.db.
|
||||
Model(&categorydomain.Category{}).
|
||||
Select("id").Where("code = ?", code).
|
||||
Pluck("id", &category).
|
||||
Error; err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return category, nil
|
||||
}
|
||||
@@ -12,6 +12,7 @@ type accessor struct {
|
||||
type Category interface {
|
||||
GetAllModel() ([]categorydomain.Category, error)
|
||||
GetByIDs([]string) ([]categorydomain.Category, error)
|
||||
GetIDByCode(string) (string, error)
|
||||
CreateModel(categorydomain.CategoryReq) error
|
||||
Update(categorydomain.Category) error
|
||||
Delete(string) error
|
||||
|
||||
@@ -2,13 +2,24 @@ package newsrepository
|
||||
|
||||
import newsdomain "legalgo-BE-go/internal/domain/news"
|
||||
|
||||
func (a *accessor) GetAll() ([]newsdomain.News, error) {
|
||||
func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) {
|
||||
var news []newsdomain.News
|
||||
|
||||
if err := a.db.
|
||||
query := a.db.
|
||||
Preload("Tags").
|
||||
Preload("Categories").
|
||||
Preload("Author").
|
||||
Preload("Author")
|
||||
|
||||
if filter.Category != "" {
|
||||
query = query.Joins("JOIN news_categories nc ON nc.news_id = news.id").
|
||||
Where("nc.category_id = ?", filter.Category)
|
||||
}
|
||||
|
||||
if len(filter.Tags) > 0 {
|
||||
query = query.Joins("JOIN news_tags nt ON nt.news_id = news.id").
|
||||
Where("nt.tag_id IN (?)", filter.Tags)
|
||||
}
|
||||
|
||||
if err := query.
|
||||
Find(&news).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ type accessor struct {
|
||||
}
|
||||
|
||||
type News interface {
|
||||
GetAll() ([]newsdomain.News, error)
|
||||
GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error)
|
||||
GetBySlug(string) (*newsdomain.News, error)
|
||||
Create(newsdomain.News) error
|
||||
Update(newsdomain.News) error
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package tagrepository
|
||||
|
||||
import tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||
|
||||
func (a *accessor) GetIDsByCodes(codes []string) ([]string, error) {
|
||||
var tags []string
|
||||
|
||||
if err := a.db.
|
||||
Model(&tagdomain.Tag{}).
|
||||
Select("id").Where("code IN ?", codes).
|
||||
Pluck("id", &tags).
|
||||
Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tags, nil
|
||||
}
|
||||
@@ -13,6 +13,7 @@ type TagAccessor interface {
|
||||
Create(tagdomain.TagReq) error
|
||||
GetAll() ([]tagdomain.Tag, error)
|
||||
GetByIDs([]string) ([]tagdomain.Tag, error)
|
||||
GetIDsByCodes([]string) ([]string, error)
|
||||
Update(tagdomain.Tag) error
|
||||
Delete(string) error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user