80 lines
2.6 KiB
Go
80 lines
2.6 KiB
Go
package services
|
||
|
||
import (
|
||
"errors"
|
||
"goalfymax-admin/internal/models"
|
||
"goalfymax-admin/internal/storage"
|
||
)
|
||
|
||
type UserProjectQuotaService interface {
|
||
Create(input *models.UserProjectQuota) (*models.UserProjectQuota, error)
|
||
Update(id uint, input *models.UserProjectQuota) (*models.UserProjectQuota, error)
|
||
Delete(id uint) error
|
||
GetByID(id uint) (*models.UserProjectQuota, error)
|
||
GetByUserID(userID string) (*models.UserProjectQuota, error)
|
||
List(filter storage.UserProjectQuotaFilter) ([]models.UserProjectQuota, int64, error)
|
||
}
|
||
|
||
type userProjectQuotaService struct {
|
||
store storage.UserProjectQuotaStorage
|
||
}
|
||
|
||
func NewUserProjectQuotaService(store storage.UserProjectQuotaStorage) UserProjectQuotaService {
|
||
return &userProjectQuotaService{store: store}
|
||
}
|
||
|
||
func (s *userProjectQuotaService) validate(q *models.UserProjectQuota) error {
|
||
if q.UserID == "" {
|
||
return errors.New("user_id 不能为空")
|
||
}
|
||
if q.ProjectLimit < 0 || q.CoderVMLimit < 0 || q.BrowserVMLimit < 0 || q.ProcessLimit < 0 {
|
||
return errors.New("配额上限不能为负数")
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (s *userProjectQuotaService) Create(input *models.UserProjectQuota) (*models.UserProjectQuota, error) {
|
||
if err := s.validate(input); err != nil {
|
||
return nil, err
|
||
}
|
||
if _, err := s.store.GetByUserID(input.UserID); err == nil {
|
||
return nil, errors.New("该用户配额已存在")
|
||
}
|
||
if err := s.store.Create(input); err != nil {
|
||
return nil, err
|
||
}
|
||
return input, nil
|
||
}
|
||
|
||
func (s *userProjectQuotaService) Update(id uint, input *models.UserProjectQuota) (*models.UserProjectQuota, error) {
|
||
if err := s.validate(input); err != nil {
|
||
return nil, err
|
||
}
|
||
exist, err := s.store.GetByID(id)
|
||
if err != nil {
|
||
return nil, errors.New("记录不存在")
|
||
}
|
||
// user_id 不建议修改,如需修改可放开以下行:exist.UserID = input.UserID
|
||
exist.ProjectLimit = input.ProjectLimit
|
||
exist.CoderVMLimit = input.CoderVMLimit
|
||
exist.BrowserVMLimit = input.BrowserVMLimit
|
||
exist.ProcessLimit = input.ProcessLimit
|
||
exist.Enabled = input.Enabled
|
||
exist.Description = input.Description
|
||
if err := s.store.Update(exist); err != nil {
|
||
return nil, err
|
||
}
|
||
return exist, nil
|
||
}
|
||
|
||
func (s *userProjectQuotaService) Delete(id uint) error { return s.store.Delete(id) }
|
||
func (s *userProjectQuotaService) GetByID(id uint) (*models.UserProjectQuota, error) {
|
||
return s.store.GetByID(id)
|
||
}
|
||
func (s *userProjectQuotaService) GetByUserID(userID string) (*models.UserProjectQuota, error) {
|
||
return s.store.GetByUserID(userID)
|
||
}
|
||
func (s *userProjectQuotaService) List(filter storage.UserProjectQuotaFilter) ([]models.UserProjectQuota, int64, error) {
|
||
return s.store.List(filter)
|
||
}
|