@@ -22,6 +22,26 @@ import (
22
22
)
23
23
24
24
func upsertPackage (ctx context.Context , db * sql.DB , p model.Package ) (id uuid.UUID , err error ) {
25
+ selectReleaseDependencyPackage := Package .SELECT (
26
+ Package .Name ,
27
+ Package .PackageManager ,
28
+ Package .CustomRegistry ,
29
+ Package .Description ,
30
+ ).WHERE (
31
+ Package .Name .EQ (postgres .String (p .Name )).
32
+ AND (Package .PackageManager .EQ (postgres .NewEnumValue (string (p .PackageManager )))).
33
+ AND (Package .CustomRegistry .EQ (postgres .String (p .CustomRegistry ))),
34
+ )
35
+
36
+ var releaseDependencyPackage model.Package
37
+ err = selectReleaseDependencyPackage .QueryContext (ctx , db , & releaseDependencyPackage )
38
+ if err == nil {
39
+ // If the release dependency package already exists, we don't need to do anything
40
+ if releaseDependencyPackage .Description == p .Description {
41
+ return releaseDependencyPackage .ID , nil
42
+ }
43
+ }
44
+
25
45
packageInsert := Package .INSERT (
26
46
Package .Name ,
27
47
Package .PackageManager ,
@@ -48,6 +68,31 @@ func upsertPackage(ctx context.Context, db *sql.DB, p model.Package) (id uuid.UU
48
68
}
49
69
50
70
func upsertRelease (ctx context.Context , db * sql.DB , r model.Release ) (id uuid.UUID , err error ) {
71
+ selectRelease := Release .SELECT (
72
+ Release .AllColumns ,
73
+ ).WHERE (
74
+ Release .PackageID .EQ (postgres .UUID (r .PackageID )).
75
+ AND (Release .Version .EQ (postgres .String (r .Version ))),
76
+ )
77
+
78
+ var release model.Release
79
+ err = selectRelease .QueryContext (ctx , db , & release )
80
+ if err == nil {
81
+ // TODO (cthompson) not easy to compare jsonb, so we're skipping this for now
82
+ // release.UpstreamData == r.UpstreamData &&
83
+
84
+ // If the release already exists, we don't need to do anything
85
+ if release .PublishingMaintainerID == r .PublishingMaintainerID &&
86
+ release .ReleaseTime == r .ReleaseTime &&
87
+ release .BlobHash == r .BlobHash &&
88
+ release .UpstreamBlobURL == r .UpstreamBlobURL {
89
+
90
+ // TODO (cthompson) update FetchedTime
91
+
92
+ return release .ID , nil
93
+ }
94
+ }
95
+
51
96
releaseInsert := Release .INSERT (
52
97
Release .PackageID ,
53
98
Release .PublishingMaintainerID ,
@@ -82,6 +127,23 @@ func upsertRelease(ctx context.Context, db *sql.DB, r model.Release) (id uuid.UU
82
127
}
83
128
84
129
func upsertReleaseDependencyPackage (ctx context.Context , db * sql.DB , p model.Package ) (id uuid.UUID , err error ) {
130
+ selectReleaseDependencyPackage := Package .SELECT (
131
+ Package .Name ,
132
+ Package .PackageManager ,
133
+ Package .CustomRegistry ,
134
+ ).WHERE (
135
+ Package .Name .EQ (postgres .String (p .Name )).
136
+ AND (Package .PackageManager .EQ (postgres .NewEnumValue (string (p .PackageManager )))).
137
+ AND (Package .CustomRegistry .EQ (postgres .String (p .CustomRegistry ))),
138
+ )
139
+
140
+ var releaseDependencyPackage model.Package
141
+ err = selectReleaseDependencyPackage .QueryContext (ctx , db , & releaseDependencyPackage )
142
+ if err == nil {
143
+ // If the release dependency package already exists, we don't need to do anything
144
+ return releaseDependencyPackage .ID , nil
145
+ }
146
+
85
147
insertPackage := Package .INSERT (
86
148
Package .Name ,
87
149
Package .PackageManager ,
@@ -105,6 +167,26 @@ func upsertReleaseDependencyPackage(ctx context.Context, db *sql.DB, p model.Pac
105
167
}
106
168
107
169
func upsertReleaseDependency (ctx context.Context , db * sql.DB , r model.ReleaseDependency ) (id uuid.UUID , err error ) {
170
+ selectReleaseDependency := ReleaseDependency .SELECT (
171
+ ReleaseDependency .ID ,
172
+ ReleaseDependency .ReleaseID ,
173
+ ReleaseDependency .IsDev ,
174
+ ).WHERE (
175
+ ReleaseDependency .ReleaseID .EQ (postgres .UUID (r .ReleaseID )).
176
+ AND (ReleaseDependency .PackageName .EQ (postgres .String (r .PackageName ))).
177
+ AND (ReleaseDependency .PackageVersionQuery .EQ (postgres .String (r .PackageVersionQuery ))),
178
+ )
179
+
180
+ var releaseDependency model.ReleaseDependency
181
+ err = selectReleaseDependency .QueryContext (ctx , db , & releaseDependency )
182
+ if err == nil {
183
+ // If the release dependency already exists, we don't need to do anything
184
+ if releaseDependency .ReleaseID == r .ReleaseID &&
185
+ releaseDependency .IsDev == r .IsDev {
186
+ return releaseDependency .ID , nil
187
+ }
188
+ }
189
+
108
190
insertReleaseDependency := ReleaseDependency .INSERT (
109
191
ReleaseDependency .ReleaseID ,
110
192
ReleaseDependency .DependencyPackageID ,
@@ -131,18 +213,52 @@ func upsertReleaseDependency(ctx context.Context, db *sql.DB, r model.ReleaseDep
131
213
}
132
214
133
215
func upsertPackageMaintainer (ctx context.Context , db * sql.DB , p model.PackageMaintainer ) error {
216
+ selectPackageMaintainer := PackageMaintainer .SELECT (
217
+ PackageMaintainer .AllColumns ,
218
+ ).WHERE (
219
+ PackageMaintainer .PackageID .EQ (postgres .UUID (p .PackageID )).
220
+ AND (PackageMaintainer .MaintainerID .EQ (postgres .UUID (p .MaintainerID ))),
221
+ )
222
+
223
+ var packageMaintainer model.PackageMaintainer
224
+ err := selectPackageMaintainer .QueryContext (ctx , db , & packageMaintainer )
225
+ if err == nil {
226
+ // If the package maintainer already exists, we don't need to do anything
227
+ if packageMaintainer .PackageID == p .PackageID &&
228
+ packageMaintainer .MaintainerID == p .MaintainerID {
229
+ return nil
230
+ }
231
+ }
232
+
134
233
insertPackageMaintainer := PackageMaintainer .INSERT (
135
234
PackageMaintainer .PackageID ,
136
235
PackageMaintainer .MaintainerID ,
137
236
).MODEL (p ).
138
237
ON_CONFLICT ().
139
238
ON_CONSTRAINT ("package_maintainer_package_id_maintainer_id_idx" ).
140
239
DO_NOTHING ()
141
- _ , err : = insertPackageMaintainer .ExecContext (ctx , db )
240
+ _ , err = insertPackageMaintainer .ExecContext (ctx , db )
142
241
return err
143
242
}
144
243
145
244
func upsertMaintainer (ctx context.Context , db * sql.DB , m model.Maintainer ) (id uuid.UUID , err error ) {
245
+ selectMaintainer := Maintainer .SELECT (
246
+ Maintainer .AllColumns ,
247
+ ).WHERE (
248
+ Maintainer .Email .EQ (postgres .String (m .Email )),
249
+ )
250
+
251
+ var maintainer model.Maintainer
252
+ err = selectMaintainer .QueryContext (ctx , db , & maintainer )
253
+ if err == nil {
254
+ // If the maintainer already exists, we don't need to do anything
255
+ if maintainer .Email == m .Email &&
256
+ maintainer .Name == m .Name &&
257
+ maintainer .PackageManager == m .PackageManager {
258
+ return maintainer .ID , nil
259
+ }
260
+ }
261
+
146
262
insertMaintainer := Maintainer .INSERT (
147
263
Maintainer .Email ,
148
264
Maintainer .Name ,
0 commit comments