-
Notifications
You must be signed in to change notification settings - Fork 3
/
commentrepository.go
72 lines (60 loc) · 1.54 KB
/
commentrepository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package sqlstore
import (
"github.com/zhoreeq/ipfd/internal/app/models"
)
type CommentRepository struct {
store *Store
}
func (r *CommentRepository) Create(m *models.Comment) error {
return r.store.db.QueryRow(
"INSERT INTO comments (address_id, post_id, text) VALUES ($1, $2, $3) RETURNING id",
m.AddressId,
m.PostId,
m.Text,
).Scan(&m.Id)
}
func (r *CommentRepository) GetByPostId(postId string) ([]*models.Comment, error) {
rows, err := r.store.db.Query("SELECT id, text FROM comments WHERE post_id = $1 ORDER BY id asc", postId)
if err != nil {
return nil, err
}
defer rows.Close()
comments := []*models.Comment{}
for rows.Next() {
comment := &models.Comment{}
err := rows.Scan(&comment.Id, &comment.Text)
if err != nil {
return nil, err
}
comments = append(comments, comment)
}
if err := rows.Err(); err != nil {
return nil, err
}
return comments, nil
}
func (r *CommentRepository) GetAll(page, limit int) ([]*models.Comment, error) {
offset := 0
if page > 0 {
offset = page * limit
}
rows, err := r.store.db.Query(`SELECT id, text, post_id, created_at
FROM comments ORDER BY id desc LIMIT $1 OFFSET $2`, limit, offset)
if err != nil {
return nil, err
}
defer rows.Close()
comments := []*models.Comment{}
for rows.Next() {
comment := &models.Comment{}
err := rows.Scan(&comment.Id, &comment.Text, &comment.PostId, &comment.CreatedAt)
if err != nil {
return nil, err
}
comments = append(comments, comment)
}
if err := rows.Err(); err != nil {
return nil, err
}
return comments, nil
}