+5
-25
appview/db/artifact.go
+5
-25
appview/db/artifact.go
···
5
5
"strings"
6
6
"time"
7
7
8
-
"github.com/bluesky-social/indigo/atproto/syntax"
9
8
"github.com/go-git/go-git/v5/plumbing"
10
9
"github.com/ipfs/go-cid"
11
-
"tangled.org/core/api/tangled"
10
+
"tangled.org/core/appview/models"
12
11
)
13
12
14
-
type Artifact struct {
15
-
Id uint64
16
-
Did string
17
-
Rkey string
18
-
19
-
RepoAt syntax.ATURI
20
-
Tag plumbing.Hash
21
-
CreatedAt time.Time
22
-
23
-
BlobCid cid.Cid
24
-
Name string
25
-
Size uint64
26
-
MimeType string
27
-
}
28
-
29
-
func (a *Artifact) ArtifactAt() syntax.ATURI {
30
-
return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", a.Did, tangled.RepoArtifactNSID, a.Rkey))
31
-
}
32
-
33
-
func AddArtifact(e Execer, artifact Artifact) error {
13
+
func AddArtifact(e Execer, artifact models.Artifact) error {
34
14
_, err := e.Exec(
35
15
`insert or ignore into artifacts (
36
16
did,
···
57
37
return err
58
38
}
59
39
60
-
func GetArtifact(e Execer, filters ...filter) ([]Artifact, error) {
61
-
var artifacts []Artifact
40
+
func GetArtifact(e Execer, filters ...filter) ([]models.Artifact, error) {
41
+
var artifacts []models.Artifact
62
42
63
43
var conditions []string
64
44
var args []any
···
94
74
defer rows.Close()
95
75
96
76
for rows.Next() {
97
-
var artifact Artifact
77
+
var artifact models.Artifact
98
78
var createdAt string
99
79
var tag []byte
100
80
var blobCid string
+47
-46
appview/ingester.go
+47
-46
appview/ingester.go
···
9
9
"time"
10
10
11
11
"github.com/bluesky-social/indigo/atproto/syntax"
12
-
"github.com/bluesky-social/jetstream/pkg/models"
12
+
jmodels "github.com/bluesky-social/jetstream/pkg/models"
13
13
"github.com/go-git/go-git/v5/plumbing"
14
14
"github.com/ipfs/go-cid"
15
15
"tangled.org/core/api/tangled"
16
16
"tangled.org/core/appview/config"
17
17
"tangled.org/core/appview/db"
18
+
"tangled.org/core/appview/models"
18
19
"tangled.org/core/appview/serververify"
19
20
"tangled.org/core/appview/validator"
20
21
"tangled.org/core/idresolver"
···
30
31
Validator *validator.Validator
31
32
}
32
33
33
-
type processFunc func(ctx context.Context, e *models.Event) error
34
+
type processFunc func(ctx context.Context, e *jmodels.Event) error
34
35
35
36
func (i *Ingester) Ingest() processFunc {
36
-
return func(ctx context.Context, e *models.Event) error {
37
+
return func(ctx context.Context, e *jmodels.Event) error {
37
38
var err error
38
39
defer func() {
39
40
eventTime := e.TimeUS
···
45
46
46
47
l := i.Logger.With("kind", e.Kind)
47
48
switch e.Kind {
48
-
case models.EventKindAccount:
49
+
case jmodels.EventKindAccount:
49
50
if !e.Account.Active && *e.Account.Status == "deactivated" {
50
51
err = i.IdResolver.InvalidateIdent(ctx, e.Account.Did)
51
52
}
52
-
case models.EventKindIdentity:
53
+
case jmodels.EventKindIdentity:
53
54
err = i.IdResolver.InvalidateIdent(ctx, e.Identity.Did)
54
-
case models.EventKindCommit:
55
+
case jmodels.EventKindCommit:
55
56
switch e.Commit.Collection {
56
57
case tangled.GraphFollowNSID:
57
58
err = i.ingestFollow(e)
···
91
92
}
92
93
}
93
94
94
-
func (i *Ingester) ingestStar(e *models.Event) error {
95
+
func (i *Ingester) ingestStar(e *jmodels.Event) error {
95
96
var err error
96
97
did := e.Did
97
98
···
99
100
l = l.With("nsid", e.Commit.Collection)
100
101
101
102
switch e.Commit.Operation {
102
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
103
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
103
104
var subjectUri syntax.ATURI
104
105
105
106
raw := json.RawMessage(e.Commit.Record)
···
120
121
RepoAt: subjectUri,
121
122
Rkey: e.Commit.RKey,
122
123
})
123
-
case models.CommitOperationDelete:
124
+
case jmodels.CommitOperationDelete:
124
125
err = db.DeleteStarByRkey(i.Db, did, e.Commit.RKey)
125
126
}
126
127
···
131
132
return nil
132
133
}
133
134
134
-
func (i *Ingester) ingestFollow(e *models.Event) error {
135
+
func (i *Ingester) ingestFollow(e *jmodels.Event) error {
135
136
var err error
136
137
did := e.Did
137
138
···
139
140
l = l.With("nsid", e.Commit.Collection)
140
141
141
142
switch e.Commit.Operation {
142
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
143
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
143
144
raw := json.RawMessage(e.Commit.Record)
144
145
record := tangled.GraphFollow{}
145
146
err = json.Unmarshal(raw, &record)
···
153
154
SubjectDid: record.Subject,
154
155
Rkey: e.Commit.RKey,
155
156
})
156
-
case models.CommitOperationDelete:
157
+
case jmodels.CommitOperationDelete:
157
158
err = db.DeleteFollowByRkey(i.Db, did, e.Commit.RKey)
158
159
}
159
160
···
164
165
return nil
165
166
}
166
167
167
-
func (i *Ingester) ingestPublicKey(e *models.Event) error {
168
+
func (i *Ingester) ingestPublicKey(e *jmodels.Event) error {
168
169
did := e.Did
169
170
var err error
170
171
···
172
173
l = l.With("nsid", e.Commit.Collection)
173
174
174
175
switch e.Commit.Operation {
175
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
176
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
176
177
l.Debug("processing add of pubkey")
177
178
raw := json.RawMessage(e.Commit.Record)
178
179
record := tangled.PublicKey{}
···
185
186
name := record.Name
186
187
key := record.Key
187
188
err = db.AddPublicKey(i.Db, did, name, key, e.Commit.RKey)
188
-
case models.CommitOperationDelete:
189
+
case jmodels.CommitOperationDelete:
189
190
l.Debug("processing delete of pubkey")
190
191
err = db.DeletePublicKeyByRkey(i.Db, did, e.Commit.RKey)
191
192
}
···
197
198
return nil
198
199
}
199
200
200
-
func (i *Ingester) ingestArtifact(e *models.Event) error {
201
+
func (i *Ingester) ingestArtifact(e *jmodels.Event) error {
201
202
did := e.Did
202
203
var err error
203
204
···
205
206
l = l.With("nsid", e.Commit.Collection)
206
207
207
208
switch e.Commit.Operation {
208
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
209
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
209
210
raw := json.RawMessage(e.Commit.Record)
210
211
record := tangled.RepoArtifact{}
211
212
err = json.Unmarshal(raw, &record)
···
234
235
createdAt = time.Now()
235
236
}
236
237
237
-
artifact := db.Artifact{
238
+
artifact := models.Artifact{
238
239
Did: did,
239
240
Rkey: e.Commit.RKey,
240
241
RepoAt: repoAt,
···
247
248
}
248
249
249
250
err = db.AddArtifact(i.Db, artifact)
250
-
case models.CommitOperationDelete:
251
+
case jmodels.CommitOperationDelete:
251
252
err = db.DeleteArtifact(i.Db, db.FilterEq("did", did), db.FilterEq("rkey", e.Commit.RKey))
252
253
}
253
254
···
258
259
return nil
259
260
}
260
261
261
-
func (i *Ingester) ingestProfile(e *models.Event) error {
262
+
func (i *Ingester) ingestProfile(e *jmodels.Event) error {
262
263
did := e.Did
263
264
var err error
264
265
···
270
271
}
271
272
272
273
switch e.Commit.Operation {
273
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
274
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
274
275
raw := json.RawMessage(e.Commit.Record)
275
276
record := tangled.ActorProfile{}
276
277
err = json.Unmarshal(raw, &record)
···
338
339
}
339
340
340
341
err = db.UpsertProfile(tx, &profile)
341
-
case models.CommitOperationDelete:
342
+
case jmodels.CommitOperationDelete:
342
343
err = db.DeleteArtifact(i.Db, db.FilterEq("did", did), db.FilterEq("rkey", e.Commit.RKey))
343
344
}
344
345
···
349
350
return nil
350
351
}
351
352
352
-
func (i *Ingester) ingestSpindleMember(ctx context.Context, e *models.Event) error {
353
+
func (i *Ingester) ingestSpindleMember(ctx context.Context, e *jmodels.Event) error {
353
354
did := e.Did
354
355
var err error
355
356
···
357
358
l = l.With("nsid", e.Commit.Collection)
358
359
359
360
switch e.Commit.Operation {
360
-
case models.CommitOperationCreate:
361
+
case jmodels.CommitOperationCreate:
361
362
raw := json.RawMessage(e.Commit.Record)
362
363
record := tangled.SpindleMember{}
363
364
err = json.Unmarshal(raw, &record)
···
402
403
}
403
404
404
405
l.Info("added spindle member")
405
-
case models.CommitOperationDelete:
406
+
case jmodels.CommitOperationDelete:
406
407
rkey := e.Commit.RKey
407
408
408
409
ddb, ok := i.Db.Execer.(*db.DB)
···
455
456
return nil
456
457
}
457
458
458
-
func (i *Ingester) ingestSpindle(ctx context.Context, e *models.Event) error {
459
+
func (i *Ingester) ingestSpindle(ctx context.Context, e *jmodels.Event) error {
459
460
did := e.Did
460
461
var err error
461
462
···
463
464
l = l.With("nsid", e.Commit.Collection)
464
465
465
466
switch e.Commit.Operation {
466
-
case models.CommitOperationCreate:
467
+
case jmodels.CommitOperationCreate:
467
468
raw := json.RawMessage(e.Commit.Record)
468
469
record := tangled.Spindle{}
469
470
err = json.Unmarshal(raw, &record)
···
501
502
502
503
return nil
503
504
504
-
case models.CommitOperationDelete:
505
+
case jmodels.CommitOperationDelete:
505
506
instance := e.Commit.RKey
506
507
507
508
ddb, ok := i.Db.Execer.(*db.DB)
···
569
570
return nil
570
571
}
571
572
572
-
func (i *Ingester) ingestString(e *models.Event) error {
573
+
func (i *Ingester) ingestString(e *jmodels.Event) error {
573
574
did := e.Did
574
575
rkey := e.Commit.RKey
575
576
···
584
585
}
585
586
586
587
switch e.Commit.Operation {
587
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
588
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
588
589
raw := json.RawMessage(e.Commit.Record)
589
590
record := tangled.String{}
590
591
err = json.Unmarshal(raw, &record)
···
607
608
608
609
return nil
609
610
610
-
case models.CommitOperationDelete:
611
+
case jmodels.CommitOperationDelete:
611
612
if err := db.DeleteString(
612
613
ddb,
613
614
db.FilterEq("did", did),
···
623
624
return nil
624
625
}
625
626
626
-
func (i *Ingester) ingestKnotMember(e *models.Event) error {
627
+
func (i *Ingester) ingestKnotMember(e *jmodels.Event) error {
627
628
did := e.Did
628
629
var err error
629
630
···
631
632
l = l.With("nsid", e.Commit.Collection)
632
633
633
634
switch e.Commit.Operation {
634
-
case models.CommitOperationCreate:
635
+
case jmodels.CommitOperationCreate:
635
636
raw := json.RawMessage(e.Commit.Record)
636
637
record := tangled.KnotMember{}
637
638
err = json.Unmarshal(raw, &record)
···
661
662
}
662
663
663
664
l.Info("added knot member")
664
-
case models.CommitOperationDelete:
665
+
case jmodels.CommitOperationDelete:
665
666
// we don't store knot members in a table (like we do for spindle)
666
667
// and we can't remove this just yet. possibly fixed if we switch
667
668
// to either:
···
675
676
return nil
676
677
}
677
678
678
-
func (i *Ingester) ingestKnot(e *models.Event) error {
679
+
func (i *Ingester) ingestKnot(e *jmodels.Event) error {
679
680
did := e.Did
680
681
var err error
681
682
···
683
684
l = l.With("nsid", e.Commit.Collection)
684
685
685
686
switch e.Commit.Operation {
686
-
case models.CommitOperationCreate:
687
+
case jmodels.CommitOperationCreate:
687
688
raw := json.RawMessage(e.Commit.Record)
688
689
record := tangled.Knot{}
689
690
err = json.Unmarshal(raw, &record)
···
718
719
719
720
return nil
720
721
721
-
case models.CommitOperationDelete:
722
+
case jmodels.CommitOperationDelete:
722
723
domain := e.Commit.RKey
723
724
724
725
ddb, ok := i.Db.Execer.(*db.DB)
···
778
779
779
780
return nil
780
781
}
781
-
func (i *Ingester) ingestIssue(ctx context.Context, e *models.Event) error {
782
+
func (i *Ingester) ingestIssue(ctx context.Context, e *jmodels.Event) error {
782
783
did := e.Did
783
784
rkey := e.Commit.RKey
784
785
···
793
794
}
794
795
795
796
switch e.Commit.Operation {
796
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
797
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
797
798
raw := json.RawMessage(e.Commit.Record)
798
799
record := tangled.RepoIssue{}
799
800
err = json.Unmarshal(raw, &record)
···
829
830
830
831
return nil
831
832
832
-
case models.CommitOperationDelete:
833
+
case jmodels.CommitOperationDelete:
833
834
if err := db.DeleteIssues(
834
835
ddb,
835
836
db.FilterEq("did", did),
···
845
846
return nil
846
847
}
847
848
848
-
func (i *Ingester) ingestIssueComment(e *models.Event) error {
849
+
func (i *Ingester) ingestIssueComment(e *jmodels.Event) error {
849
850
did := e.Did
850
851
rkey := e.Commit.RKey
851
852
···
860
861
}
861
862
862
863
switch e.Commit.Operation {
863
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
864
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
864
865
raw := json.RawMessage(e.Commit.Record)
865
866
record := tangled.RepoIssueComment{}
866
867
err = json.Unmarshal(raw, &record)
···
884
885
885
886
return nil
886
887
887
-
case models.CommitOperationDelete:
888
+
case jmodels.CommitOperationDelete:
888
889
if err := db.DeleteIssueComments(
889
890
ddb,
890
891
db.FilterEq("did", did),
···
899
900
return nil
900
901
}
901
902
902
-
func (i *Ingester) ingestLabelDefinition(e *models.Event) error {
903
+
func (i *Ingester) ingestLabelDefinition(e *jmodels.Event) error {
903
904
did := e.Did
904
905
rkey := e.Commit.RKey
905
906
···
914
915
}
915
916
916
917
switch e.Commit.Operation {
917
-
case models.CommitOperationCreate, models.CommitOperationUpdate:
918
+
case jmodels.CommitOperationCreate, jmodels.CommitOperationUpdate:
918
919
raw := json.RawMessage(e.Commit.Record)
919
920
record := tangled.LabelDefinition{}
920
921
err = json.Unmarshal(raw, &record)
···
938
939
939
940
return nil
940
941
941
-
case models.CommitOperationDelete:
942
+
case jmodels.CommitOperationDelete:
942
943
if err := db.DeleteLabelDefinition(
943
944
ddb,
944
945
db.FilterEq("did", did),
+30
appview/models/artifact.go
+30
appview/models/artifact.go
···
1
+
package models
2
+
3
+
import (
4
+
"fmt"
5
+
"time"
6
+
7
+
"github.com/bluesky-social/indigo/atproto/syntax"
8
+
"github.com/go-git/go-git/v5/plumbing"
9
+
"github.com/ipfs/go-cid"
10
+
"tangled.org/core/api/tangled"
11
+
)
12
+
13
+
type Artifact struct {
14
+
Id uint64
15
+
Did string
16
+
Rkey string
17
+
18
+
RepoAt syntax.ATURI
19
+
Tag plumbing.Hash
20
+
CreatedAt time.Time
21
+
22
+
BlobCid cid.Cid
23
+
Name string
24
+
Size uint64
25
+
MimeType string
26
+
}
27
+
28
+
func (a *Artifact) ArtifactAt() syntax.ATURI {
29
+
return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", a.Did, tangled.RepoArtifactNSID, a.Rkey))
30
+
}
+4
-3
appview/pages/pages.go
+4
-3
appview/pages/pages.go
···
20
20
"tangled.org/core/appview/commitverify"
21
21
"tangled.org/core/appview/config"
22
22
"tangled.org/core/appview/db"
23
+
"tangled.org/core/appview/models"
23
24
"tangled.org/core/appview/oauth"
24
25
"tangled.org/core/appview/pages/markup"
25
26
"tangled.org/core/appview/pages/repoinfo"
···
729
730
RepoInfo repoinfo.RepoInfo
730
731
Active string
731
732
types.RepoTagsResponse
732
-
ArtifactMap map[plumbing.Hash][]db.Artifact
733
-
DanglingArtifacts []db.Artifact
733
+
ArtifactMap map[plumbing.Hash][]models.Artifact
734
+
DanglingArtifacts []models.Artifact
734
735
}
735
736
736
737
func (p *Pages) RepoTags(w io.Writer, params RepoTagsParams) error {
···
741
742
type RepoArtifactParams struct {
742
743
LoggedInUser *oauth.User
743
744
RepoInfo repoinfo.RepoInfo
744
-
Artifact db.Artifact
745
+
Artifact models.Artifact
745
746
}
746
747
747
748
func (p *Pages) RepoArtifactFragment(w io.Writer, params RepoArtifactParams) error {
+2
-1
appview/repo/artifact.go
+2
-1
appview/repo/artifact.go
···
18
18
"github.com/ipfs/go-cid"
19
19
"tangled.org/core/api/tangled"
20
20
"tangled.org/core/appview/db"
21
+
"tangled.org/core/appview/models"
21
22
"tangled.org/core/appview/pages"
22
23
"tangled.org/core/appview/reporesolver"
23
24
"tangled.org/core/appview/xrpcclient"
···
100
101
}
101
102
defer tx.Rollback()
102
103
103
-
artifact := db.Artifact{
104
+
artifact := models.Artifact{
104
105
Did: user.Did,
105
106
Rkey: rkey,
106
107
RepoAt: f.RepoAt(),
+3
-2
appview/repo/repo.go
+3
-2
appview/repo/repo.go
···
24
24
"tangled.org/core/appview/commitverify"
25
25
"tangled.org/core/appview/config"
26
26
"tangled.org/core/appview/db"
27
+
"tangled.org/core/appview/models"
27
28
"tangled.org/core/appview/notify"
28
29
"tangled.org/core/appview/oauth"
29
30
"tangled.org/core/appview/pages"
···
575
576
}
576
577
577
578
// convert artifacts to map for easy UI building
578
-
artifactMap := make(map[plumbing.Hash][]db.Artifact)
579
+
artifactMap := make(map[plumbing.Hash][]models.Artifact)
579
580
for _, a := range artifacts {
580
581
artifactMap[a.Tag] = append(artifactMap[a.Tag], a)
581
582
}
582
583
583
-
var danglingArtifacts []db.Artifact
584
+
var danglingArtifacts []models.Artifact
584
585
for _, a := range artifacts {
585
586
found := false
586
587
for _, t := range result.Tags {