Signed-off-by: brookjeynes me@brookjeynes.dev
+58
-47
internal/server/handlers/study-session.go
+58
-47
internal/server/handlers/study-session.go
···
3
import (
4
"errors"
5
"fmt"
6
-
"log"
7
"net/http"
8
"strconv"
9
"time"
···
117
}
118
119
func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) {
120
isFriends, err := strconv.ParseBool(r.URL.Query().Get("friends"))
121
if err != nil {
122
-
log.Println("failed to parse friends value:", err)
123
isFriends = false
124
}
125
···
129
}
130
page, err := strconv.ParseInt(pageStr, 10, 64)
131
if err != nil {
132
-
log.Println("failed to parse page value:", err)
133
page = 1
134
}
135
if page == 0 {
···
148
if !isFriends {
149
feed, err = db.GetStudySessionFeed(h.Db, pageSize+1, int(offset))
150
if err != nil {
151
-
log.Println("failed to get global feed:", err)
152
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
153
return
154
}
155
err = h.GetBskyProfileHydratedSessionFeed(feed)
156
if err != nil {
157
-
log.Println("failed to hydrate bsky profiles:", err)
158
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
159
return
160
}
161
} else {
162
if fetchUserError != nil {
163
-
log.Println("failed to get logged-in user:", err)
164
htmx.HxRedirect(w, "/login")
165
return
166
}
167
168
feed, err = db.GetFriendsStudySessionFeed(h.Db, user.Did, pageSize+1, int(offset))
169
if err != nil {
170
-
log.Println("failed to get global feed:", err)
171
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
172
return
173
}
174
err = h.GetBskyProfileHydratedSessionFeed(feed)
175
if err != nil {
176
-
log.Println("failed to hydrate bsky profiles:", err)
177
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
178
return
179
}
···
181
182
feed, err = ApplyPendingChanges(h, w, r, feed, PendingStudySessionCreation, PendingStudySessionUpdates, PendingStudySessionDeletion)
183
if err != nil {
184
-
log.Printf("failed to save yoten-session after processing pending changes: %v", err)
185
}
186
187
nextPage := 0
···
200
}
201
202
func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Request) {
203
client, err := h.Oauth.AuthorizedClient(r)
204
if err != nil {
205
-
log.Println("failed to get authorized client:", err)
206
htmx.HxRedirect(w, "/login")
207
return
208
}
209
210
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
211
if err != nil {
212
-
log.Println("failed to get logged-in user:", err)
213
htmx.HxRedirect(w, "/login")
214
return
215
}
···
217
rkey := chi.URLParam(r, "rkey")
218
studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey)
219
if err != nil {
220
-
log.Println("failed to get study session from db:", err)
221
htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.")
222
return
223
}
224
225
if user.Did != studySession.Did {
226
-
log.Printf("user '%s' does not own record '%s'", user.Did, studySession.Rkey)
227
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this study session.")
228
return
229
}
···
232
case http.MethodGet:
233
userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did)
234
if err != nil {
235
-
log.Println("failed to get user-defined activities:", err)
236
}
237
238
resources, err := db.GetResourcesByDid(h.Db, user.Did)
239
if err != nil {
240
-
log.Println("failed to get user-defined resources:", err)
241
}
242
243
preDefinedActivities, err := db.GetPredefinedActivities(h.Db)
244
if err != nil {
245
-
log.Println("failed to get pre-defined activities:", err)
246
}
247
248
currentResource := studySession.Resource
···
267
268
languages, err := db.GetProfileLanguages(h.Db, user.Did)
269
if err != nil {
270
-
log.Println("failed to fetch profile languages:", err)
271
}
272
273
views.EditStudySessionPage(views.EditStudySessionPageParams{
···
280
case http.MethodPost:
281
updatedStudySession, err := h.parseStudySessionForm(r)
282
if err != nil {
283
-
log.Println("invalid study session form:", err)
284
htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.")
285
return
286
}
···
289
updatedStudySession.CreatedAt = studySession.CreatedAt
290
291
if err := db.ValidateStudySession(updatedStudySession); err != nil {
292
-
log.Println("invalid study session:", err)
293
switch {
294
case errors.Is(err, db.ErrSessionDescriptionTooLong):
295
htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.")
···
358
SwapRecord: cid,
359
})
360
if err != nil {
361
-
log.Println("failed to update study session record:", err)
362
htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.")
363
return
364
}
365
366
err = SavePendingUpdate(h, w, r, PendingStudySessionUpdates, updatedStudySession)
367
if err != nil {
368
-
log.Printf("failed to save yoten-session to add pending study session updates: %v", err)
369
}
370
371
if !h.Config.Core.Dev {
···
377
Set("rkey", rkey),
378
})
379
if err != nil {
380
-
log.Println("failed to enqueue posthog event:", err)
381
}
382
}
383
···
386
}
387
388
func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Request) {
389
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
390
if err != nil {
391
-
log.Println("failed to get logged-in user:", err)
392
htmx.HxRedirect(w, "/login")
393
return
394
}
395
396
client, err := h.Oauth.AuthorizedClient(r)
397
if err != nil {
398
-
log.Println("failed to get authorized client:", err)
399
htmx.HxRedirect(w, "/login")
400
return
401
}
···
404
case http.MethodGet:
405
profile, err := db.GetProfile(h.Db, user.Did)
406
if err != nil {
407
-
log.Printf("failed to find %s in db: %s", user.Did, err)
408
htmx.HxError(w, http.StatusNotFound, "Failed to find user.")
409
return
410
}
411
412
userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did)
413
if err != nil {
414
-
log.Println("failed to get user-defined activities:", err)
415
}
416
preDefinedActivities, err := db.GetPredefinedActivities(h.Db)
417
if err != nil {
418
-
log.Println("failed to get pre-defined activities:", err)
419
}
420
activeActivities := utils.Filter(userDefinedActivities, func(activity db.Activity) bool {
421
return activity.Status != db.Deleted
···
424
425
resources, err := db.GetResourcesByDid(h.Db, user.Did)
426
if err != nil {
427
-
log.Println("failed to get user-defined resources:", err)
428
}
429
activeResources := utils.Filter(resources, func(resource db.Resource) bool {
430
return resource.Status != db.Deleted
···
440
case http.MethodPost:
441
newStudySession, err := h.parseStudySessionForm(r)
442
if err != nil {
443
-
log.Println("invalid study session form:", err)
444
htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.")
445
return
446
}
···
459
}
460
461
if err := db.ValidateStudySession(newStudySession); err != nil {
462
-
log.Println("invalid study session:", err)
463
switch {
464
case errors.Is(err, db.ErrSessionDescriptionTooLong):
465
htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.")
···
521
},
522
})
523
if err != nil {
524
-
log.Println("failed to create study session record:", err)
525
htmx.HxError(w, http.StatusInternalServerError, "Failed to create study session, try again later.")
526
return
527
}
528
529
err = SavePendingCreate(h, w, r, PendingStudySessionCreation, newStudySession)
530
if err != nil {
531
-
log.Printf("failed to save yoten-session to add pending study session creation: %v", err)
532
}
533
534
if !h.Config.Core.Dev {
···
545
Set("date_is_today", newStudySession.Date.Truncate(24*time.Hour).Equal(time.Now().UTC().In(loc).Truncate(24*time.Hour))),
546
})
547
if err != nil {
548
-
log.Println("failed to enqueue posthog event:", err)
549
}
550
}
551
···
554
}
555
556
func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Request) {
557
user := h.Oauth.GetUser(r)
558
if user == nil {
559
-
log.Println("failed to get logged-in user")
560
htmx.HxRedirect(w, "/login")
561
return
562
}
563
564
client, err := h.Oauth.AuthorizedClient(r)
565
if err != nil {
566
-
log.Println("failed to get authorized client:", err)
567
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.")
568
return
569
}
···
572
case http.MethodDelete:
573
err := r.ParseForm()
574
if err != nil {
575
-
log.Println("failed to parse study session delete form:", err)
576
htmx.HxError(w, http.StatusBadRequest, "Failed to delete study session, try again later.")
577
return
578
}
···
580
rkey := chi.URLParam(r, "rkey")
581
studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey)
582
if err != nil {
583
-
log.Println("failed to get study session from db:", err)
584
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.")
585
return
586
}
587
588
if user.Did != studySession.Did {
589
-
log.Println("failed to delete study session: user does not own record")
590
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.")
591
return
592
}
···
597
Rkey: rkey,
598
})
599
if err != nil {
600
-
log.Println("failed to delete study session from PDS:", err)
601
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.")
602
return
603
}
604
605
err = SavePendingDelete(h, w, r, PendingStudySessionDeletion, studySession)
606
if err != nil {
607
-
log.Printf("failed to save yoten-session to add pending study session deletion: %v", err)
608
}
609
610
if !h.Config.Core.Dev {
···
617
Set("session_age_seconds", time.Since(studySession.CreatedAt).Seconds()),
618
})
619
if err != nil {
620
-
log.Println("failed to enqueue posthog event:", err)
621
}
622
}
623
···
644
}
645
646
func (h *Handler) HandleStudySessionPage(w http.ResponseWriter, r *http.Request) {
647
user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r)
648
didOrHandle := chi.URLParam(r, "user")
649
if didOrHandle == "" {
···
661
662
studySession, err := db.GetStudySessionByRkey(h.Db, ident.DID.String(), rkey)
663
if err != nil {
664
-
log.Println("failed to retrieve study session:", err)
665
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve study session, try again later.")
666
return
667
}
668
669
bskyProfile, err := bsky.GetBskyProfile(ident.DID.String())
670
if err != nil {
671
-
log.Println("failed to retrieve bsky profile for study session:", err)
672
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve bsky profile, try again later.")
673
return
674
}
675
676
profile, err := db.GetProfile(h.Db, ident.DID.String())
677
if err != nil {
678
-
log.Println("failed to retrieve profile for study session:", err)
679
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve profile, try again later.")
680
return
681
}
···
698
}
699
700
func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *http.Request) {
701
user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r)
702
703
didOrHandle := chi.URLParam(r, "user")
···
721
}
722
page, err := strconv.ParseInt(pageStr, 10, 64)
723
if err != nil {
724
-
log.Println("failed to parse page value:", err)
725
page = 1
726
}
727
if page == 0 {
···
733
734
commentFeed, err := db.GetCommentsForSession(h.Db, studySessionUri.String(), pageSize+1, int(offset))
735
if err != nil {
736
-
log.Println("failed to get comment feed:", err)
737
htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.")
738
return
739
}
···
769
770
populatedCommentFeed, err := h.BuildCommentFeed(finalFeed)
771
if err != nil {
772
-
log.Println("failed to populate comment feed:", err)
773
htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.")
774
return
775
}
···
3
import (
4
"errors"
5
"fmt"
6
"net/http"
7
"strconv"
8
"time"
···
116
}
117
118
func (h *Handler) HandleStudySessionFeed(w http.ResponseWriter, r *http.Request) {
119
+
l := h.Logger.With("handler", "HandleStudySessionFeed")
120
+
121
isFriends, err := strconv.ParseBool(r.URL.Query().Get("friends"))
122
if err != nil {
123
+
l.Error("failed to parse friends value", "err", err)
124
isFriends = false
125
}
126
···
130
}
131
page, err := strconv.ParseInt(pageStr, 10, 64)
132
if err != nil {
133
+
l.Error("failed to parse page value", "err", err)
134
page = 1
135
}
136
if page == 0 {
···
149
if !isFriends {
150
feed, err = db.GetStudySessionFeed(h.Db, pageSize+1, int(offset))
151
if err != nil {
152
+
l.Error("failed to get global feed", "err", err)
153
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
154
return
155
}
156
err = h.GetBskyProfileHydratedSessionFeed(feed)
157
if err != nil {
158
+
l.Error("failed to hydrate bsky profiles", "err", err)
159
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
160
return
161
}
162
} else {
163
if fetchUserError != nil {
164
+
l.Error("failed to get logged-in user", "err", err)
165
htmx.HxRedirect(w, "/login")
166
return
167
}
168
169
feed, err = db.GetFriendsStudySessionFeed(h.Db, user.Did, pageSize+1, int(offset))
170
if err != nil {
171
+
l.Error("failed to get global feed", "err", err)
172
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
173
return
174
}
175
err = h.GetBskyProfileHydratedSessionFeed(feed)
176
if err != nil {
177
+
l.Error("failed to hydrate bsky profiles", "err", err)
178
htmx.HxError(w, http.StatusInternalServerError, "Failed to get global study session feed, try again later.")
179
return
180
}
···
182
183
feed, err = ApplyPendingChanges(h, w, r, feed, PendingStudySessionCreation, PendingStudySessionUpdates, PendingStudySessionDeletion)
184
if err != nil {
185
+
l.Error("failed to save yoten-session after processing pending changes", "err", err)
186
}
187
188
nextPage := 0
···
201
}
202
203
func (h *Handler) HandleEditStudySessionPage(w http.ResponseWriter, r *http.Request) {
204
+
l := h.Logger.With("handler", "HandleEditStudySessionPage")
205
+
206
client, err := h.Oauth.AuthorizedClient(r)
207
if err != nil {
208
+
l.Error("failed to get authorized client", "err", err)
209
htmx.HxRedirect(w, "/login")
210
return
211
}
212
213
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
214
if err != nil {
215
+
l.Error("failed to get logged-in user", "err", err)
216
htmx.HxRedirect(w, "/login")
217
return
218
}
···
220
rkey := chi.URLParam(r, "rkey")
221
studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey)
222
if err != nil {
223
+
l.Error("failed to get study session from db", "err", err)
224
htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.")
225
return
226
}
227
228
if user.Did != studySession.Did {
229
+
l.Error("user does not own record", "did", user.Did, "sessionDid", studySession.Did)
230
htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this study session.")
231
return
232
}
···
235
case http.MethodGet:
236
userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did)
237
if err != nil {
238
+
l.Error("failed to get user-defined activities", "err", err)
239
}
240
241
resources, err := db.GetResourcesByDid(h.Db, user.Did)
242
if err != nil {
243
+
l.Error("failed to get user-defined resources", "err", err)
244
}
245
246
preDefinedActivities, err := db.GetPredefinedActivities(h.Db)
247
if err != nil {
248
+
l.Error("failed to get pre-defined activities", "err", err)
249
}
250
251
currentResource := studySession.Resource
···
270
271
languages, err := db.GetProfileLanguages(h.Db, user.Did)
272
if err != nil {
273
+
l.Error("failed to fetch profile languages", "err", err)
274
}
275
276
views.EditStudySessionPage(views.EditStudySessionPageParams{
···
283
case http.MethodPost:
284
updatedStudySession, err := h.parseStudySessionForm(r)
285
if err != nil {
286
+
l.Error("invalid study session form", "err", err)
287
htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.")
288
return
289
}
···
292
updatedStudySession.CreatedAt = studySession.CreatedAt
293
294
if err := db.ValidateStudySession(updatedStudySession); err != nil {
295
+
l.Error("invalid study session", "err", err)
296
switch {
297
case errors.Is(err, db.ErrSessionDescriptionTooLong):
298
htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.")
···
361
SwapRecord: cid,
362
})
363
if err != nil {
364
+
l.Error("failed to update study session record", "err", err)
365
htmx.HxError(w, http.StatusInternalServerError, "Failed to update study session, try again later.")
366
return
367
}
368
369
err = SavePendingUpdate(h, w, r, PendingStudySessionUpdates, updatedStudySession)
370
if err != nil {
371
+
l.Error("failed to save yoten-session to add pending study session updates", "err", err)
372
}
373
374
if !h.Config.Core.Dev {
···
380
Set("rkey", rkey),
381
})
382
if err != nil {
383
+
l.Error("failed to enqueue posthog event", "err", err)
384
}
385
}
386
···
389
}
390
391
func (h *Handler) HandleNewStudySessionPage(w http.ResponseWriter, r *http.Request) {
392
+
l := h.Logger.With("handler", "HandleNewStudySessionPage")
393
+
394
user, err := bsky.GetUserWithBskyProfile(h.Oauth, r)
395
if err != nil {
396
+
l.Error("failed to get logged-in user", "err", err)
397
htmx.HxRedirect(w, "/login")
398
return
399
}
400
401
client, err := h.Oauth.AuthorizedClient(r)
402
if err != nil {
403
+
l.Error("failed to get authorized client", "err", err)
404
htmx.HxRedirect(w, "/login")
405
return
406
}
···
409
case http.MethodGet:
410
profile, err := db.GetProfile(h.Db, user.Did)
411
if err != nil {
412
+
l.Error("failed to find user in db", "did", user.Did, "err", err)
413
htmx.HxError(w, http.StatusNotFound, "Failed to find user.")
414
return
415
}
416
417
userDefinedActivities, err := db.GetActivitiesByDid(h.Db, user.Did)
418
if err != nil {
419
+
l.Error("failed to get user-defined activities", "err", err)
420
}
421
preDefinedActivities, err := db.GetPredefinedActivities(h.Db)
422
if err != nil {
423
+
l.Error("failed to get pre-defined activities", "err", err)
424
}
425
activeActivities := utils.Filter(userDefinedActivities, func(activity db.Activity) bool {
426
return activity.Status != db.Deleted
···
429
430
resources, err := db.GetResourcesByDid(h.Db, user.Did)
431
if err != nil {
432
+
l.Error("failed to get user-defined resources", "err", err)
433
}
434
activeResources := utils.Filter(resources, func(resource db.Resource) bool {
435
return resource.Status != db.Deleted
···
445
case http.MethodPost:
446
newStudySession, err := h.parseStudySessionForm(r)
447
if err != nil {
448
+
l.Error("invalid study session form", "err", err)
449
htmx.HxError(w, http.StatusBadRequest, "Failed to update study session, ensure all data is valid.")
450
return
451
}
···
464
}
465
466
if err := db.ValidateStudySession(newStudySession); err != nil {
467
+
l.Error("invalid study session", "err", err)
468
switch {
469
case errors.Is(err, db.ErrSessionDescriptionTooLong):
470
htmx.HxError(w, http.StatusBadRequest, "Study session description cannot be more than 256 characters.")
···
526
},
527
})
528
if err != nil {
529
+
l.Error("failed to create study session record", "err", err)
530
htmx.HxError(w, http.StatusInternalServerError, "Failed to create study session, try again later.")
531
return
532
}
533
534
err = SavePendingCreate(h, w, r, PendingStudySessionCreation, newStudySession)
535
if err != nil {
536
+
l.Error("failed to save yoten-session to add pending study session creation", "err", err)
537
}
538
539
if !h.Config.Core.Dev {
···
550
Set("date_is_today", newStudySession.Date.Truncate(24*time.Hour).Equal(time.Now().UTC().In(loc).Truncate(24*time.Hour))),
551
})
552
if err != nil {
553
+
l.Error("failed to enqueue posthog event", "err", err)
554
}
555
}
556
···
559
}
560
561
func (h *Handler) HandleDeleteStudySession(w http.ResponseWriter, r *http.Request) {
562
+
l := h.Logger.With("handler", "HandleDeleteStudySession")
563
+
564
user := h.Oauth.GetUser(r)
565
if user == nil {
566
+
l.Error("failed to get logged-in user")
567
htmx.HxRedirect(w, "/login")
568
return
569
}
570
571
client, err := h.Oauth.AuthorizedClient(r)
572
if err != nil {
573
+
l.Error("failed to get authorized client", "err", err)
574
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.")
575
return
576
}
···
579
case http.MethodDelete:
580
err := r.ParseForm()
581
if err != nil {
582
+
l.Error("failed to parse study session delete form", "err", err)
583
htmx.HxError(w, http.StatusBadRequest, "Failed to delete study session, try again later.")
584
return
585
}
···
587
rkey := chi.URLParam(r, "rkey")
588
studySession, err := db.GetStudySessionByRkey(h.Db, user.Did, rkey)
589
if err != nil {
590
+
l.Error("failed to get study session from db", "err", err)
591
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.")
592
return
593
}
594
595
if user.Did != studySession.Did {
596
+
l.Error("user does not own record", "did", user.Did, "sessionDid", studySession.Did)
597
htmx.HxError(w, http.StatusUnauthorized, "Failed to delete study session, try again later.")
598
return
599
}
···
604
Rkey: rkey,
605
})
606
if err != nil {
607
+
l.Error("failed to delete study session from PDS", "err", err)
608
htmx.HxError(w, http.StatusInternalServerError, "Failed to delete study session, try again later.")
609
return
610
}
611
612
err = SavePendingDelete(h, w, r, PendingStudySessionDeletion, studySession)
613
if err != nil {
614
+
l.Error("failed to save yoten-session to add pending study session deletion", "err", err)
615
}
616
617
if !h.Config.Core.Dev {
···
624
Set("session_age_seconds", time.Since(studySession.CreatedAt).Seconds()),
625
})
626
if err != nil {
627
+
l.Error("failed to enqueue posthog event", "err", err)
628
}
629
}
630
···
651
}
652
653
func (h *Handler) HandleStudySessionPage(w http.ResponseWriter, r *http.Request) {
654
+
l := h.Logger.With("handler", "HandleStudySessionPage")
655
+
656
user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r)
657
didOrHandle := chi.URLParam(r, "user")
658
if didOrHandle == "" {
···
670
671
studySession, err := db.GetStudySessionByRkey(h.Db, ident.DID.String(), rkey)
672
if err != nil {
673
+
l.Error("failed to retrieve study session", "err", err)
674
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve study session, try again later.")
675
return
676
}
677
678
bskyProfile, err := bsky.GetBskyProfile(ident.DID.String())
679
if err != nil {
680
+
l.Error("failed to retrieve bsky profile for study session", "err", err)
681
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve bsky profile, try again later.")
682
return
683
}
684
685
profile, err := db.GetProfile(h.Db, ident.DID.String())
686
if err != nil {
687
+
l.Error("failed to retrieve profile for study session", "err", err)
688
htmx.HxError(w, http.StatusInternalServerError, "Failed to retrieve profile, try again later.")
689
return
690
}
···
707
}
708
709
func (h *Handler) HandleStudySessionPageCommentFeed(w http.ResponseWriter, r *http.Request) {
710
+
l := h.Logger.With("handler", "HandleStudySessionPageCommentFeed")
711
+
712
user, _ := bsky.GetUserWithBskyProfile(h.Oauth, r)
713
714
didOrHandle := chi.URLParam(r, "user")
···
732
}
733
page, err := strconv.ParseInt(pageStr, 10, 64)
734
if err != nil {
735
+
l.Error("failed to parse page value", "err", err)
736
page = 1
737
}
738
if page == 0 {
···
744
745
commentFeed, err := db.GetCommentsForSession(h.Db, studySessionUri.String(), pageSize+1, int(offset))
746
if err != nil {
747
+
l.Error("failed to get comment feed", "err", err)
748
htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.")
749
return
750
}
···
780
781
populatedCommentFeed, err := h.BuildCommentFeed(finalFeed)
782
if err != nil {
783
+
l.Error("failed to populate comment feed", "err", err)
784
htmx.HxError(w, http.StatusInternalServerError, "Failed to get comment feed, try again later.")
785
return
786
}
History
1 round
0 comments
brookjeynes.dev
submitted
#0
1 commit
expand
collapse
feat(handlers/study-session): use slogger
Signed-off-by: brookjeynes <me@brookjeynes.dev>
expand 0 comments
pull request successfully merged