Dragonfly2

Форк
0
/
seed_peer_cluster.go 
147 строк · 4.2 Кб
1
/*
2
 *     Copyright 2022 The Dragonfly Authors
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16

17
package service
18

19
import (
20
	"context"
21
	"errors"
22

23
	"d7y.io/dragonfly/v2/manager/models"
24
	"d7y.io/dragonfly/v2/manager/types"
25
	"d7y.io/dragonfly/v2/pkg/structure"
26
)
27

28
func (s *service) CreateSeedPeerCluster(ctx context.Context, json types.CreateSeedPeerClusterRequest) (*models.SeedPeerCluster, error) {
29
	config, err := structure.StructToMap(json.Config)
30
	if err != nil {
31
		return nil, err
32
	}
33

34
	seedPeerCluster := models.SeedPeerCluster{
35
		Name:   json.Name,
36
		BIO:    json.BIO,
37
		Config: config,
38
	}
39

40
	if err := s.db.WithContext(ctx).Create(&seedPeerCluster).Error; err != nil {
41
		return nil, err
42
	}
43

44
	return &seedPeerCluster, nil
45
}
46

47
func (s *service) DestroySeedPeerCluster(ctx context.Context, id uint) error {
48
	seedPeerCluster := models.SeedPeerCluster{}
49
	if err := s.db.WithContext(ctx).Preload("SeedPeers").First(&seedPeerCluster, id).Error; err != nil {
50
		return err
51
	}
52

53
	if len(seedPeerCluster.SeedPeers) != 0 {
54
		return errors.New("seedPeer cluster exists seedPeer")
55
	}
56

57
	if err := s.db.WithContext(ctx).Unscoped().Delete(&models.SeedPeerCluster{}, id).Error; err != nil {
58
		return err
59
	}
60

61
	return nil
62
}
63

64
func (s *service) UpdateSeedPeerCluster(ctx context.Context, id uint, json types.UpdateSeedPeerClusterRequest) (*models.SeedPeerCluster, error) {
65
	var (
66
		config map[string]any
67
		err    error
68
	)
69
	if json.Config != nil {
70
		config, err = structure.StructToMap(json.Config)
71
		if err != nil {
72
			return nil, err
73
		}
74
	}
75

76
	seedPeerCluster := models.SeedPeerCluster{}
77
	if err := s.db.WithContext(ctx).First(&seedPeerCluster, id).Updates(models.SeedPeerCluster{
78
		Name:   json.Name,
79
		BIO:    json.BIO,
80
		Config: config,
81
	}).Error; err != nil {
82
		return nil, err
83
	}
84

85
	return &seedPeerCluster, nil
86
}
87

88
func (s *service) GetSeedPeerCluster(ctx context.Context, id uint) (*models.SeedPeerCluster, error) {
89
	seedPeerCluster := models.SeedPeerCluster{}
90
	if err := s.db.WithContext(ctx).First(&seedPeerCluster, id).Error; err != nil {
91
		return nil, err
92
	}
93

94
	return &seedPeerCluster, nil
95
}
96

97
func (s *service) GetSeedPeerClusters(ctx context.Context, q types.GetSeedPeerClustersQuery) ([]models.SeedPeerCluster, int64, error) {
98
	var count int64
99
	var seedPeerClusters []models.SeedPeerCluster
100
	if err := s.db.WithContext(ctx).Scopes(models.Paginate(q.Page, q.PerPage)).Where(&models.SeedPeerCluster{
101
		Name: q.Name,
102
	}).Find(&seedPeerClusters).Limit(-1).Offset(-1).Count(&count).Error; err != nil {
103
		return nil, 0, err
104
	}
105

106
	return seedPeerClusters, count, nil
107
}
108

109
func (s *service) AddSeedPeerToSeedPeerCluster(ctx context.Context, id, seedPeerID uint) error {
110
	seedPeerCluster := models.SeedPeerCluster{}
111
	if err := s.db.WithContext(ctx).First(&seedPeerCluster, id).Error; err != nil {
112
		return err
113
	}
114

115
	seedPeer := models.SeedPeer{}
116
	if err := s.db.WithContext(ctx).First(&seedPeer, seedPeerID).Error; err != nil {
117
		return err
118
	}
119

120
	if err := s.db.WithContext(ctx).Model(&seedPeerCluster).Association("SeedPeers").Append(&seedPeer); err != nil {
121
		return err
122
	}
123

124
	return nil
125
}
126

127
func (s *service) AddSchedulerClusterToSeedPeerCluster(ctx context.Context, id, schedulerClusterID uint) error {
128
	seedPeerCluster := models.SeedPeerCluster{}
129
	if err := s.db.WithContext(ctx).First(&seedPeerCluster, id).Error; err != nil {
130
		return err
131
	}
132

133
	schedulerCluster := models.SchedulerCluster{}
134
	if err := s.db.WithContext(ctx).First(&schedulerCluster, schedulerClusterID).Error; err != nil {
135
		return err
136
	}
137

138
	if err := s.db.WithContext(ctx).Model(&schedulerCluster).Association("SeedPeerClusters").Clear(); err != nil {
139
		return err
140
	}
141

142
	if err := s.db.WithContext(ctx).Model(&seedPeerCluster).Association("SchedulerClusters").Append(&schedulerCluster); err != nil {
143
		return err
144
	}
145

146
	return nil
147
}
148

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.