Skip to content

Commit 959beba

Browse files
committed
Activity page
1 parent 3b2fdf3 commit 959beba

13 files changed

+712
-43
lines changed

app/db/activity.queries.sql.go

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/db/notes.queries.sql.go

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/handlers/helpers.handlers.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ func memberListToMap(members []db.Member) map[int64]db.Member {
5353
return memberMap
5454
}
5555

56+
func noteListToMap(notes []db.Note) map[int64]db.Note {
57+
noteMap := make(map[int64]db.Note, len(notes))
58+
for _, note := range notes {
59+
noteMap[note.ID] = note
60+
}
61+
return noteMap
62+
}
63+
5664
func collectCreatedUpdatedByIDsFromNotes(notes []db.Note) []int64 {
5765
idSet := make(map[int64]bool)
5866

@@ -110,3 +118,43 @@ func collectCreatedUpdatedByIDsFromSpace(space *db.Space) []int64 {
110118

111119
return ids
112120
}
121+
122+
func collectMemberIDsFromActivity(entries []db.Activity) []int64 {
123+
idSet := make(map[int64]bool)
124+
125+
for _, activity := range entries {
126+
if activity.MemberID.Valid {
127+
idSet[activity.MemberID.Int64] = true
128+
}
129+
if activity.MemberID.Valid {
130+
idSet[activity.MemberID.Int64] = true
131+
}
132+
if activity.EntityType == db.ActivityEntity_Member && activity.EntityID.Valid {
133+
idSet[activity.EntityID.Int64] = true
134+
}
135+
}
136+
137+
ids := make([]int64, 0, len(idSet))
138+
for id := range idSet {
139+
ids = append(ids, id)
140+
}
141+
142+
return ids
143+
}
144+
145+
func collectNoteIDsFromActivity(entries []db.Activity) []int64 {
146+
idSet := make(map[int64]bool)
147+
148+
for _, activity := range entries {
149+
if activity.EntityType == db.ActivityEntity_Note && activity.EntityID.Valid {
150+
idSet[activity.EntityID.Int64] = true
151+
}
152+
}
153+
154+
ids := make([]int64, 0, len(idSet))
155+
for id := range idSet {
156+
ids = append(ids, id)
157+
}
158+
159+
return ids
160+
}

app/handlers/routes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func RegisterRoutes(r chi.Router, cfg *config.Config, logger *slog.Logger, sqlDB
8787
})
8888
})
8989

90-
r.Get("/activity", handleActivityList(logger))
90+
r.Get("/activity", handleActivityList(logger, queries))
9191
})
9292
})
9393
}

app/handlers/spaces.handlers.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,9 +414,57 @@ func handleTokensShow(logger *slog.Logger) http.HandlerFunc {
414414
}
415415
}
416416

417-
func handleActivityList(logger *slog.Logger) http.HandlerFunc {
417+
func handleActivityList(logger *slog.Logger, queries *db.Queries) http.HandlerFunc {
418418
return func(w http.ResponseWriter, r *http.Request) {
419-
err := pages.ActivityList().Render(r.Context(), w)
419+
space := rctx.GetSpace(r.Context())
420+
421+
entries, err := queries.ListActivity(r.Context(), db.ListActivityParams{
422+
SpaceID: space.ID,
423+
Limit: 50,
424+
})
425+
if err != nil {
426+
logger.Error(
427+
"error getting activity from database",
428+
slog.Any("error", err),
429+
slog.Int64("space_id", space.ID),
430+
)
431+
http.Error(w, "internal server err", http.StatusInternalServerError)
432+
return
433+
}
434+
435+
memberIDs := collectMemberIDsFromActivity(entries)
436+
members, err := queries.ListMembersByIDs(r.Context(), db.ListMembersByIDsParams{
437+
SpaceID: space.ID,
438+
MemberIds: memberIDs,
439+
})
440+
if err != nil {
441+
logger.Error(
442+
"error getting members from database",
443+
slog.Any("error", err),
444+
slog.Int64("space_id", space.ID),
445+
)
446+
http.Error(w, "internal server err", http.StatusInternalServerError)
447+
return
448+
}
449+
membersByID := memberListToMap(members)
450+
451+
noteIDs := collectNoteIDsFromActivity(entries)
452+
notes, err := queries.ListNotesByIDs(r.Context(), db.ListNotesByIDsParams{
453+
SpaceID: space.ID,
454+
NoteIds: noteIDs,
455+
})
456+
if err != nil {
457+
logger.Error(
458+
"error getting notes from database",
459+
slog.Any("error", err),
460+
slog.Int64("space_id", space.ID),
461+
)
462+
http.Error(w, "internal server err", http.StatusInternalServerError)
463+
return
464+
}
465+
notesByID := noteListToMap(notes)
466+
467+
err = pages.ActivityList(entries, membersByID, notesByID).Render(r.Context(), w)
420468
if err != nil {
421469
logger.Error(
422470
"failed to render template",

app/views/components/created_updated.templ

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ templ CreatedAtBy(
2626
membersByID map[int64]db.Member,
2727
) {
2828
<div class="text-xs">
29-
<span class="opacity-50">Created by </span>
29+
<span class="opacity-50">{ "Created by " }</span>
3030
<span class="opacity-75">{ helpers.DisplayMemberName(createdBy, membersByID) }</span>
31-
<span class="opacity-50">on </span>
31+
<span class="opacity-50">{ " on " } </span>
3232
<span class="opacity-75">{ helpers.FormatDate(createdAt) }</span>
33-
<span class="opacity-50">at </span>
33+
<span class="opacity-50">{ " at " } </span>
3434
<span class="opacity-75">{ helpers.FormatTime(createdAt) }</span>
3535
</div>
3636
}
@@ -41,11 +41,11 @@ templ UpdatedAtBy(
4141
membersByID map[int64]db.Member,
4242
) {
4343
<div class="text-xs">
44-
<span class="opacity-50">Updated by </span>
44+
<span class="opacity-50">{ " Updated by " }</span>
4545
<span class="opacity-75">{ helpers.DisplayMemberName(updatedBy, membersByID) }</span>
46-
<span class="opacity-50">on </span>
46+
<span class="opacity-50">{ " on " }</span>
4747
<span class="opacity-75">{ helpers.FormatDate(updatedAt) }</span>
48-
<span class="opacity-50">at </span>
48+
<span class="opacity-50">{ " at " }</span>
4949
<span class="opacity-75">{ helpers.FormatTime(updatedAt) }</span>
5050
</div>
5151
}

0 commit comments

Comments
 (0)