feat(seo): add sitemap generator
This commit is contained in:
@@ -379,6 +379,27 @@ func (r *UserRepo) Search(ctx context.Context, q string, limit, offset int) ([]m
|
||||
return out, total, rows.Err()
|
||||
}
|
||||
|
||||
// AllHandles returns every user's handle, for the public-profile sitemap.
|
||||
// Projection-only (handle is unique + indexed), cheap to sweep. Excludes the
|
||||
// reserved "me" handle (the signed-in user's own private library route).
|
||||
func (r *UserRepo) AllHandles(ctx context.Context) ([]string, error) {
|
||||
rows, err := r.pg.Pool.Query(ctx,
|
||||
`SELECT handle FROM users WHERE handle <> '' AND handle::text <> 'me' ORDER BY handle`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list handles: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
handles := []string{}
|
||||
for rows.Next() {
|
||||
var h string
|
||||
if err := rows.Scan(&h); err != nil {
|
||||
return nil, fmt.Errorf("scan handle: %w", err)
|
||||
}
|
||||
handles = append(handles, h)
|
||||
}
|
||||
return handles, rows.Err()
|
||||
}
|
||||
|
||||
// RecentlyJoined returns up to `limit` users who registered on/after `since`,
|
||||
// newest first, as a discovery list for the feed's "new on the platform"
|
||||
// strip. Excludes the viewer, anyone the viewer already has a follow edge with
|
||||
|
||||
Reference in New Issue
Block a user