@@ -120,6 +120,63 @@ func refactorGroupMembership(ctx context.Context, db *gorp.DbMap) error {
120
120
return nil
121
121
}
122
122
123
+ func refactorLinkGroupProject (ctx context.Context , db * gorp.DbMap ) error {
124
+ // Third step
125
+ // Migrate data from table user_group
126
+ tx , err := db .Begin ()
127
+ if err != nil {
128
+ return sdk .WithStack (err )
129
+ }
130
+
131
+ defer tx .Rollback () // nolint
132
+
133
+ rows , err := tx .Query (`
134
+ SELECT id, group_id, project_id, role
135
+ FROM project_group
136
+ FOR UPDATE SKIP LOCKED
137
+ ` )
138
+ if err == sql .ErrNoRows {
139
+ return nil
140
+ }
141
+ if err != nil {
142
+ return sdk .WithStack (err )
143
+ }
144
+ defer rows .Close ()
145
+
146
+ var links []* group.LinkGroupProject
147
+
148
+ for rows .Next () {
149
+ var id int64
150
+ var groupID int64
151
+ var projectID int64
152
+ var role int
153
+ if err := rows .Scan (& id , & groupID , & projectID , & role ); err != nil {
154
+ return sdk .WithStack (err )
155
+ }
156
+
157
+ var l = group.LinkGroupProject {
158
+ ID : id ,
159
+ GroupID : groupID ,
160
+ ProjectID : projectID ,
161
+ Role : role ,
162
+ }
163
+
164
+ links = append (links , & l )
165
+ }
166
+
167
+ for _ , l := range links {
168
+ if err := group .UpdateLinkGroupProject (tx , l ); err != nil {
169
+ return sdk .WithStack (err )
170
+ }
171
+ }
172
+
173
+ if err := tx .Commit (); err != nil {
174
+ return sdk .WithStack (err )
175
+ }
176
+
177
+ return nil
178
+ }
179
+
123
180
// RefactorGroupMembership .
124
181
func RefactorGroupMembership (ctx context.Context , db * gorp.DbMap ) error {
125
182
log .Debug ("migrate.RefactorGroupMembership> begin" )
@@ -135,5 +192,9 @@ func RefactorGroupMembership(ctx context.Context, db *gorp.DbMap) error {
135
192
return err
136
193
}
137
194
195
+ if err := refactorLinkGroupProject (ctx , db ); err != nil {
196
+ return err
197
+ }
198
+
138
199
return nil
139
200
}
0 commit comments