Compare commits
No commits in common. "51b50a31328f1393beb2ad43802ae80d7389e947" and "2046021e01c6b0a5ea32ca5dffcb04b6f6c12fa0" have entirely different histories.
51b50a3132
...
2046021e01
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
bin
|
bin
|
||||||
.env
|
.env
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/cmd/legalgo/env
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import (
|
|||||||
|
|
||||||
type Staff struct {
|
type Staff struct {
|
||||||
ID string `gorm:"primaryKey" json:"id"`
|
ID string `gorm:"primaryKey" json:"id"`
|
||||||
Name string `gorm:"default:null" json:"name"`
|
Name string `gorm:"default:null;unique" json:"name"`
|
||||||
ProfilePicture string `gorm:"default:null" json:"profile_picture"`
|
ProfilePicture string `gorm:"default:null" json:"profile_picture"`
|
||||||
Email string `gorm:"unique;not null" json:"email"`
|
Email string `gorm:"unique;not null" json:"email"`
|
||||||
Password string `gorm:"not null" json:"password"`
|
Password string `gorm:"not null" json:"password"`
|
||||||
|
|||||||
@ -1,19 +0,0 @@
|
|||||||
package categoryrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
categorydomain "legalgo-BE-go/internal/domain/category"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (a *accessor) GetIDByCode(code string) (string, error) {
|
|
||||||
var category string
|
|
||||||
|
|
||||||
if err := a.db.
|
|
||||||
Model(&categorydomain.Category{}).
|
|
||||||
Select("id").Where("code = ?", code).
|
|
||||||
Pluck("id", &category).
|
|
||||||
Error; err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return category, nil
|
|
||||||
}
|
|
||||||
@ -12,7 +12,6 @@ type accessor struct {
|
|||||||
type Category interface {
|
type Category interface {
|
||||||
GetAllModel() ([]categorydomain.Category, error)
|
GetAllModel() ([]categorydomain.Category, error)
|
||||||
GetByIDs([]string) ([]categorydomain.Category, error)
|
GetByIDs([]string) ([]categorydomain.Category, error)
|
||||||
GetIDByCode(string) (string, error)
|
|
||||||
CreateModel(categorydomain.CategoryReq) error
|
CreateModel(categorydomain.CategoryReq) error
|
||||||
Update(categorydomain.Category) error
|
Update(categorydomain.Category) error
|
||||||
Delete(string) error
|
Delete(string) error
|
||||||
|
|||||||
@ -2,24 +2,13 @@ package newsrepository
|
|||||||
|
|
||||||
import newsdomain "legalgo-BE-go/internal/domain/news"
|
import newsdomain "legalgo-BE-go/internal/domain/news"
|
||||||
|
|
||||||
func (a *accessor) GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error) {
|
func (a *accessor) GetAll() ([]newsdomain.News, error) {
|
||||||
var news []newsdomain.News
|
var news []newsdomain.News
|
||||||
query := a.db.
|
|
||||||
|
if err := a.db.
|
||||||
Preload("Tags").
|
Preload("Tags").
|
||||||
Preload("Categories").
|
Preload("Categories").
|
||||||
Preload("Author")
|
Preload("Author").
|
||||||
|
|
||||||
if filter.Category != "" {
|
|
||||||
query = query.Joins("JOIN news_categories nc ON nc.news_id = news.id").
|
|
||||||
Where("nc.category_id = ?", filter.Category)
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := query.
|
|
||||||
Find(&news).Error; err != nil {
|
Find(&news).Error; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,10 +10,9 @@ type accessor struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type News interface {
|
type News interface {
|
||||||
GetAll(filter newsdomain.NewsFilter) ([]newsdomain.News, error)
|
GetAll() ([]newsdomain.News, error)
|
||||||
GetBySlug(string) (*newsdomain.News, error)
|
GetBySlug(string) (*newsdomain.News, error)
|
||||||
Create(newsdomain.News) error
|
Create(newsdomain.News) error
|
||||||
Update(newsdomain.News) error
|
|
||||||
Delete(string) error
|
Delete(string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,66 +0,0 @@
|
|||||||
package newsrepository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
|
||||||
|
|
||||||
"gorm.io/gorm/clause"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (a *accessor) Update(spec newsdomain.News) error {
|
|
||||||
tx := a.db.Begin()
|
|
||||||
if err := tx.Clauses(clause.OnConflict{
|
|
||||||
Columns: []clause.Column{{Name: "id"}},
|
|
||||||
DoUpdates: clause.AssignmentColumns([]string{
|
|
||||||
"title",
|
|
||||||
"content",
|
|
||||||
"featured_image",
|
|
||||||
"is_premium",
|
|
||||||
"slug",
|
|
||||||
"author_id",
|
|
||||||
"live_at",
|
|
||||||
"updated_at",
|
|
||||||
}),
|
|
||||||
}).Select(
|
|
||||||
"title",
|
|
||||||
"content",
|
|
||||||
"featured_image",
|
|
||||||
"is_premium",
|
|
||||||
"slug",
|
|
||||||
"author_id",
|
|
||||||
"live_at",
|
|
||||||
"updated_at",
|
|
||||||
).Save(&spec).Error; err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return fmt.Errorf("failed to update news: %v", err)
|
|
||||||
}
|
|
||||||
if len(spec.Tags) < 1 {
|
|
||||||
if err := tx.Model(&spec).Association("Tags").Clear(); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return fmt.Errorf("failed to clear tags: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(spec.Categories) < 1 {
|
|
||||||
if err := tx.Model(&spec).Association("Categories").Clear(); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return fmt.Errorf("failed to clear categories: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := tx.Model(&spec).Association("Tags").Append(spec.Tags); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return fmt.Errorf("failed to add tags: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := tx.Model(&spec).Association("Categories").Append(spec.Categories); err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
return fmt.Errorf("failed to add categories: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := tx.Commit().Error; err != nil {
|
|
||||||
return fmt.Errorf("failed to commit transaction: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
package tagrepository
|
|
||||||
|
|
||||||
import tagdomain "legalgo-BE-go/internal/domain/tag"
|
|
||||||
|
|
||||||
func (a *accessor) GetIDsByCodes(codes []string) ([]string, error) {
|
|
||||||
var tags []string
|
|
||||||
|
|
||||||
if err := a.db.
|
|
||||||
Model(&tagdomain.Tag{}).
|
|
||||||
Select("id").Where("code IN ?", codes).
|
|
||||||
Pluck("id", &tags).
|
|
||||||
Error; err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return tags, nil
|
|
||||||
}
|
|
||||||
@ -13,7 +13,6 @@ type TagAccessor interface {
|
|||||||
Create(tagdomain.TagReq) error
|
Create(tagdomain.TagReq) error
|
||||||
GetAll() ([]tagdomain.Tag, error)
|
GetAll() ([]tagdomain.Tag, error)
|
||||||
GetByIDs([]string) ([]tagdomain.Tag, error)
|
GetByIDs([]string) ([]tagdomain.Tag, error)
|
||||||
GetIDsByCodes([]string) ([]string, error)
|
|
||||||
Update(tagdomain.Tag) error
|
Update(tagdomain.Tag) error
|
||||||
Delete(string) error
|
Delete(string) error
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,8 +4,8 @@ import (
|
|||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ur *accessor) CreateUser(spec userdomain.User) error {
|
func (ur *UserRepository) CreateUser(spec userdomain.User) error {
|
||||||
if err := ur.db.Create(&spec).Error; err != nil {
|
if err := ur.DB.Create(&spec).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,14 +7,14 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ur *accessor) GetUserByEmail(email string) (*userdomain.User, error) {
|
func (ur *UserRepository) GetUserByEmail(email string) (*userdomain.User, error) {
|
||||||
var user *userdomain.User
|
var user *userdomain.User
|
||||||
|
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return nil, errors.New("email is empty")
|
return nil, errors.New("email is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.First(&user, "email = ?", email).Error; err != nil {
|
if err := ur.DB.First(&user, "email = ?", email).Error; err != nil {
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
return nil, errors.New("user not found")
|
return nil, errors.New("user not found")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,17 +6,17 @@ import (
|
|||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ur *accessor) GetUserByID(id string) (*userdomain.User, error) {
|
func (ur *UserRepository) GetUserByID(email string) (*userdomain.User, error) {
|
||||||
var user userdomain.User
|
var user userdomain.User
|
||||||
|
|
||||||
if id == "" {
|
if email == "" {
|
||||||
return nil, errors.New("id is empty")
|
return nil, errors.New("email is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.
|
if err := ur.DB.
|
||||||
Preload("Subscribe").
|
Preload("Subscribe").
|
||||||
Preload("Subscribe.SubscribePlan").
|
Preload("Subscribe.SubscribePlan").
|
||||||
First(&user, "id = ?", id).Error; err != nil {
|
First(&user, "email = ?", email).Error; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,14 +5,14 @@ import (
|
|||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ur *accessor) GetUserProfile(email string) (*userdomain.UserProfile, error) {
|
func (ur *UserRepository) GetUserProfile(email string) (*userdomain.UserProfile, error) {
|
||||||
var user *userdomain.User
|
var user *userdomain.User
|
||||||
|
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return nil, errors.New("email is empty")
|
return nil, errors.New("email is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ur.db.
|
if err := ur.DB.
|
||||||
Preload("Subscribe").
|
Preload("Subscribe").
|
||||||
Preload("Subscribe.SubscribePlan").
|
Preload("Subscribe.SubscribePlan").
|
||||||
First(&user, "email = ?", email).
|
First(&user, "email = ?", email).
|
||||||
|
|||||||
@ -5,11 +5,11 @@ import (
|
|||||||
userdomain "legalgo-BE-go/internal/domain/user"
|
userdomain "legalgo-BE-go/internal/domain/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
type accessor struct {
|
type UserRepository struct {
|
||||||
db *database.DB
|
DB *database.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
type User interface {
|
type UserIntf interface {
|
||||||
GetUserByEmail(string) (*userdomain.User, error)
|
GetUserByEmail(string) (*userdomain.User, error)
|
||||||
GetUserByID(string) (*userdomain.User, error)
|
GetUserByID(string) (*userdomain.User, error)
|
||||||
GetUserProfile(string) (*userdomain.UserProfile, error)
|
GetUserProfile(string) (*userdomain.UserProfile, error)
|
||||||
@ -18,6 +18,6 @@ type User interface {
|
|||||||
|
|
||||||
func New(
|
func New(
|
||||||
db *database.DB,
|
db *database.DB,
|
||||||
) User {
|
) UserIntf {
|
||||||
return &accessor{db}
|
return &UserRepository{db}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package newshttp
|
package newshttp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
|
||||||
newssvc "legalgo-BE-go/internal/services/news"
|
newssvc "legalgo-BE-go/internal/services/news"
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
"legalgo-BE-go/internal/utilities/response"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -14,18 +13,8 @@ func GetAll(
|
|||||||
newsSvc newssvc.News,
|
newsSvc newssvc.News,
|
||||||
) {
|
) {
|
||||||
router.Get("/news", func(w http.ResponseWriter, r *http.Request) {
|
router.Get("/news", func(w http.ResponseWriter, r *http.Request) {
|
||||||
var (
|
|
||||||
news []newsdomain.News
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
query := r.URL.Query()
|
news, err := newsSvc.GetAll()
|
||||||
|
|
||||||
category := query.Get("category")
|
|
||||||
tags := query.Get("tags")
|
|
||||||
|
|
||||||
news, err = newsSvc.GetAll(category, tags)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ResponseWithErrorCode(
|
response.ResponseWithErrorCode(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@ -6,6 +6,5 @@ var Module = fx.Module("news", fx.Invoke(
|
|||||||
GetAll,
|
GetAll,
|
||||||
GetBySlug,
|
GetBySlug,
|
||||||
Create,
|
Create,
|
||||||
Update,
|
|
||||||
Delete,
|
Delete,
|
||||||
))
|
))
|
||||||
|
|||||||
@ -1,97 +0,0 @@
|
|||||||
package newshttp
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
authmiddleware "legalgo-BE-go/internal/api/http/middleware/auth"
|
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
|
||||||
authsvc "legalgo-BE-go/internal/services/auth"
|
|
||||||
newssvc "legalgo-BE-go/internal/services/news"
|
|
||||||
"legalgo-BE-go/internal/utilities/response"
|
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/go-chi/chi/v5"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Update(
|
|
||||||
router chi.Router,
|
|
||||||
newsSvc newssvc.News,
|
|
||||||
authSvc authsvc.Auth,
|
|
||||||
) {
|
|
||||||
router.With(authmiddleware.Authorize()).
|
|
||||||
Put("/news/{news_id}/update", func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
ctx := r.Context()
|
|
||||||
newsID := chi.URLParam(r, "news_id")
|
|
||||||
|
|
||||||
if newsID == "" {
|
|
||||||
response.ResponseWithErrorCode(
|
|
||||||
ctx,
|
|
||||||
w,
|
|
||||||
fmt.Errorf("news id is not provided"),
|
|
||||||
response.ErrBadRequest.Code,
|
|
||||||
response.ErrBadRequest.HttpCode,
|
|
||||||
"news id is not provided",
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
destructedToken, err := utils.GetTokenDetail(r)
|
|
||||||
if err != nil {
|
|
||||||
response.ResponseWithErrorCode(
|
|
||||||
ctx,
|
|
||||||
w,
|
|
||||||
err,
|
|
||||||
response.ErrBadRequest.Code,
|
|
||||||
response.ErrBadRequest.HttpCode,
|
|
||||||
err.Error(),
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
staff, err := authSvc.GetStaffProfile(destructedToken.Email)
|
|
||||||
if err != nil {
|
|
||||||
response.ResponseWithErrorCode(
|
|
||||||
ctx,
|
|
||||||
w,
|
|
||||||
err,
|
|
||||||
response.ErrBadRequest.Code,
|
|
||||||
response.ErrBadRequest.HttpCode,
|
|
||||||
err.Error(),
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var spec newsdomain.NewsUpdate
|
|
||||||
if err := utils.UnmarshalBody(r, &spec); err != nil {
|
|
||||||
response.ResponseWithErrorCode(
|
|
||||||
ctx,
|
|
||||||
w,
|
|
||||||
err,
|
|
||||||
response.ErrBadRequest.Code,
|
|
||||||
response.ErrBadRequest.HttpCode,
|
|
||||||
err.Error(),
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
spec.ID = newsID
|
|
||||||
|
|
||||||
if err := newsSvc.Update(staff.ID, spec); err != nil {
|
|
||||||
response.ResponseWithErrorCode(
|
|
||||||
ctx,
|
|
||||||
w,
|
|
||||||
err,
|
|
||||||
response.ErrBadRequest.Code,
|
|
||||||
response.ErrBadRequest.HttpCode,
|
|
||||||
err.Error(),
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
response.RespondJsonSuccess(ctx, w, struct {
|
|
||||||
Message string
|
|
||||||
}{
|
|
||||||
Message: "news updated successfully.",
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@ -38,19 +38,3 @@ type News struct {
|
|||||||
|
|
||||||
Author Staff `json:"author"`
|
Author Staff `json:"author"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type NewsUpdate struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Title string `json:"title"`
|
|
||||||
Content string `json:"content"`
|
|
||||||
FeaturedImage string `json:"featured_image"`
|
|
||||||
Tags []string `json:"tags"`
|
|
||||||
Categories []string `json:"categories"`
|
|
||||||
IsPremium bool `json:"is_premium"`
|
|
||||||
LiveAt time.Time `json:"live_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type NewsFilter struct {
|
|
||||||
Tags []string
|
|
||||||
Category string
|
|
||||||
}
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
type impl struct {
|
type impl struct {
|
||||||
staffRepo staffrepository.Staff
|
staffRepo staffrepository.Staff
|
||||||
userRepo userrepository.User
|
userRepo userrepository.UserIntf
|
||||||
subsRepo subscriberepository.SubsIntf
|
subsRepo subscriberepository.SubsIntf
|
||||||
subsPlanRepo subscribeplanrepository.SubsPlanIntf
|
subsPlanRepo subscribeplanrepository.SubsPlanIntf
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ type Auth interface {
|
|||||||
|
|
||||||
func New(
|
func New(
|
||||||
staffRepo staffrepository.Staff,
|
staffRepo staffrepository.Staff,
|
||||||
userRepo userrepository.User,
|
userRepo userrepository.UserIntf,
|
||||||
subsRepo subscriberepository.SubsIntf,
|
subsRepo subscriberepository.SubsIntf,
|
||||||
subsPlanRepo subscribeplanrepository.SubsPlanIntf,
|
subsPlanRepo subscribeplanrepository.SubsPlanIntf,
|
||||||
) Auth {
|
) Auth {
|
||||||
|
|||||||
@ -2,14 +2,14 @@ package newssvc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
newsdomain "legalgo-BE-go/internal/domain/news"
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (i *impl) Create(spec newsdomain.NewsReq, staffId string) error {
|
func (i *impl) Create(spec newsdomain.NewsReq, staffId string) error {
|
||||||
slug := utils.TitleToSlug(spec.Title)
|
slug := strings.ToLower(strings.ReplaceAll(spec.Title, " ", "-"))
|
||||||
|
|
||||||
tags, err := i.tagRepo.GetByIDs(spec.Tags)
|
tags, err := i.tagRepo.GetByIDs(spec.Tags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -1,46 +1,7 @@
|
|||||||
package newssvc
|
package newssvc
|
||||||
|
|
||||||
import (
|
import newsdomain "legalgo-BE-go/internal/domain/news"
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (i *impl) GetAll(categoryCode, tagCodes string) ([]newsdomain.News, error) {
|
func (i *impl) GetAll() ([]newsdomain.News, error) {
|
||||||
var (
|
return i.newsRepo.GetAll()
|
||||||
category string
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
tags := []string{}
|
|
||||||
news := []newsdomain.News{}
|
|
||||||
|
|
||||||
tagCodeArr := strings.Split(tagCodes, " ")
|
|
||||||
|
|
||||||
if len(tagCodeArr) > 0 && tagCodeArr[0] != "" {
|
|
||||||
tags, err = i.tagRepo.GetIDsByCodes(tagCodeArr)
|
|
||||||
if err != nil {
|
|
||||||
return news, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(tags) < 1 {
|
|
||||||
return news, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if categoryCode != "" {
|
|
||||||
category, err = i.categoryRepo.GetIDByCode(categoryCode)
|
|
||||||
if err != nil {
|
|
||||||
return news, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if category == "" {
|
|
||||||
return news, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filter := newsdomain.NewsFilter{
|
|
||||||
Tags: tags,
|
|
||||||
Category: category,
|
|
||||||
}
|
|
||||||
return i.newsRepo.GetAll(filter)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import (
|
|||||||
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"
|
||||||
userrepository "legalgo-BE-go/internal/accessor/user_repository"
|
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
newsdomain "legalgo-BE-go/internal/domain/news"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,14 +11,12 @@ type impl struct {
|
|||||||
newsRepo newsrepository.News
|
newsRepo newsrepository.News
|
||||||
tagRepo tagrepository.TagAccessor
|
tagRepo tagrepository.TagAccessor
|
||||||
categoryRepo categoryrepository.Category
|
categoryRepo categoryrepository.Category
|
||||||
userRepo userrepository.User
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type News interface {
|
type News interface {
|
||||||
GetAll(string, string) ([]newsdomain.News, error)
|
GetAll() ([]newsdomain.News, error)
|
||||||
GetBySlug(string) (*newsdomain.News, error)
|
GetBySlug(string) (*newsdomain.News, error)
|
||||||
Create(newsdomain.NewsReq, string) error
|
Create(newsdomain.NewsReq, string) error
|
||||||
Update(string, newsdomain.NewsUpdate) error
|
|
||||||
Delete(string) error
|
Delete(string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,12 +24,10 @@ func New(
|
|||||||
newsRepo newsrepository.News,
|
newsRepo newsrepository.News,
|
||||||
tagRepo tagrepository.TagAccessor,
|
tagRepo tagrepository.TagAccessor,
|
||||||
categoryRepo categoryrepository.Category,
|
categoryRepo categoryrepository.Category,
|
||||||
userRepo userrepository.User,
|
|
||||||
) News {
|
) News {
|
||||||
return &impl{
|
return &impl{
|
||||||
newsRepo,
|
newsRepo,
|
||||||
tagRepo,
|
tagRepo,
|
||||||
categoryRepo,
|
categoryRepo,
|
||||||
userRepo,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,39 +0,0 @@
|
|||||||
package newssvc
|
|
||||||
|
|
||||||
import (
|
|
||||||
newsdomain "legalgo-BE-go/internal/domain/news"
|
|
||||||
timeutils "legalgo-BE-go/internal/utilities/time_utils"
|
|
||||||
"legalgo-BE-go/internal/utilities/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (i *impl) Update(id string, spec newsdomain.NewsUpdate) error {
|
|
||||||
tags, err := i.tagRepo.GetByIDs(spec.Tags)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
categories, err := i.categoryRepo.GetByIDs(spec.Categories)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
newSpec := newsdomain.News{
|
|
||||||
ID: spec.ID,
|
|
||||||
AuthorID: id,
|
|
||||||
UpdatedAt: timeutils.Now(),
|
|
||||||
Slug: utils.TitleToSlug(spec.Title),
|
|
||||||
LiveAt: spec.LiveAt,
|
|
||||||
Title: spec.Title,
|
|
||||||
IsPremium: spec.IsPremium,
|
|
||||||
Content: spec.Content,
|
|
||||||
FeaturedImage: spec.FeaturedImage,
|
|
||||||
Tags: tags,
|
|
||||||
Categories: categories,
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := i.newsRepo.Update(newSpec); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
package utils
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
func TitleToSlug(title string) string {
|
|
||||||
return strings.ToLower(strings.ReplaceAll(title, " ", "-"))
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user