fix: create and get news
This commit is contained in:
parent
dd109c8aa0
commit
5c699dfa53
@ -1,15 +0,0 @@
|
||||
package categoryrepository
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
)
|
||||
|
||||
func (a *accessor) GetByIDs(ids []string) ([]database.Category, error) {
|
||||
var categories []database.Category
|
||||
|
||||
if err := a.DB.Find(&categories, "id IN ?", ids).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return categories, nil
|
||||
}
|
||||
15
internal/accessor/category/get_by_ids.go
Normal file
15
internal/accessor/category/get_by_ids.go
Normal file
@ -0,0 +1,15 @@
|
||||
package categoryrepository
|
||||
|
||||
import (
|
||||
categorydomain "legalgo-BE-go/internal/domain/category"
|
||||
)
|
||||
|
||||
func (a *accessor) GetByIDs(ids []string) ([]categorydomain.Category, error) {
|
||||
var categories []categorydomain.Category
|
||||
|
||||
if err := a.DB.Find(&categories, "id IN ?", ids).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return categories, nil
|
||||
}
|
||||
@ -14,7 +14,7 @@ type Category interface {
|
||||
Update(categorydomain.Category) error
|
||||
|
||||
GetAllModel() ([]categorydomain.Category, error)
|
||||
GetByIDs([]string) ([]database.Category, error)
|
||||
GetByIDs([]string) ([]categorydomain.Category, error)
|
||||
}
|
||||
|
||||
func New(
|
||||
|
||||
@ -5,7 +5,7 @@ import (
|
||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
||||
)
|
||||
|
||||
func (a *accessor) Create(spec *newsdomain.News) error {
|
||||
func (a *accessor) Create(spec newsdomain.News) error {
|
||||
if err := a.db.Create(&spec).Error; err != nil {
|
||||
return fmt.Errorf("failed to create news: %w", err)
|
||||
}
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
package newsrepository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"legalgo-BE-go/database"
|
||||
)
|
||||
|
||||
func (a *accessor) CreateModel(spec database.News) error {
|
||||
if err := a.db.Create(&spec).Error; err != nil {
|
||||
return fmt.Errorf("failed to create news: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
package newsrepository
|
||||
|
||||
import "legalgo-BE-go/database"
|
||||
|
||||
func (a *accessor) GetAllModel() ([]database.News, error) {
|
||||
var news []database.News
|
||||
|
||||
if err := a.db.Preload("Tags").Preload("Categories").Find(&news).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return news, nil
|
||||
}
|
||||
@ -11,9 +11,7 @@ type accessor struct {
|
||||
|
||||
type News interface {
|
||||
GetAll() ([]newsdomain.News, error)
|
||||
GetAllModel() ([]database.News, error)
|
||||
Create(*newsdomain.News) error
|
||||
CreateModel(database.News) error
|
||||
Create(newsdomain.News) error
|
||||
}
|
||||
|
||||
func New(db *database.DB) News {
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
package tagrepository
|
||||
|
||||
import "legalgo-BE-go/database"
|
||||
|
||||
func (acc *accessor) GetAllModel() ([]database.Tag, error) {
|
||||
var tags []database.Tag
|
||||
|
||||
if err := acc.DB.Find(&tags).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tags, nil
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
package tagrepository
|
||||
|
||||
import "legalgo-BE-go/database"
|
||||
|
||||
func (a *accessor) GetBulks(ids []string) ([]database.Tag, error) {
|
||||
var tags []database.Tag
|
||||
|
||||
if err := a.DB.Find(&tags, "id IN ?", ids).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tags, nil
|
||||
}
|
||||
@ -13,9 +13,7 @@ type TagAccessor interface {
|
||||
Create(tagdomain.TagReq) error
|
||||
CreateModel(tagdomain.TagReq) error
|
||||
GetAll() ([]tagdomain.Tag, error)
|
||||
GetAllModel() ([]database.Tag, error)
|
||||
GetByIDs([]string) ([]tagdomain.Tag, error)
|
||||
GetBulks(ids []string) ([]database.Tag, error)
|
||||
}
|
||||
|
||||
func New(
|
||||
|
||||
@ -72,7 +72,7 @@ func Create(
|
||||
return
|
||||
}
|
||||
|
||||
if err := newsSvc.CreateModel(spec, staffProfile.ID); err != nil {
|
||||
if err := newsSvc.Create(spec, staffProfile.ID); err != nil {
|
||||
response.ResponseWithErrorCode(
|
||||
ctx,
|
||||
w,
|
||||
|
||||
@ -14,7 +14,7 @@ func GetAll(
|
||||
) {
|
||||
router.Get("/news", func(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
news, err := newsSvc.GetAllModel()
|
||||
news, err := newsSvc.GetAll()
|
||||
if err != nil {
|
||||
response.ResponseWithErrorCode(
|
||||
ctx,
|
||||
|
||||
@ -3,7 +3,7 @@ package categorydomain
|
||||
import "time"
|
||||
|
||||
type Category struct {
|
||||
ID string `json:"id"`
|
||||
ID string `json:"id" gorm:"primaryKey"`
|
||||
Name string `json:"name"`
|
||||
Code string `json:"code"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package newsdomain
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
categorydomain "legalgo-BE-go/internal/domain/category"
|
||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||
"time"
|
||||
)
|
||||
@ -17,12 +17,12 @@ type NewsReq struct {
|
||||
}
|
||||
|
||||
type News struct {
|
||||
ID string `json:"id"`
|
||||
ID string `json:"id" gorm:"primaryKey"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
FeaturedImage string `json:"featured_image"`
|
||||
Tags []tagdomain.Tag `json:"tags"`
|
||||
Categories []database.Category `json:"categories"`
|
||||
Tags []tagdomain.Tag `gorm:"many2many:news_tags" json:"tags"`
|
||||
Categories []categorydomain.Category `gorm:"many2many:news_categories" json:"categories"`
|
||||
IsPremium bool `json:"is_premium"`
|
||||
Slug string `json:"slug"`
|
||||
AuthorID string `json:"author_id"`
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package tagdomain
|
||||
|
||||
import "time"
|
||||
|
||||
type TagReq struct {
|
||||
Code string `json:"code" validate:"required"`
|
||||
Name string `json:"name" validate:"required"`
|
||||
@ -9,4 +11,6 @@ type Tag struct {
|
||||
ID string `json:"id" gorm:"primaryKey"`
|
||||
Code string `json:"code"`
|
||||
Name string `json:"name"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ func (i *impl) Create(spec newsdomain.NewsReq, staffId string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
newSpec := &newsdomain.News{
|
||||
newSpec := newsdomain.News{
|
||||
ID: uuid.NewString(),
|
||||
Title: spec.Title,
|
||||
Content: spec.Content,
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
package newssvc
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func (i *impl) CreateModel(spec newsdomain.NewsReq, staffId string) error {
|
||||
slug := strings.ToLower(strings.ReplaceAll(spec.Title, " ", "-"))
|
||||
|
||||
tags, err := i.tagRepo.GetBulks(spec.Tags)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
categories, err := i.categoryRepo.GetByIDs(spec.Categories)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
parsedTime, err := time.Parse(time.RFC3339, spec.LiveAt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newSpec := database.News{
|
||||
ID: uuid.NewString(),
|
||||
Title: spec.Title,
|
||||
Content: spec.Content,
|
||||
FeaturedImage: spec.FeaturedImage,
|
||||
IsPremium: spec.IsPremium,
|
||||
Slug: slug,
|
||||
LiveAt: parsedTime,
|
||||
AuthorID: staffId,
|
||||
Tags: tags,
|
||||
Categories: categories,
|
||||
}
|
||||
|
||||
if err := i.newsRepo.CreateModel(newSpec); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
package newssvc
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
)
|
||||
|
||||
func (i *impl) GetAllModel() ([]database.News, error) {
|
||||
return i.newsRepo.GetAllModel()
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
package newssvc
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
categoryrepository "legalgo-BE-go/internal/accessor/category"
|
||||
newsrepository "legalgo-BE-go/internal/accessor/news"
|
||||
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
||||
@ -16,9 +15,7 @@ type impl struct {
|
||||
|
||||
type News interface {
|
||||
GetAll() ([]newsdomain.News, error)
|
||||
GetAllModel() ([]database.News, error)
|
||||
Create(newsdomain.NewsReq, string) error
|
||||
CreateModel(newsdomain.NewsReq, string) error
|
||||
}
|
||||
|
||||
func New(
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package tagsvc
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||
)
|
||||
|
||||
func (i *impl) GetAllModel() ([]database.Tag, error) {
|
||||
return i.tagRepo.GetAllModel()
|
||||
func (i *impl) GetAllModel() ([]tagdomain.Tag, error) {
|
||||
return i.tagRepo.GetAll()
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package tagsvc
|
||||
|
||||
import (
|
||||
"legalgo-BE-go/database"
|
||||
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||
)
|
||||
@ -13,7 +12,7 @@ type impl struct {
|
||||
type Tag interface {
|
||||
Create(tagdomain.TagReq) error
|
||||
GetAll() ([]tagdomain.Tag, error)
|
||||
GetAllModel() ([]database.Tag, error)
|
||||
GetAllModel() ([]tagdomain.Tag, error)
|
||||
}
|
||||
|
||||
func New(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user