web
This commit is contained in:
150
server/internal/service/platform.go
Normal file
150
server/internal/service/platform.go
Normal file
@@ -0,0 +1,150 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"dianshang/internal/model"
|
||||
"dianshang/internal/repository"
|
||||
"dianshang/pkg/utils"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// PlatformService 平台服务
|
||||
type PlatformService struct {
|
||||
platformRepo *repository.PlatformRepository
|
||||
productRepo *repository.ProductRepository
|
||||
}
|
||||
|
||||
// NewPlatformService 创建平台服务
|
||||
func NewPlatformService(platformRepo *repository.PlatformRepository, productRepo *repository.ProductRepository) *PlatformService {
|
||||
return &PlatformService{
|
||||
platformRepo: platformRepo,
|
||||
productRepo: productRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// GetPlatformList 获取平台列表
|
||||
func (s *PlatformService) GetPlatformList(page, pageSize int, status *int, name string) ([]model.Platform, *utils.Pagination, error) {
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize <= 0 || pageSize > 100 {
|
||||
pageSize = 10
|
||||
}
|
||||
|
||||
// 如果不需要分页,获取所有平台
|
||||
if page == 0 && pageSize == 0 {
|
||||
platforms, err := s.platformRepo.GetAll()
|
||||
return platforms, nil, err
|
||||
}
|
||||
|
||||
offset := (page - 1) * pageSize
|
||||
|
||||
// TODO: 实现带筛选的分页查询
|
||||
// 暂时先返回所有平台
|
||||
platforms, err := s.platformRepo.GetAll()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// 简单筛选
|
||||
var filteredPlatforms []model.Platform
|
||||
for _, p := range platforms {
|
||||
if status != nil && p.Status != *status {
|
||||
continue
|
||||
}
|
||||
if name != "" && p.Name != name && p.Code != name {
|
||||
continue
|
||||
}
|
||||
filteredPlatforms = append(filteredPlatforms, p)
|
||||
}
|
||||
|
||||
total := len(filteredPlatforms)
|
||||
|
||||
// 分页
|
||||
start := offset
|
||||
end := offset + pageSize
|
||||
if start > total {
|
||||
start = total
|
||||
}
|
||||
if end > total {
|
||||
end = total
|
||||
}
|
||||
|
||||
result := filteredPlatforms[start:end]
|
||||
|
||||
pagination := utils.NewPagination(page, pageSize)
|
||||
pagination.Total = int64(total)
|
||||
|
||||
return result, pagination, nil
|
||||
}
|
||||
|
||||
// GetPlatformByID 根据ID获取平台
|
||||
func (s *PlatformService) GetPlatformByID(id uint) (*model.Platform, error) {
|
||||
return s.platformRepo.GetByID(id)
|
||||
}
|
||||
|
||||
// GetPlatformByCode 根据代码获取平台
|
||||
func (s *PlatformService) GetPlatformByCode(code string) (*model.Platform, error) {
|
||||
return s.platformRepo.GetByCode(code)
|
||||
}
|
||||
|
||||
// CreatePlatform 创建平台
|
||||
func (s *PlatformService) CreatePlatform(platform *model.Platform) error {
|
||||
// 检查平台代码是否已存在
|
||||
existing, _ := s.platformRepo.GetByCode(platform.Code)
|
||||
if existing != nil {
|
||||
return errors.New("平台代码已存在")
|
||||
}
|
||||
|
||||
return s.platformRepo.Create(platform)
|
||||
}
|
||||
|
||||
// UpdatePlatform 更新平台
|
||||
func (s *PlatformService) UpdatePlatform(id uint, updates map[string]interface{}) error {
|
||||
// 检查平台是否存在
|
||||
_, err := s.platformRepo.GetByID(id)
|
||||
if err != nil {
|
||||
return errors.New("平台不存在")
|
||||
}
|
||||
|
||||
// 如果更新代码,检查是否与其他平台冲突
|
||||
if code, ok := updates["code"].(string); ok {
|
||||
existing, _ := s.platformRepo.GetByCode(code)
|
||||
if existing != nil && existing.ID != id {
|
||||
return errors.New("平台代码已被其他平台使用")
|
||||
}
|
||||
}
|
||||
|
||||
return s.platformRepo.Update(id, updates)
|
||||
}
|
||||
|
||||
// DeletePlatform 删除平台
|
||||
func (s *PlatformService) DeletePlatform(id uint) error {
|
||||
// 检查平台是否存在
|
||||
_, err := s.platformRepo.GetByID(id)
|
||||
if err != nil {
|
||||
return errors.New("平台不存在")
|
||||
}
|
||||
|
||||
// TODO: 检查是否有分类关联到该平台
|
||||
// 可以选择级联删除或禁止删除
|
||||
|
||||
return s.platformRepo.Delete(id)
|
||||
}
|
||||
|
||||
// GetAllActivePlatforms 获取所有启用的平台
|
||||
func (s *PlatformService) GetAllActivePlatforms() ([]model.Platform, error) {
|
||||
platforms, err := s.platformRepo.GetAll()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 过滤启用的平台
|
||||
var activePlatforms []model.Platform
|
||||
for _, p := range platforms {
|
||||
if p.Status == 1 {
|
||||
activePlatforms = append(activePlatforms, p)
|
||||
}
|
||||
}
|
||||
|
||||
return activePlatforms, nil
|
||||
}
|
||||
Reference in New Issue
Block a user