2025-03-02 04:36:17 +08:00
|
|
|
package newsrepository
|
|
|
|
|
|
2025-03-20 13:13:28 +08:00
|
|
|
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"
|
|
|
|
|
)
|
2025-03-02 04:36:17 +08:00
|
|
|
|
2025-03-24 15:24:52 +08:00
|
|
|
func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.NewsResponse, error) {
|
|
|
|
|
var news []newsdomain.NewsResponse
|
|
|
|
|
query := a.db.Table("news").
|
2025-03-06 11:06:06 +08:00
|
|
|
Preload("Tags").
|
|
|
|
|
Preload("Categories").
|
2025-03-20 11:11:08 +08:00
|
|
|
Preload("Author").
|
|
|
|
|
Joins("LEFT JOIN content_logs ON content_logs.content_id = news.id")
|
2025-03-07 00:55:50 +08:00
|
|
|
|
2025-03-07 14:30:31 +08:00
|
|
|
if len(filter.Category) > 0 {
|
2025-03-07 00:55:50 +08:00
|
|
|
query = query.Joins("JOIN news_categories nc ON nc.news_id = news.id").
|
2025-03-07 14:30:31 +08:00
|
|
|
Where("nc.category_id IN (?)", filter.Category)
|
2025-03-07 00:55:50 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-20 13:13:28 +08:00
|
|
|
if filter.Active == string(active) {
|
|
|
|
|
query = query.Where("news.live_at <= ?", timeutils.Now())
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-24 18:11:08 +08:00
|
|
|
if filter.Search != "" {
|
|
|
|
|
query = query.Where("news.title ILIKE ?", "%"+filter.Search+"%")
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-20 11:11:08 +08:00
|
|
|
query.
|
2025-03-24 15:24:52 +08:00
|
|
|
Select("news.*, COUNT(content_logs.content_id) as views").
|
2025-03-20 11:11:08 +08:00
|
|
|
Group("news.id").
|
|
|
|
|
Order("news.created_at DESC")
|
|
|
|
|
|
2025-03-07 00:55:50 +08:00
|
|
|
if err := query.
|
2025-03-06 11:06:06 +08:00
|
|
|
Find(&news).Error; err != nil {
|
2025-03-02 04:36:17 +08:00
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return news, nil
|
|
|
|
|
}
|