+11
-32
appview/db/timeline.go
+11
-32
appview/db/timeline.go
···
2
2
3
3
import (
4
4
"sort"
5
-
"time"
6
5
7
6
"github.com/bluesky-social/indigo/atproto/syntax"
8
7
"tangled.org/core/appview/models"
9
8
)
10
9
11
-
type TimelineEvent struct {
12
-
*models.Repo
13
-
*models.Follow
14
-
*models.Star
15
-
16
-
EventAt time.Time
17
-
18
-
// optional: populate only if Repo is a fork
19
-
Source *models.Repo
20
-
21
-
// optional: populate only if event is Follow
22
-
*models.Profile
23
-
*models.FollowStats
24
-
*models.FollowStatus
25
-
26
-
// optional: populate only if event is Repo
27
-
IsStarred bool
28
-
StarCount int64
29
-
}
30
-
31
10
// TODO: this gathers heterogenous events from different sources and aggregates
32
11
// them in code; if we did this entirely in sql, we could order and limit and paginate easily
33
-
func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
34
-
var events []TimelineEvent
12
+
func MakeTimeline(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
13
+
var events []models.TimelineEvent
35
14
36
15
repos, err := getTimelineRepos(e, limit, loggedInUserDid)
37
16
if err != nil {
···
91
70
return isStarred, starCount
92
71
}
93
72
94
-
func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
73
+
func getTimelineRepos(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
95
74
repos, err := GetRepos(e, limit)
96
75
if err != nil {
97
76
return nil, err
···
123
102
return nil, err
124
103
}
125
104
126
-
var events []TimelineEvent
105
+
var events []models.TimelineEvent
127
106
for _, r := range repos {
128
107
var source *models.Repo
129
108
if r.Source != "" {
···
134
113
135
114
isStarred, starCount := getRepoStarInfo(&r, starStatuses)
136
115
137
-
events = append(events, TimelineEvent{
116
+
events = append(events, models.TimelineEvent{
138
117
Repo: &r,
139
118
EventAt: r.Created,
140
119
Source: source,
···
146
125
return events, nil
147
126
}
148
127
149
-
func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
128
+
func getTimelineStars(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
150
129
stars, err := GetStars(e, limit)
151
130
if err != nil {
152
131
return nil, err
···
172
151
return nil, err
173
152
}
174
153
175
-
var events []TimelineEvent
154
+
var events []models.TimelineEvent
176
155
for _, s := range stars {
177
156
isStarred, starCount := getRepoStarInfo(s.Repo, starStatuses)
178
157
179
-
events = append(events, TimelineEvent{
158
+
events = append(events, models.TimelineEvent{
180
159
Star: &s,
181
160
EventAt: s.Created,
182
161
IsStarred: isStarred,
···
187
166
return events, nil
188
167
}
189
168
190
-
func getTimelineFollows(e Execer, limit int, loggedInUserDid string) ([]TimelineEvent, error) {
169
+
func getTimelineFollows(e Execer, limit int, loggedInUserDid string) ([]models.TimelineEvent, error) {
191
170
follows, err := GetFollows(e, limit)
192
171
if err != nil {
193
172
return nil, err
···
220
199
}
221
200
}
222
201
223
-
var events []TimelineEvent
202
+
var events []models.TimelineEvent
224
203
for _, f := range follows {
225
204
profile, _ := profiles[f.SubjectDid]
226
205
followStatMap, _ := followStatMap[f.SubjectDid]
···
230
209
followStatus = followStatuses[f.SubjectDid]
231
210
}
232
211
233
-
events = append(events, TimelineEvent{
212
+
events = append(events, models.TimelineEvent{
234
213
Follow: &f,
235
214
Profile: profile,
236
215
FollowStats: &followStatMap,
+23
appview/models/timeline.go
+23
appview/models/timeline.go
···
1
+
package models
2
+
3
+
import "time"
4
+
5
+
type TimelineEvent struct {
6
+
*Repo
7
+
*Follow
8
+
*Star
9
+
10
+
EventAt time.Time
11
+
12
+
// optional: populate only if Repo is a fork
13
+
Source *Repo
14
+
15
+
// optional: populate only if event is Follow
16
+
*Profile
17
+
*FollowStats
18
+
*FollowStatus
19
+
20
+
// optional: populate only if event is Repo
21
+
IsStarred bool
22
+
StarCount int64
23
+
}
+1
-2
appview/pages/pages.go
+1
-2
appview/pages/pages.go
···
19
19
"tangled.org/core/api/tangled"
20
20
"tangled.org/core/appview/commitverify"
21
21
"tangled.org/core/appview/config"
22
-
"tangled.org/core/appview/db"
23
22
"tangled.org/core/appview/models"
24
23
"tangled.org/core/appview/oauth"
25
24
"tangled.org/core/appview/pages/markup"
···
283
282
284
283
type TimelineParams struct {
285
284
LoggedInUser *oauth.User
286
-
Timeline []db.TimelineEvent
285
+
Timeline []models.TimelineEvent
287
286
Repos []models.Repo
288
287
}
289
288