diff --git a/internal/accessor/news/get_all.go b/internal/accessor/news/get_all.go index 34098e6..ed0d306 100644 --- a/internal/accessor/news/get_all.go +++ b/internal/accessor/news/get_all.go @@ -12,9 +12,9 @@ const ( notActive is_active = "false" ) -func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) { - var news []newsdomain.News - query := a.db. +func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.NewsResponse, error) { + var news []newsdomain.NewsResponse + query := a.db.Table("news"). Preload("Tags"). Preload("Categories"). Preload("Author"). @@ -39,7 +39,7 @@ func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, erro } query. - Select("news.*, COUNT(content_logs.content_id) as clicked"). + Select("news.*, COUNT(content_logs.content_id) as views"). Group("news.id"). Order("news.created_at DESC") diff --git a/internal/accessor/news/impl.go b/internal/accessor/news/impl.go index dadaf07..74f3c31 100644 --- a/internal/accessor/news/impl.go +++ b/internal/accessor/news/impl.go @@ -10,7 +10,7 @@ type accessor struct { } type News interface { - GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) + GetAll(filter newsdomain.NewsFilter) ([]newsdomain.NewsResponse, error) GetBySlug(string) (*newsdomain.News, error) GetByID(string) (*newsdomain.News, error) Create(newsdomain.News) error diff --git a/internal/api/http/news/get_all.go b/internal/api/http/news/get_all.go index 362afb2..75689c0 100644 --- a/internal/api/http/news/get_all.go +++ b/internal/api/http/news/get_all.go @@ -15,7 +15,7 @@ func GetAll( ) { router.Get("/news", func(w http.ResponseWriter, r *http.Request) { var ( - news []newsdomain.News + news []newsdomain.NewsResponse err error ) ctx := r.Context() diff --git a/internal/domain/news/spec.go b/internal/domain/news/spec.go index 6efca53..11dfc06 100644 --- a/internal/domain/news/spec.go +++ b/internal/domain/news/spec.go @@ -27,19 +27,23 @@ type News struct { Title string `json:"title"` Content string `json:"content"` FeaturedImage string `json:"featured_image"` - Tags []tagdomain.Tag `gorm:"many2many:news_tags" json:"tags"` - Categories []categorydomain.Category `gorm:"many2many:news_categories" json:"categories"` + Tags []tagdomain.Tag `gorm:"many2many:news_tags;foreignKey:ID;joinForeignKey:news_id;References:ID;joinReferences:tag_id" json:"tags"` + Categories []categorydomain.Category `gorm:"many2many:news_categories;foreignKey:ID;joinForeignKey:news_id;References:ID;joinReferences:category_id" json:"categories"` IsPremium bool `json:"is_premium"` Slug string `json:"slug"` AuthorID string `json:"author_id"` LiveAt time.Time `json:"live_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` - Clicked int64 `json:"clicked" gorm:"-"` Author Staff `json:"author"` } +type NewsResponse struct { + News + Views int64 `json:"views"` +} + type NewsUpdate struct { ID string `json:"id"` Title string `json:"title"` diff --git a/internal/services/news/create.go b/internal/services/news/create.go index dd513f6..656be4e 100644 --- a/internal/services/news/create.go +++ b/internal/services/news/create.go @@ -37,7 +37,6 @@ func (i *impl) Create(spec newsdomain.NewsReq, staffId string) error { AuthorID: staffId, Tags: tags, Categories: categories, - Clicked: 0, } if err := i.newsRepo.Create(newSpec); err != nil { diff --git a/internal/services/news/get_all.go b/internal/services/news/get_all.go index 3d15016..f5689c3 100644 --- a/internal/services/news/get_all.go +++ b/internal/services/news/get_all.go @@ -5,12 +5,12 @@ import ( "strings" ) -func (i *impl) GetAll(filter newsdomain.Filter) ([]newsdomain.News, error) { +func (i *impl) GetAll(filter newsdomain.Filter) ([]newsdomain.NewsResponse, error) { var err error categories := []string{} tags := []string{} - news := []newsdomain.News{} + news := []newsdomain.NewsResponse{} tagCodeArr := strings.Split(filter.Tags, " ") categoryCodeArr := strings.Split(filter.Category, " ") diff --git a/internal/services/news/impl.go b/internal/services/news/impl.go index a5626c6..ff519d1 100644 --- a/internal/services/news/impl.go +++ b/internal/services/news/impl.go @@ -16,7 +16,7 @@ type impl struct { } type News interface { - GetAll(filter newsdomain.Filter) ([]newsdomain.News, error) + GetAll(filter newsdomain.Filter) ([]newsdomain.NewsResponse, error) GetBySlug(string) (*newsdomain.News, error) GetByID(string) (*newsdomain.News, error) Create(newsdomain.NewsReq, string) error