···33import (
44 "careme/internal/cache"
55 "careme/internal/users"
66+ utypes "careme/internal/users/types"
67 "context"
78 "flag"
89 "log"
···2829 }
2930 log.Printf("found %d users", len(userList))
3031 log.Printf("looking for user with email containing \"%s\"", userEmail)
3131- var old users.User
3232- var new []users.User
3232+ var old utypes.User
3333+ var new []utypes.User
3334 for _, u := range userList {
3435 //if !slices.Contains(u.Email, userEmail) {
3536 // continue
···1010 "careme/internal/seasons"
1111 "careme/internal/templates"
1212 "careme/internal/users"
1313+ utypes "careme/internal/users/types"
1314 "context"
1415 "encoding/json"
1516 "errors"
···127128 http.Error(w, "recipe not found or expired", http.StatusNotFound)
128129 return
129130 }
130130- clerkUserID, err := s.clerk.GetUserIDFromRequest(r)
131131+132132+ currentUser, err := s.storage.FromRequest(ctx, r, s.clerk) // just for logging purposes in kickgeneration. We could do this in the generateion function instead to avoid the extra call on every not found.
131133 if err != nil {
132134 if !errors.Is(err, auth.ErrNoSession) {
133135 slog.ErrorContext(ctx, "failed to get clerk user ID", "error", err)
···135137 return
136138 }
137139 http.Redirect(w, r, "/", http.StatusSeeOther)
138138- return
139139- }
140140- currentUser, err := s.storage.FindOrCreateFromClerk(ctx, clerkUserID, s.clerk)
141141- if err != nil {
142142- slog.ErrorContext(ctx, "failed to get user by clerk ID", "clerk_user_id", clerkUserID, "error", err)
143143- http.Error(w, "unable to load account", http.StatusInternalServerError)
144140 return
145141 }
146142 s.kickgeneration(ctx, p, currentUser)
···211207212208 hash := p.Hash()
213209214214- clerkUserID, err := s.clerk.GetUserIDFromRequest(r)
210210+ currentUser, err := s.storage.FromRequest(ctx, r, s.clerk) // just for logging purposes in kickgeneration. We could do this in the generateion function instead to avoid the extra call on every not found.
215211 if err != nil {
216212 if !errors.Is(err, auth.ErrNoSession) {
217213 slog.ErrorContext(ctx, "failed to get clerk user ID", "error", err)
···223219 return
224220 }
225221226226- currentUser, err := s.storage.FindOrCreateFromClerk(ctx, clerkUserID, s.clerk)
227227- if err != nil {
228228- slog.ErrorContext(ctx, "failed to get user by clerk ID", "clerk_user_id", clerkUserID, "error", err)
229229- http.Error(w, "unable to load account", http.StatusInternalServerError)
230230- return
231231- }
232232-233222 // Handle finalize - save recipes to user profile and display filtered list
234223 if r.URL.Query().Get("finalize") == "true" {
235224 // Check if user is authenticated
···274263 redirectToHash(w, r, hash, true /*useStart*/)
275264}
276265277277-func (s *server) kickgeneration(ctx context.Context, p *generatorParams, currentUser *users.User) {
266266+func (s *server) kickgeneration(ctx context.Context, p *generatorParams, currentUser *utypes.User) {
278267 for _, last := range currentUser.LastRecipes {
279268 if last.CreatedAt.Before(time.Now().AddDate(0, 0, -14)) {
280269 break
···370359 // Check if recipe already exists in user's last recipes
371360 hash := recipe.ComputeHash()
372361373373- _, exists := lo.Find(currentUser.LastRecipes, func(r users.Recipe) bool {
362362+ _, exists := lo.Find(currentUser.LastRecipes, func(r utypes.Recipe) bool {
374363 return r.Hash == hash
375364 })
376365 if exists {
377366 continue
378367 }
379379- newRecipe := users.Recipe{
368368+ newRecipe := utypes.Recipe{
380369 Title: recipe.Title,
381370 Hash: hash,
382371 CreatedAt: addTime,