fix: chat accepts posts
This commit is contained in:
@@ -160,6 +160,46 @@ func (r *PostRepo) FindByID(ctx context.Context, id string) (*model.Post, error)
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// FindByIDs loads many posts at once, keyed by id. Missing and soft-deleted
|
||||
// ids are simply absent from the map.
|
||||
//
|
||||
// Exists so a page of chat messages sharing N posts costs one query instead of
|
||||
// N — the same reason ImagesFor is batched.
|
||||
func (r *PostRepo) FindByIDs(ctx context.Context, ids []string) (map[string]*model.Post, error) {
|
||||
out := make(map[string]*model.Post, len(ids))
|
||||
if len(ids) == 0 {
|
||||
return out, nil
|
||||
}
|
||||
q := `SELECT ` + postSelectColumns + postSelectFrom + `WHERE p.id = ANY($1) AND p.deleted_at IS NULL`
|
||||
rows, err := r.pg.Pool.Query(ctx, q, ids)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("find posts: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
found := make([]string, 0, len(ids))
|
||||
for rows.Next() {
|
||||
p := &model.Post{}
|
||||
if err := scanPost(rows, p); err != nil {
|
||||
return nil, fmt.Errorf("scan post: %w", err)
|
||||
}
|
||||
out[p.ID] = p
|
||||
found = append(found, p.ID)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("find posts: %w", err)
|
||||
}
|
||||
|
||||
imgs, err := r.ImagesFor(ctx, found)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for id, p := range out {
|
||||
p.Images = imgs[id]
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// ListByHandle returns the profile feed for a user. Unknown handle →
|
||||
// empty page (matches pre-existing behaviour).
|
||||
func (r *PostRepo) ListByHandle(ctx context.Context, handle string, limit, offset int) ([]model.Post, int, error) {
|
||||
|
||||
Reference in New Issue
Block a user