writekit/internal/tenant/comments.go
2026-01-09 00:16:46 +02:00

70 lines
1.8 KiB
Go

package tenant
import (
"context"
"database/sql"
)
func (q *Queries) ListComments(ctx context.Context, postSlug string) ([]Comment, error) {
rows, err := q.db.QueryContext(ctx, `SELECT id, user_id, post_slug, content, content_html, parent_id, created_at, updated_at
FROM comments WHERE post_slug = ? ORDER BY created_at ASC`, postSlug)
if err != nil {
return nil, err
}
defer rows.Close()
var comments []Comment
for rows.Next() {
c, err := scanComment(rows)
if err != nil {
return nil, err
}
comments = append(comments, c)
}
return comments, rows.Err()
}
func (q *Queries) GetComment(ctx context.Context, id int64) (*Comment, error) {
row := q.db.QueryRowContext(ctx, `SELECT id, user_id, post_slug, content, content_html, parent_id, created_at, updated_at
FROM comments WHERE id = ?`, id)
c, err := scanComment(row)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return &c, nil
}
func (q *Queries) CreateComment(ctx context.Context, c *Comment) error {
result, err := q.db.ExecContext(ctx, `INSERT INTO comments (user_id, post_slug, content, content_html, parent_id)
VALUES (?, ?, ?, ?, ?)`,
c.UserID, c.PostSlug, c.Content, nullStr(c.ContentHTML), c.ParentID)
if err != nil {
return err
}
c.ID, _ = result.LastInsertId()
return nil
}
func (q *Queries) DeleteComment(ctx context.Context, id int64) error {
_, err := q.db.ExecContext(ctx, `DELETE FROM comments WHERE id = ?`, id)
return err
}
func scanComment(s scanner) (Comment, error) {
var c Comment
var contentHTML, createdAt, updatedAt sql.NullString
err := s.Scan(&c.ID, &c.UserID, &c.PostSlug, &c.Content, &contentHTML, &c.ParentID, &createdAt, &updatedAt)
if err != nil {
return c, err
}
c.ContentHTML = contentHTML.String
c.CreatedAt = parseTime(createdAt.String)
c.UpdatedAt = parseTime(updatedAt.String)
return c, nil
}