+17
appview/db/profile.go
+17
appview/db/profile.go
···
2
2
3
3
import (
4
4
"fmt"
5
+
"log"
5
6
"sort"
6
7
"time"
7
8
)
···
12
13
*Issue
13
14
*Pull
14
15
*Repo
16
+
17
+
// optional: populate only if Repo is a fork
18
+
Source *Repo
15
19
}
16
20
17
21
func MakeProfileTimeline(e Execer, forDid string) ([]ProfileTimelineEvent, error) {
···
61
65
return timeline, fmt.Errorf("error getting all repos by did: %w", err)
62
66
}
63
67
68
+
log.Println(repos)
69
+
64
70
for _, repo := range repos {
71
+
var sourceRepo *Repo
72
+
log.Println("name", repo.Name)
73
+
if repo.Source != "" {
74
+
log.Println("source", repo.Source)
75
+
sourceRepo, err = GetRepoByAtUri(e, repo.Source)
76
+
if err != nil {
77
+
return nil, err
78
+
}
79
+
}
80
+
65
81
timeline = append(timeline, ProfileTimelineEvent{
66
82
EventAt: repo.Created,
67
83
Type: "repo",
68
84
Repo: &repo,
85
+
Source: sourceRepo,
69
86
})
70
87
}
71
88
+4
-2
appview/db/repos.go
+4
-2
appview/db/repos.go
···
97
97
98
98
if nullableDescription.Valid {
99
99
repo.Description = nullableDescription.String
100
-
} else {
101
-
repo.Description = ""
100
+
}
101
+
102
+
if nullableSource.Valid {
103
+
repo.Source = nullableSource.String
102
104
}
103
105
104
106
createdAtTime, err := time.Parse(time.RFC3339, createdAt)
+3
-7
appview/db/timeline.go
+3
-7
appview/db/timeline.go
···
38
38
}
39
39
40
40
for _, repo := range repos {
41
+
var sourceRepo *Repo
41
42
if repo.Source != "" {
42
-
sourceRepo, err := GetRepoByAtUri(e, repo.Source)
43
+
sourceRepo, err = GetRepoByAtUri(e, repo.Source)
43
44
if err != nil {
44
45
return nil, err
45
46
}
46
-
47
-
events = append(events, TimelineEvent{
48
-
Repo: &repo,
49
-
EventAt: repo.Created,
50
-
Source: sourceRepo,
51
-
})
52
47
}
53
48
54
49
events = append(events, TimelineEvent{
55
50
Repo: &repo,
56
51
EventAt: repo.Created,
52
+
Source: sourceRepo,
57
53
})
58
54
}
59
55
+8
-6
appview/pages/templates/timeline.html
+8
-6
appview/pages/templates/timeline.html
···
45
45
<p class="text-gray-600 dark:text-gray-300">
46
46
<a href="/{{ $userHandle }}" class="no-underline hover:underline">{{ $userHandle | truncateAt30 }}</a>
47
47
{{ if .Source }}
48
-
forked
49
-
<a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline">{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}</a>
50
-
to
51
-
<a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
48
+
forked
49
+
<a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline">
50
+
{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}
51
+
</a>
52
+
to
53
+
<a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
52
54
{{ else }}
53
-
created
54
-
<a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
55
+
created
56
+
<a href="/{{ $userHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
55
57
{{ end }}
56
58
<time class="text-gray-700 dark:text-gray-400 text-xs">{{ .Repo.Created | timeFmt }}</time>
57
59
</p>
+18
-1
appview/pages/templates/user/profile.html
+18
-1
appview/pages/templates/user/profile.html
···
67
67
</div>
68
68
{{ else if eq .Type "repo" }}
69
69
<div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3">
70
+
{{ if .Source }}
71
+
<div class="text-gray-800 dark:text-gray-400 p-1">
72
+
{{ i "git-fork" "w-5 h-5" }}
73
+
</div>
74
+
{{ else }}
70
75
<div class="text-gray-800 dark:text-gray-400 p-1">
71
76
{{ i "book-plus" "w-5 h-5" }}
72
77
</div>
78
+
{{ end }}
73
79
<div>
74
80
<p class="text-gray-600 dark:text-gray-300">
75
-
created <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
81
+
82
+
{{ if .Source }}
83
+
forked
84
+
<a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline">
85
+
{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}
86
+
</a>
87
+
to
88
+
<a href="/{{ didOrHandle $.UserHandle $.UserDid }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
89
+
{{ else }}
90
+
created
91
+
<a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
92
+
{{ end }}
76
93
<time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time>
77
94
</p>
78
95
</div>
+5
appview/state/profile.go
+5
appview/state/profile.go
···
44
44
didsToResolve = append(didsToResolve, r.Did)
45
45
}
46
46
for _, evt := range timeline {
47
+
if evt.Repo != nil {
48
+
if evt.Repo.Source != "" {
49
+
didsToResolve = append(didsToResolve, evt.Source.Did)
50
+
}
51
+
}
47
52
didsToResolve = append(didsToResolve, evt.Repo.Did)
48
53
}
49
54