This commit is contained in:
Joe
2026-01-16 15:49:34 +08:00
commit 550d3e1f42
380 changed files with 62024 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
package services
import (
"github.com/goravel/framework/contracts/database/orm"
"github.com/goravel/framework/facades"
apperrors "goravel/app/errors"
"goravel/app/http/requests/admin"
"goravel/app/models"
)
type ArticleService interface {
GetByID(id uint) (*models.Article, error)
GetList(filters ArticleFilters, page, pageSize int) ([]models.Article, int64, error)
Create(req *admin.ArticleCreate) (*models.Article, error)
Update(id uint, req *admin.ArticleUpdate) (*models.Article, error)
Delete(id uint) error
}
type ArticleFilters struct {
Name string
Status string
}
type ArticleServiceImpl struct{}
func NewArticleService() ArticleService {
return &ArticleServiceImpl{}
}
func BuildArticleQuery(filters ArticleFilters) orm.Query {
query := facades.Orm().Query().Model(&models.Article{})
if filters.Name != "" {
query = query.Where("name LIKE ?", "%"+filters.Name+"%")
}
if filters.Status != "" {
query = query.Where("status = ?", filters.Status)
}
return query
}
func (s *ArticleServiceImpl) GetByID(id uint) (*models.Article, error) {
var item models.Article
if err := facades.Orm().Query().Where("id", id).FirstOrFail(&item); err != nil {
return nil, apperrors.NewBusinessError("article_not_found", "Article not found").WithError(err)
}
return &item, nil
}
func (s *ArticleServiceImpl) GetList(filters ArticleFilters, page, pageSize int) ([]models.Article, int64, error) {
query := BuildArticleQuery(filters)
var list []models.Article
var total int64
if err := query.Order("id desc").Paginate(page, pageSize, &list, &total); err != nil {
return nil, 0, err
}
return list, total, nil
}
func (s *ArticleServiceImpl) Create(req *admin.ArticleCreate) (*models.Article, error) {
item := &models.Article{
Name: req.Name,
Status: req.Status,
}
if err := facades.Orm().Query().Create(item); err != nil {
return nil, apperrors.ErrCreateFailed.WithError(err)
}
return item, nil
}
func (s *ArticleServiceImpl) Update(id uint, req *admin.ArticleUpdate) (*models.Article, error) {
item, err := s.GetByID(id)
if err != nil {
return nil, err
}
if req.Name != nil {
item.Name = *req.Name
}
if req.Status != nil {
item.Status = *req.Status
}
if err := facades.Orm().Query().Save(item); err != nil {
return nil, apperrors.ErrUpdateFailed.WithError(err)
}
return item, nil
}
func (s *ArticleServiceImpl) Delete(id uint) error {
// 使用 Soft Delete
if _, err := facades.Orm().Query().Where("id", id).Delete(&models.Article{}); err != nil {
return err
}
return nil
}