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
|
Update(categorydomain.Category) error
|
||||||
|
|
||||||
GetAllModel() ([]categorydomain.Category, error)
|
GetAllModel() ([]categorydomain.Category, error)
|
||||||
GetByIDs([]string) ([]database.Category, error)
|
GetByIDs([]string) ([]categorydomain.Category, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import (
|
|||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
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 {
|
if err := a.db.Create(&spec).Error; err != nil {
|
||||||
return fmt.Errorf("failed to create news: %w", err)
|
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 {
|
type News interface {
|
||||||
GetAll() ([]newsdomain.News, error)
|
GetAll() ([]newsdomain.News, error)
|
||||||
GetAllModel() ([]database.News, error)
|
Create(newsdomain.News) error
|
||||||
Create(*newsdomain.News) error
|
|
||||||
CreateModel(database.News) error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(db *database.DB) News {
|
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
|
Create(tagdomain.TagReq) error
|
||||||
CreateModel(tagdomain.TagReq) error
|
CreateModel(tagdomain.TagReq) error
|
||||||
GetAll() ([]tagdomain.Tag, error)
|
GetAll() ([]tagdomain.Tag, error)
|
||||||
GetAllModel() ([]database.Tag, error)
|
|
||||||
GetByIDs([]string) ([]tagdomain.Tag, error)
|
GetByIDs([]string) ([]tagdomain.Tag, error)
|
||||||
GetBulks(ids []string) ([]database.Tag, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
|
|||||||
@ -72,7 +72,7 @@ func Create(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := newsSvc.CreateModel(spec, staffProfile.ID); err != nil {
|
if err := newsSvc.Create(spec, staffProfile.ID); err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
w,
|
w,
|
||||||
|
|||||||
@ -14,7 +14,7 @@ func GetAll(
|
|||||||
) {
|
) {
|
||||||
router.Get("/news", func(w http.ResponseWriter, r *http.Request) {
|
router.Get("/news", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
news, err := newsSvc.GetAllModel()
|
news, err := newsSvc.GetAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package categorydomain
|
|||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
type Category struct {
|
type Category struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id" gorm:"primaryKey"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Code string `json:"code"`
|
Code string `json:"code"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package newsdomain
|
package newsdomain
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"legalgo-BE-go/database"
|
categorydomain "legalgo-BE-go/internal/domain/category"
|
||||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -17,16 +17,16 @@ type NewsReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type News struct {
|
type News struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id" gorm:"primaryKey"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
FeaturedImage string `json:"featured_image"`
|
FeaturedImage string `json:"featured_image"`
|
||||||
Tags []tagdomain.Tag `json:"tags"`
|
Tags []tagdomain.Tag `gorm:"many2many:news_tags" json:"tags"`
|
||||||
Categories []database.Category `json:"categories"`
|
Categories []categorydomain.Category `gorm:"many2many:news_categories" json:"categories"`
|
||||||
IsPremium bool `json:"is_premium"`
|
IsPremium bool `json:"is_premium"`
|
||||||
Slug string `json:"slug"`
|
Slug string `json:"slug"`
|
||||||
AuthorID string `json:"author_id"`
|
AuthorID string `json:"author_id"`
|
||||||
LiveAt time.Time `json:"live_at"`
|
LiveAt time.Time `json:"live_at"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,16 @@
|
|||||||
package tagdomain
|
package tagdomain
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
type TagReq struct {
|
type TagReq struct {
|
||||||
Code string `json:"code" validate:"required"`
|
Code string `json:"code" validate:"required"`
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tag struct {
|
type Tag struct {
|
||||||
ID string `json:"id" gorm:"primaryKey"`
|
ID string `json:"id" gorm:"primaryKey"`
|
||||||
Code string `json:"code"`
|
Code string `json:"code"`
|
||||||
Name string `json:"name"`
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
newSpec := &newsdomain.News{
|
newSpec := newsdomain.News{
|
||||||
ID: uuid.NewString(),
|
ID: uuid.NewString(),
|
||||||
Title: spec.Title,
|
Title: spec.Title,
|
||||||
Content: spec.Content,
|
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
|
package newssvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"legalgo-BE-go/database"
|
|
||||||
categoryrepository "legalgo-BE-go/internal/accessor/category"
|
categoryrepository "legalgo-BE-go/internal/accessor/category"
|
||||||
newsrepository "legalgo-BE-go/internal/accessor/news"
|
newsrepository "legalgo-BE-go/internal/accessor/news"
|
||||||
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
||||||
@ -16,9 +15,7 @@ type impl struct {
|
|||||||
|
|
||||||
type News interface {
|
type News interface {
|
||||||
GetAll() ([]newsdomain.News, error)
|
GetAll() ([]newsdomain.News, error)
|
||||||
GetAllModel() ([]database.News, error)
|
|
||||||
Create(newsdomain.NewsReq, string) error
|
Create(newsdomain.NewsReq, string) error
|
||||||
CreateModel(newsdomain.NewsReq, string) error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
package tagsvc
|
package tagsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"legalgo-BE-go/database"
|
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (i *impl) GetAllModel() ([]database.Tag, error) {
|
func (i *impl) GetAllModel() ([]tagdomain.Tag, error) {
|
||||||
return i.tagRepo.GetAllModel()
|
return i.tagRepo.GetAll()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package tagsvc
|
package tagsvc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"legalgo-BE-go/database"
|
|
||||||
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
tagrepository "legalgo-BE-go/internal/accessor/tag"
|
||||||
tagdomain "legalgo-BE-go/internal/domain/tag"
|
tagdomain "legalgo-BE-go/internal/domain/tag"
|
||||||
)
|
)
|
||||||
@ -13,7 +12,7 @@ type impl struct {
|
|||||||
type Tag interface {
|
type Tag interface {
|
||||||
Create(tagdomain.TagReq) error
|
Create(tagdomain.TagReq) error
|
||||||
GetAll() ([]tagdomain.Tag, error)
|
GetAll() ([]tagdomain.Tag, error)
|
||||||
GetAllModel() ([]database.Tag, error)
|
GetAllModel() ([]tagdomain.Tag, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(
|
func New(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user