feat: news router

This commit is contained in:
ericprd
2025-03-02 04:36:17 +08:00
parent f4ae93bc48
commit 915f12eaf7
49 changed files with 863 additions and 132 deletions
+2 -1
View File
@@ -3,5 +3,6 @@ package categorysvc
import categorydomain "legalgo-BE-go/internal/domain/category"
func (i *impl) Create(spec categorydomain.CategoryReq) error {
return i.categoryRepo.Create(spec)
return i.categoryRepo.CreateModel(spec)
// return i.categoryRepo.Create(spec)
}
@@ -0,0 +1,9 @@
package categorysvc
import (
"legalgo-BE-go/database"
)
func (i *impl) GetAllModel() ([]database.CategoryModel, error) {
return i.categoryRepo.GetAllModel()
}
+2
View File
@@ -1,6 +1,7 @@
package categorysvc
import (
"legalgo-BE-go/database"
categoryrepository "legalgo-BE-go/internal/accessor/category"
categorydomain "legalgo-BE-go/internal/domain/category"
)
@@ -12,6 +13,7 @@ type impl struct {
type Category interface {
Create(categorydomain.CategoryReq) error
GetAll() ([]categorydomain.Category, error)
GetAllModel() ([]database.CategoryModel, error)
}
func New(
+2
View File
@@ -3,6 +3,7 @@ package services
import (
serviceauth "legalgo-BE-go/internal/services/auth"
categorysvc "legalgo-BE-go/internal/services/category"
newssvc "legalgo-BE-go/internal/services/news"
subscribesvc "legalgo-BE-go/internal/services/subscribe"
subscribeplansvc "legalgo-BE-go/internal/services/subscribe_plan"
tagsvc "legalgo-BE-go/internal/services/tag"
@@ -17,5 +18,6 @@ var Module = fx.Module("services",
subscribesvc.New,
tagsvc.New,
categorysvc.New,
newssvc.New,
),
)
+47
View File
@@ -0,0 +1,47 @@
package newssvc
import (
newsdomain "legalgo-BE-go/internal/domain/news"
"strings"
"time"
"github.com/google/uuid"
)
func (i *impl) Create(spec newsdomain.NewsReq, staffId string) error {
slug := strings.ToLower(strings.ReplaceAll(spec.Title, " ", "-"))
tags, err := i.tagRepo.GetByIDs(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 := &newsdomain.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.Create(newSpec); err != nil {
return err
}
return nil
}
+48
View File
@@ -0,0 +1,48 @@
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.GetBulks(spec.Categories)
if err != nil {
return err
}
parsedTime, err := time.Parse(time.RFC3339, spec.LiveAt)
if err != nil {
return err
}
newSpec := database.NewsModel{
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
}
+7
View File
@@ -0,0 +1,7 @@
package newssvc
import newsdomain "legalgo-BE-go/internal/domain/news"
func (i *impl) GetAll() ([]newsdomain.News, error) {
return i.newsRepo.GetAll()
}
+9
View File
@@ -0,0 +1,9 @@
package newssvc
import (
"legalgo-BE-go/database"
)
func (i *impl) GetAllModel() ([]database.NewsModel, error) {
return i.newsRepo.GetAllModel()
}
+34
View File
@@ -0,0 +1,34 @@
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"
newsdomain "legalgo-BE-go/internal/domain/news"
)
type impl struct {
newsRepo newsrepository.News
tagRepo tagrepository.TagAccessor
categoryRepo categoryrepository.Category
}
type News interface {
GetAll() ([]newsdomain.News, error)
GetAllModel() ([]database.NewsModel, error)
Create(newsdomain.NewsReq, string) error
CreateModel(newsdomain.NewsReq, string) error
}
func New(
newsRepo newsrepository.News,
tagRepo tagrepository.TagAccessor,
categoryRepo categoryrepository.Category,
) News {
return &impl{
newsRepo,
tagRepo,
categoryRepo,
}
}
+2 -1
View File
@@ -3,5 +3,6 @@ package tagsvc
import tagdomain "legalgo-BE-go/internal/domain/tag"
func (i *impl) Create(spec tagdomain.TagReq) error {
return i.tagRepo.Create(spec)
// return i.tagRepo.Create(spec)
return i.tagRepo.CreateModel(spec)
}
+9
View File
@@ -0,0 +1,9 @@
package tagsvc
import (
"legalgo-BE-go/database"
)
func (i *impl) GetAllModel() ([]database.TagModel, error) {
return i.tagRepo.GetAllModel()
}
+2
View File
@@ -1,6 +1,7 @@
package tagsvc
import (
"legalgo-BE-go/database"
tagrepository "legalgo-BE-go/internal/accessor/tag"
tagdomain "legalgo-BE-go/internal/domain/tag"
)
@@ -12,6 +13,7 @@ type impl struct {
type TagIntf interface {
Create(tagdomain.TagReq) error
GetAll() ([]tagdomain.Tag, error)
GetAllModel() ([]database.TagModel, error)
}
func New(