forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 2.4 kB view raw
1package db 2 3import ( 4 "fmt" 5 "strings" 6 "time" 7 8 "github.com/go-git/go-git/v5/plumbing" 9 "github.com/ipfs/go-cid" 10 "tangled.org/core/appview/models" 11) 12 13func AddArtifact(e Execer, artifact models.Artifact) error { 14 _, err := e.Exec( 15 `insert or ignore into artifacts ( 16 did, 17 rkey, 18 repo_at, 19 tag, 20 created, 21 blob_cid, 22 name, 23 size, 24 mimetype 25 ) 26 values (?, ?, ?, ?, ?, ?, ?, ?, ?)`, 27 artifact.Did, 28 artifact.Rkey, 29 artifact.RepoAt, 30 artifact.Tag[:], 31 artifact.CreatedAt.Format(time.RFC3339), 32 artifact.BlobCid.String(), 33 artifact.Name, 34 artifact.Size, 35 artifact.MimeType, 36 ) 37 return err 38} 39 40func GetArtifact(e Execer, filters ...filter) ([]models.Artifact, error) { 41 var artifacts []models.Artifact 42 43 var conditions []string 44 var args []any 45 for _, filter := range filters { 46 conditions = append(conditions, filter.Condition()) 47 args = append(args, filter.Arg()...) 48 } 49 50 whereClause := "" 51 if conditions != nil { 52 whereClause = " where " + strings.Join(conditions, " and ") 53 } 54 55 query := fmt.Sprintf(`select 56 did, 57 rkey, 58 repo_at, 59 tag, 60 created, 61 blob_cid, 62 name, 63 size, 64 mimetype 65 from artifacts %s`, 66 whereClause, 67 ) 68 69 rows, err := e.Query(query, args...) 70 if err != nil { 71 return nil, err 72 } 73 defer rows.Close() 74 75 for rows.Next() { 76 var artifact models.Artifact 77 var createdAt string 78 var tag []byte 79 var blobCid string 80 81 if err := rows.Scan( 82 &artifact.Did, 83 &artifact.Rkey, 84 &artifact.RepoAt, 85 &tag, 86 &createdAt, 87 &blobCid, 88 &artifact.Name, 89 &artifact.Size, 90 &artifact.MimeType, 91 ); err != nil { 92 return nil, err 93 } 94 95 artifact.CreatedAt, err = time.Parse(time.RFC3339, createdAt) 96 if err != nil { 97 artifact.CreatedAt = time.Now() 98 } 99 artifact.Tag = plumbing.Hash(tag) 100 artifact.BlobCid = cid.MustParse(blobCid) 101 102 artifacts = append(artifacts, artifact) 103 } 104 105 if err := rows.Err(); err != nil { 106 return nil, err 107 } 108 109 return artifacts, nil 110} 111 112func DeleteArtifact(e Execer, filters ...filter) error { 113 var conditions []string 114 var args []any 115 for _, filter := range filters { 116 conditions = append(conditions, filter.Condition()) 117 args = append(args, filter.Arg()...) 118 } 119 120 whereClause := "" 121 if conditions != nil { 122 whereClause = " where " + strings.Join(conditions, " and ") 123 } 124 125 query := fmt.Sprintf(`delete from artifacts %s`, whereClause) 126 127 _, err := e.Exec(query, args...) 128 return err 129}