We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent a28bde4 commit 8d4f75eCopy full SHA for 8d4f75e
engine/cdn/item/dao.go
@@ -319,8 +319,20 @@ func LoadOldItemByStatusAndDuration(ctx context.Context, m *gorpmapper.Mapper, d
319
return getItems(ctx, m, db, query, opts...)
320
}
321
322
-func LoadByRunID(ctx context.Context, m *gorpmapper.Mapper, db gorp.SqlExecutor, itemType sdk.CDNItemType, runID string) ([]sdk.CDNItem, error) {
323
- query := gorpmapper.NewQuery("SELECT * FROM item WHERE api_ref->>'run_id'::text = $1 AND type = $2 AND to_delete = false").Args(runID, itemType)
+func LoadRunResultByRunID(ctx context.Context, m *gorpmapper.Mapper, db gorp.SqlExecutor, runID string) ([]sdk.CDNItem, error) {
+ query := gorpmapper.NewQuery(`
324
+ WITH allResults AS (
325
+ SELECT api_ref->>'artifact_name' as name, api_ref->>'run_job_id' as run_job_id, id
326
+ FROM item
327
+ WHERE api_ref->>'run_id'::text = $1 AND type = $2 AND to_delete = false
328
+ ),
329
+ deduplication AS (
330
+ SELECT distinct on (name) *
331
+ FROM allResults
332
+ ORDER BY name, run_job_id DESC
333
+ )
334
+ SELECT * FROM item WHERE id IN (SELECT id FROM deduplication)
335
+ `).Args(runID, sdk.CDNTypeItemRunResult)
336
return getItems(ctx, m, db, query)
337
338
engine/cdn/item_handler.go
@@ -251,7 +251,7 @@ func (s *Service) getArtifacts(ctx context.Context, r *http.Request, w http.Resp
251
if runID == "" {
252
return sdk.WrapError(sdk.ErrWrongRequest, "invalid workflow run")
253
254
- items, err := item.LoadByRunID(ctx, s.Mapper, s.mustDBWithCtx(ctx), sdk.CDNTypeItemRunResult, runID)
+ items, err := item.LoadRunResultByRunID(ctx, s.Mapper, s.mustDBWithCtx(ctx), runID)
255
if err != nil {
256
return err
257
engine/cdn/item_handler_test.go
@@ -378,6 +378,17 @@ func TestGetItemsArtefactHandler(t *testing.T) {
378
item2.APIRefHash = refhashLog
379
require.NoError(t, item.Insert(context.Background(), s.Mapper, db, &item2))
380
381
+ workerSignature.JobID += 1
382
+ item3 := sdk.CDNItem{
383
+ Type: sdk.CDNTypeItemRunResult,
384
+ Status: sdk.CDNStatusItemCompleted,
385
+ APIRef: sdk.NewCDNRunResultApiRef(workerSignature),
386
+ }
387
+ refhash, err = item3.APIRef.ToHash()
388
+ require.NoError(t, err)
389
+ item3.APIRefHash = refhash
390
+ require.NoError(t, item.Insert(context.Background(), s.Mapper, db, &item3))
391
+
392
vars := map[string]string{
393
"type": string(sdk.CDNTypeItemRunResult),
394
@@ -397,5 +408,5 @@ func TestGetItemsArtefactHandler(t *testing.T) {
397
408
require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &results))
398
409
399
410
require.Equal(t, 1, len(results))
400
- require.Equal(t, item1.ID, results[0].ID)
411
+ require.Equal(t, item3.ID, results[0].ID)
401
412
0 commit comments