Files
goalfylearning-admin/internal/services/user_project_quota_service.go

80 lines
2.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}