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}