init
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/facades"
|
||||
|
||||
apperrors "goravel/app/errors"
|
||||
"goravel/app/http/helpers"
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type DictionaryService interface {
|
||||
// GetByID 根据ID获取字典
|
||||
GetByID(id uint) (*models.Dictionary, error)
|
||||
// GetList 获取字典列表
|
||||
GetList(filters DictionaryFilters, page, pageSize int) ([]models.Dictionary, int64, error)
|
||||
// GetByType 根据类型获取字典列表
|
||||
GetByType(dictType string) ([]models.Dictionary, error)
|
||||
// GetAllTypes 获取所有字典类型
|
||||
GetAllTypes() ([]string, error)
|
||||
// Create 创建字典
|
||||
Create(dictType, label, value, translationKey, description, remark string, status uint8, sort int) (*models.Dictionary, error)
|
||||
// Update 更新字典
|
||||
Update(dictionary *models.Dictionary) error
|
||||
// Delete 删除字典
|
||||
Delete(dictionary *models.Dictionary) error
|
||||
}
|
||||
|
||||
// DictionaryFilters 字典查询过滤器
|
||||
type DictionaryFilters struct {
|
||||
Type string
|
||||
Status string
|
||||
StartTime string
|
||||
EndTime string
|
||||
OrderBy string
|
||||
}
|
||||
|
||||
type DictionaryServiceImpl struct {
|
||||
}
|
||||
|
||||
func NewDictionaryService() DictionaryService {
|
||||
return &DictionaryServiceImpl{}
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取字典
|
||||
func (s *DictionaryServiceImpl) GetByID(id uint) (*models.Dictionary, error) {
|
||||
var dictionary models.Dictionary
|
||||
if err := facades.Orm().Query().Where("id", id).FirstOrFail(&dictionary); err != nil {
|
||||
return nil, apperrors.ErrDictionaryNotFound.WithError(err)
|
||||
}
|
||||
return &dictionary, nil
|
||||
}
|
||||
|
||||
// GetList 获取字典列表
|
||||
func (s *DictionaryServiceImpl) GetList(filters DictionaryFilters, page, pageSize int) ([]models.Dictionary, int64, error) {
|
||||
query := facades.Orm().Query().Model(&models.Dictionary{})
|
||||
|
||||
// 应用筛选条件
|
||||
if filters.Type != "" {
|
||||
query = query.Where("type LIKE ?", "%"+filters.Type+"%")
|
||||
}
|
||||
if filters.Status != "" {
|
||||
query = query.Where("status", filters.Status)
|
||||
}
|
||||
if filters.StartTime != "" {
|
||||
query = query.Where("created_at >= ?", filters.StartTime)
|
||||
}
|
||||
if filters.EndTime != "" {
|
||||
query = query.Where("created_at <= ?", filters.EndTime)
|
||||
}
|
||||
|
||||
// 应用排序
|
||||
orderBy := filters.OrderBy
|
||||
if orderBy == "" {
|
||||
orderBy = "sort:asc,id:desc"
|
||||
}
|
||||
query = helpers.ApplySort(query, orderBy, "sort:asc,id:desc")
|
||||
|
||||
// 分页查询
|
||||
var dictionaries []models.Dictionary
|
||||
var total int64
|
||||
if err := query.Paginate(page, pageSize, &dictionaries, &total); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return dictionaries, total, nil
|
||||
}
|
||||
|
||||
// GetByType 根据类型获取字典列表
|
||||
func (s *DictionaryServiceImpl) GetByType(dictType string) ([]models.Dictionary, error) {
|
||||
var dictionaries []models.Dictionary
|
||||
if err := facades.Orm().Query().
|
||||
Where("type", dictType).
|
||||
Where("status", 1).
|
||||
Order("sort asc, id asc").
|
||||
Find(&dictionaries); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dictionaries, nil
|
||||
}
|
||||
|
||||
// GetAllTypes 获取所有字典类型
|
||||
func (s *DictionaryServiceImpl) GetAllTypes() ([]string, error) {
|
||||
var types []string
|
||||
if err := facades.Orm().Query().Model(&models.Dictionary{}).Distinct("type").Pluck("type", &types); err != nil {
|
||||
return []string{}, nil
|
||||
}
|
||||
return types, nil
|
||||
}
|
||||
|
||||
// Create 创建字典
|
||||
func (s *DictionaryServiceImpl) Create(dictType, label, value, translationKey, description, remark string, status uint8, sort int) (*models.Dictionary, error) {
|
||||
dictionary := &models.Dictionary{}
|
||||
createData := map[string]any{
|
||||
"type": dictType,
|
||||
"label": label,
|
||||
"value": value,
|
||||
"translation_key": translationKey,
|
||||
"description": description,
|
||||
"remark": remark,
|
||||
"status": status,
|
||||
"sort": sort,
|
||||
}
|
||||
|
||||
if err := facades.Orm().Query().Model(dictionary).Create(createData); err != nil {
|
||||
return nil, apperrors.ErrCreateFailed.WithError(err)
|
||||
}
|
||||
|
||||
return dictionary, nil
|
||||
}
|
||||
|
||||
// Update 更新字典
|
||||
func (s *DictionaryServiceImpl) Update(dictionary *models.Dictionary) error {
|
||||
if err := facades.Orm().Query().Save(dictionary); err != nil {
|
||||
return apperrors.ErrUpdateFailed.WithError(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete 删除字典
|
||||
func (s *DictionaryServiceImpl) Delete(dictionary *models.Dictionary) error {
|
||||
if _, err := facades.Orm().Query().Delete(dictionary); err != nil {
|
||||
return apperrors.ErrDeleteFailed.WithError(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user