Y艒ten: A social tracker for your language learning journey built on the atproto.

feat(handlers/resource): use slogger #9

merged opened by brookjeynes.dev targeting master from push-trrpxxyxxmot
Labels

None yet.

Participants 1
AT URI
at://did:plc:4mj54vc4ha3lh32ksxwunnbh/sh.tangled.repo.pull/3m3bmdlgblk22
+31 -26
Diff #0
+31 -26
internal/server/handlers/resource.go
··· 3 import ( 4 "errors" 5 "fmt" 6 - "log" 7 "net/http" 8 "time" 9 ··· 63 } 64 65 func (h *Handler) HandleNewResourcePage(w http.ResponseWriter, r *http.Request) { 66 user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) 67 if err != nil { 68 - log.Println("failed to get logged-in user:", err) 69 htmx.HxRedirect(w, "/login") 70 return 71 } ··· 79 case http.MethodPost: 80 client, err := h.Oauth.AuthorizedClient(r) 81 if err != nil { 82 - log.Println("failed to get authorized client:", err) 83 htmx.HxRedirect(w, "/login") 84 return 85 } 86 87 newResource, err := parseResourceForm(r) 88 if err != nil { 89 - log.Println("invalid resource form:", err) 90 htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.") 91 return 92 } ··· 95 newResource.CreatedAt = time.Now().UTC() 96 97 if err := db.ValidateResource(newResource); err != nil { 98 - log.Println("invalid resource definition:", err) 99 switch { 100 case errors.Is(err, db.ErrResourceTitleEmpty): 101 htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.") ··· 118 if newResource.Link != nil { 119 linkCheckResult := google.CheckResourceLinkSafety(*newResource.Link) 120 if linkCheckResult.Err != nil { 121 - log.Println("invalid resource definition:", linkCheckResult.Err) 122 switch { 123 case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy): 124 if !h.Config.Core.Dev { ··· 186 }, 187 }) 188 if err != nil { 189 - log.Println("failed to create resource record:", err) 190 htmx.HxError(w, http.StatusInternalServerError, "Failed to create resource, try again later.") 191 return 192 } 193 194 err = SavePendingCreate(h, w, r, PendingResourceCreation, newResource) 195 if err != nil { 196 - log.Printf("failed to save yoten-session to add pending resource creation: %v", err) 197 } 198 199 if !h.Config.Core.Dev { ··· 209 Set("link_provided", newResource.Link != nil), 210 }) 211 if err != nil { 212 - log.Println("failed to enqueue posthog event:", err) 213 } 214 } 215 ··· 218 } 219 220 func (h *Handler) HandleDeleteResource(w http.ResponseWriter, r *http.Request) { 221 user := h.Oauth.GetUser(r) 222 if user == nil { 223 - log.Println("failed to get logged-in user") 224 htmx.HxRedirect(w, "/login") 225 return 226 } 227 client, err := h.Oauth.AuthorizedClient(r) 228 if err != nil { 229 - log.Println("failed to get authorized client:", err) 230 htmx.HxError(w, http.StatusUnauthorized, "Failed to delete resource, try again later.") 231 return 232 } ··· 236 rkey := chi.URLParam(r, "rkey") 237 resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey) 238 if err != nil { 239 - log.Println("failed to get resource from db:", err) 240 htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.") 241 return 242 } 243 244 if user.Did != resource.Did { 245 - log.Printf("user '%s' does not own record '%s'", user.Did, rkey) 246 htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to delete this resource.") 247 return 248 } ··· 253 Rkey: resource.Rkey, 254 }) 255 if err != nil { 256 - log.Println("failed to delete resource from PDS:", err) 257 htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.") 258 return 259 } 260 261 err = SavePendingDelete(h, w, r, PendingResourceDeletion, resource) 262 if err != nil { 263 - log.Printf("failed to save yoten-session to add pending resource deletion: %v", err) 264 } 265 266 if !h.Config.Core.Dev { ··· 272 Set("resource_type", resource.Type), 273 }) 274 if err != nil { 275 - log.Println("failed to enqueue posthog event:", err) 276 } 277 } 278 ··· 281 } 282 283 func (h *Handler) HandleEditResourcePage(w http.ResponseWriter, r *http.Request) { 284 user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) 285 if err != nil { 286 - log.Println("failed to get logged-in user:", err) 287 htmx.HxRedirect(w, "/login") 288 return 289 } ··· 291 rkey := chi.URLParam(r, "rkey") 292 resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey) 293 if err != nil { 294 - log.Println("failed to get resource from db:", err) 295 htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.") 296 return 297 } 298 299 if user.Did != resource.Did { 300 - log.Printf("user '%s' does not own record '%s'", user.Did, rkey) 301 htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this resource.") 302 return 303 } ··· 312 case http.MethodPost: 313 client, err := h.Oauth.AuthorizedClient(r) 314 if err != nil { 315 - log.Println("failed to get authorized client:", err) 316 htmx.HxRedirect(w, "/login") 317 return 318 } 319 320 updatedResource, err := parseResourceForm(r) 321 if err != nil { 322 - log.Println("invalid resource form:", err) 323 htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.") 324 return 325 } ··· 328 updatedResource.CreatedAt = resource.CreatedAt 329 330 if err := db.ValidateResource(updatedResource); err != nil { 331 - log.Println("invalid resource definition:", err) 332 switch { 333 case errors.Is(err, db.ErrResourceTitleEmpty): 334 htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.") ··· 352 if updatedResource.Link != nil && (resource.Link == nil || *updatedResource.Link != *resource.Link) { 353 linkCheckResult := google.CheckResourceLinkSafety(*updatedResource.Link) 354 if linkCheckResult.Err != nil { 355 - log.Println("invalid resource definition:", linkCheckResult.Err) 356 switch { 357 case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy): 358 if !h.Config.Core.Dev { ··· 427 SwapRecord: cid, 428 }) 429 if err != nil { 430 - log.Println("failed to update resource record:", err) 431 htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.") 432 return 433 } 434 435 err = SavePendingUpdate(h, w, r, PendingResourceUpdates, updatedResource) 436 if err != nil { 437 - log.Printf("failed to save yoten-session to add pending resource updates: %v", err) 438 } 439 440 if !h.Config.Core.Dev { ··· 450 Set("link_provided", updatedResource.Link != nil), 451 }) 452 if err != nil { 453 - log.Println("failed to enqueue posthog event:", err) 454 } 455 } 456
··· 3 import ( 4 "errors" 5 "fmt" 6 "net/http" 7 "time" 8 ··· 62 } 63 64 func (h *Handler) HandleNewResourcePage(w http.ResponseWriter, r *http.Request) { 65 + l := h.Logger.With("handler", "HandleNewResourcePage") 66 + 67 user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) 68 if err != nil { 69 + l.Error("failed to get logged-in user", "err", err) 70 htmx.HxRedirect(w, "/login") 71 return 72 } ··· 80 case http.MethodPost: 81 client, err := h.Oauth.AuthorizedClient(r) 82 if err != nil { 83 + l.Error("failed to get authorized client", "err", err) 84 htmx.HxRedirect(w, "/login") 85 return 86 } 87 88 newResource, err := parseResourceForm(r) 89 if err != nil { 90 + l.Error("invalid resource form", "err", err) 91 htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.") 92 return 93 } ··· 96 newResource.CreatedAt = time.Now().UTC() 97 98 if err := db.ValidateResource(newResource); err != nil { 99 + l.Error("invalid resource definition", "err", err) 100 switch { 101 case errors.Is(err, db.ErrResourceTitleEmpty): 102 htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.") ··· 119 if newResource.Link != nil { 120 linkCheckResult := google.CheckResourceLinkSafety(*newResource.Link) 121 if linkCheckResult.Err != nil { 122 + l.Error("invalid resource definition", "err", linkCheckResult.Err) 123 switch { 124 case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy): 125 if !h.Config.Core.Dev { ··· 187 }, 188 }) 189 if err != nil { 190 + l.Error("failed to create resource record", "err", err) 191 htmx.HxError(w, http.StatusInternalServerError, "Failed to create resource, try again later.") 192 return 193 } 194 195 err = SavePendingCreate(h, w, r, PendingResourceCreation, newResource) 196 if err != nil { 197 + l.Error("failed to save yoten-session to add pending resource creation", "err", err) 198 } 199 200 if !h.Config.Core.Dev { ··· 210 Set("link_provided", newResource.Link != nil), 211 }) 212 if err != nil { 213 + l.Error("failed to enqueue posthog event", "err", err) 214 } 215 } 216 ··· 219 } 220 221 func (h *Handler) HandleDeleteResource(w http.ResponseWriter, r *http.Request) { 222 + l := h.Logger.With("handler", "HandleDeleteResource") 223 + 224 user := h.Oauth.GetUser(r) 225 if user == nil { 226 + l.Error("failed to get logged-in user") 227 htmx.HxRedirect(w, "/login") 228 return 229 } 230 client, err := h.Oauth.AuthorizedClient(r) 231 if err != nil { 232 + l.Error("failed to get authorized client", "err", err) 233 htmx.HxError(w, http.StatusUnauthorized, "Failed to delete resource, try again later.") 234 return 235 } ··· 239 rkey := chi.URLParam(r, "rkey") 240 resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey) 241 if err != nil { 242 + l.Error("failed to get resource from db", "err", err) 243 htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.") 244 return 245 } 246 247 if user.Did != resource.Did { 248 + l.Error("user does not own record", "did", user.Did, "resourceDid", resource.Did) 249 htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to delete this resource.") 250 return 251 } ··· 256 Rkey: resource.Rkey, 257 }) 258 if err != nil { 259 + l.Error("failed to delete resource from PDS", "err", err) 260 htmx.HxError(w, http.StatusInternalServerError, "Failed to delete resource, try again later.") 261 return 262 } 263 264 err = SavePendingDelete(h, w, r, PendingResourceDeletion, resource) 265 if err != nil { 266 + l.Error("failed to save yoten-session to add pending resource deletion", "err", err) 267 } 268 269 if !h.Config.Core.Dev { ··· 275 Set("resource_type", resource.Type), 276 }) 277 if err != nil { 278 + l.Error("failed to enqueue posthog event", "err", err) 279 } 280 } 281 ··· 284 } 285 286 func (h *Handler) HandleEditResourcePage(w http.ResponseWriter, r *http.Request) { 287 + l := h.Logger.With("handler", "HandleEditResourcePage") 288 + 289 user, err := bsky.GetUserWithBskyProfile(h.Oauth, r) 290 if err != nil { 291 + l.Error("failed to get logged-in user", "err", err) 292 htmx.HxRedirect(w, "/login") 293 return 294 } ··· 296 rkey := chi.URLParam(r, "rkey") 297 resource, err := db.GetResourceByRkey(h.Db, user.Did, rkey) 298 if err != nil { 299 + l.Error("failed to get resource from db", "err", err) 300 htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.") 301 return 302 } 303 304 if user.Did != resource.Did { 305 + l.Error("user does not own record", "did", user.Did, "resourceDid", resource.Did) 306 htmx.HxError(w, http.StatusUnauthorized, "You do not have permissions to edit this resource.") 307 return 308 } ··· 317 case http.MethodPost: 318 client, err := h.Oauth.AuthorizedClient(r) 319 if err != nil { 320 + l.Error("failed to get authorized client", "err", err) 321 htmx.HxRedirect(w, "/login") 322 return 323 } 324 325 updatedResource, err := parseResourceForm(r) 326 if err != nil { 327 + l.Error("invalid resource form", "err", err) 328 htmx.HxError(w, http.StatusBadRequest, "Failed to create resource, ensure all fields contain valid data.") 329 return 330 } ··· 333 updatedResource.CreatedAt = resource.CreatedAt 334 335 if err := db.ValidateResource(updatedResource); err != nil { 336 + l.Error("invalid resource definition", "err", err) 337 switch { 338 case errors.Is(err, db.ErrResourceTitleEmpty): 339 htmx.HxError(w, http.StatusBadRequest, "Resource must have a title.") ··· 357 if updatedResource.Link != nil && (resource.Link == nil || *updatedResource.Link != *resource.Link) { 358 linkCheckResult := google.CheckResourceLinkSafety(*updatedResource.Link) 359 if linkCheckResult.Err != nil { 360 + l.Error("invalid resource link", "link", resource.Link, "threatType", linkCheckResult.ThreatType, "err", linkCheckResult.Err) 361 switch { 362 case errors.Is(linkCheckResult.Err, google.ErrResourceLinkSketchy): 363 if !h.Config.Core.Dev { ··· 432 SwapRecord: cid, 433 }) 434 if err != nil { 435 + l.Error("failed to update resource record", "err", err) 436 htmx.HxError(w, http.StatusInternalServerError, "Failed to update resource, try again later.") 437 return 438 } 439 440 err = SavePendingUpdate(h, w, r, PendingResourceUpdates, updatedResource) 441 if err != nil { 442 + l.Error("failed to save yoten-session to add pending resource updates", "err", err) 443 } 444 445 if !h.Config.Core.Dev { ··· 455 Set("link_provided", updatedResource.Link != nil), 456 }) 457 if err != nil { 458 + l.Error("failed to enqueue posthog event", "err", err) 459 } 460 } 461

History

1 round 0 comments
sign up or login to add to the discussion
brookjeynes.dev submitted #0
1 commit
expand
feat(handlers/resource): use slogger
expand 0 comments
pull request successfully merged