forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package models 2 3import ( 4 "fmt" 5 "time" 6 7 "github.com/bluesky-social/indigo/atproto/syntax" 8 securejoin "github.com/cyphar/filepath-securejoin" 9 "tangled.org/core/api/tangled" 10) 11 12type Repo struct { 13 Did string 14 Name string 15 Knot string 16 Rkey string 17 Created time.Time 18 Description string 19 Spindle string 20 Labels []string 21 22 // optionally, populate this when querying for reverse mappings 23 RepoStats *RepoStats 24 25 // optional 26 Source string 27} 28 29func (r *Repo) AsRecord() tangled.Repo { 30 var source, spindle, description *string 31 32 if r.Source != "" { 33 source = &r.Source 34 } 35 36 if r.Spindle != "" { 37 spindle = &r.Spindle 38 } 39 40 if r.Description != "" { 41 description = &r.Description 42 } 43 44 return tangled.Repo{ 45 Knot: r.Knot, 46 Name: r.Name, 47 Description: description, 48 CreatedAt: r.Created.Format(time.RFC3339), 49 Source: source, 50 Spindle: spindle, 51 Labels: r.Labels, 52 } 53} 54 55func (r Repo) RepoAt() syntax.ATURI { 56 return syntax.ATURI(fmt.Sprintf("at://%s/%s/%s", r.Did, tangled.RepoNSID, r.Rkey)) 57} 58 59func (r Repo) DidSlashRepo() string { 60 p, _ := securejoin.SecureJoin(r.Did, r.Name) 61 return p 62} 63 64type RepoStats struct { 65 Language string 66 StarCount int 67 IssueCount IssueCount 68 PullCount PullCount 69} 70 71type IssueCount struct { 72 Open int 73 Closed int 74} 75 76type PullCount struct { 77 Open int 78 Merged int 79 Closed int 80 Deleted int 81} 82 83type RepoLabel struct { 84 Id int64 85 RepoAt syntax.ATURI 86 LabelAt syntax.ATURI 87}