diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..a9d92cc Binary files /dev/null and b/.DS_Store differ diff --git a/internal/accessor/category/get_bulk.go b/internal/accessor/category/get_bulk.go deleted file mode 100644 index 6e83b0f..0000000 --- a/internal/accessor/category/get_bulk.go +++ /dev/null @@ -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 -} diff --git a/internal/accessor/category/get_by_ids.go b/internal/accessor/category/get_by_ids.go new file mode 100644 index 0000000..501ec95 --- /dev/null +++ b/internal/accessor/category/get_by_ids.go @@ -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 +} diff --git a/internal/accessor/category/impl.go b/internal/accessor/category/impl.go index 3672e97..d9e3899 100644 --- a/internal/accessor/category/impl.go +++ b/internal/accessor/category/impl.go @@ -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( diff --git a/internal/accessor/news/create.go b/internal/accessor/news/create.go index 5d33993..9720906 100644 --- a/internal/accessor/news/create.go +++ b/internal/accessor/news/create.go @@ -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) } diff --git a/internal/accessor/news/create_model.go b/internal/accessor/news/create_model.go deleted file mode 100644 index b70eb32..0000000 --- a/internal/accessor/news/create_model.go +++ /dev/null @@ -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 -} diff --git a/internal/accessor/news/get_all_model.go b/internal/accessor/news/get_all_model.go deleted file mode 100644 index cbd4fab..0000000 --- a/internal/accessor/news/get_all_model.go +++ /dev/null @@ -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 -} diff --git a/internal/accessor/news/impl.go b/internal/accessor/news/impl.go index fbe0eab..7dcacd7 100644 --- a/internal/accessor/news/impl.go +++ b/internal/accessor/news/impl.go @@ -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 { diff --git a/internal/accessor/tag/get_all_model.go b/internal/accessor/tag/get_all_model.go deleted file mode 100644 index 830b6b2..0000000 --- a/internal/accessor/tag/get_all_model.go +++ /dev/null @@ -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 -} diff --git a/internal/accessor/tag/get_bulk_model.go b/internal/accessor/tag/get_bulk_model.go deleted file mode 100644 index 5cb84c5..0000000 --- a/internal/accessor/tag/get_bulk_model.go +++ /dev/null @@ -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 -} diff --git a/internal/accessor/tag/impl.go b/internal/accessor/tag/impl.go index dbfc93e..7fbd5dd 100644 --- a/internal/accessor/tag/impl.go +++ b/internal/accessor/tag/impl.go @@ -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( diff --git a/internal/api/http/news/create.go b/internal/api/http/news/create.go index f5fb5f8..c01463d 100644 --- a/internal/api/http/news/create.go +++ b/internal/api/http/news/create.go @@ -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, diff --git a/internal/api/http/news/get_all.go b/internal/api/http/news/get_all.go index b9ff528..dd03164 100644 --- a/internal/api/http/news/get_all.go +++ b/internal/api/http/news/get_all.go @@ -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, diff --git a/internal/domain/category/spec.go b/internal/domain/category/spec.go index 1594a8a..4f4594c 100644 --- a/internal/domain/category/spec.go +++ b/internal/domain/category/spec.go @@ -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"` diff --git a/internal/domain/news/spec.go b/internal/domain/news/spec.go index 4d5a469..e7fe2be 100644 --- a/internal/domain/news/spec.go +++ b/internal/domain/news/spec.go @@ -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,16 +17,16 @@ type NewsReq struct { } type News struct { - ID string `json:"id"` - Title string `json:"title"` - Content string `json:"content"` - FeaturedImage string `json:"featured_image"` - Tags []tagdomain.Tag `json:"tags"` - Categories []database.Category `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"` + ID string `json:"id" gorm:"primaryKey"` + 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"` + 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"` } diff --git a/internal/domain/tag/spec.go b/internal/domain/tag/spec.go index b57da47..ea28ead 100644 --- a/internal/domain/tag/spec.go +++ b/internal/domain/tag/spec.go @@ -1,12 +1,16 @@ package tagdomain +import "time" + type TagReq struct { Code string `json:"code" validate:"required"` Name string `json:"name" validate:"required"` } type Tag struct { - ID string `json:"id" gorm:"primaryKey"` - Code string `json:"code"` - Name string `json:"name"` + 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"` } diff --git a/internal/services/news/create.go b/internal/services/news/create.go index fd8ee10..517ebef 100644 --- a/internal/services/news/create.go +++ b/internal/services/news/create.go @@ -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, diff --git a/internal/services/news/create_model.go b/internal/services/news/create_model.go deleted file mode 100644 index 40f4097..0000000 --- a/internal/services/news/create_model.go +++ /dev/null @@ -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 -} diff --git a/internal/services/news/get_all_model.go b/internal/services/news/get_all_model.go deleted file mode 100644 index 42e8b4e..0000000 --- a/internal/services/news/get_all_model.go +++ /dev/null @@ -1,9 +0,0 @@ -package newssvc - -import ( - "legalgo-BE-go/database" -) - -func (i *impl) GetAllModel() ([]database.News, error) { - return i.newsRepo.GetAllModel() -} diff --git a/internal/services/news/impl.go b/internal/services/news/impl.go index 92c4cce..3bbd4e5 100644 --- a/internal/services/news/impl.go +++ b/internal/services/news/impl.go @@ -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( diff --git a/internal/services/tag/get_all_model.go b/internal/services/tag/get_all_model.go index 70e268a..da4a37f 100644 --- a/internal/services/tag/get_all_model.go +++ b/internal/services/tag/get_all_model.go @@ -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() } diff --git a/internal/services/tag/impl.go b/internal/services/tag/impl.go index 19fb506..b026eff 100644 --- a/internal/services/tag/impl.go +++ b/internal/services/tag/impl.go @@ -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(