/
webhook.go
115 lines (107 loc) · 2.83 KB
/
webhook.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package repository
import (
"github.com/allisson/postmand"
"github.com/huandu/go-sqlbuilder"
"github.com/jmoiron/sqlx"
)
// Webhook implements postmand.WebhookRepository interface.
type Webhook struct {
db *sqlx.DB
}
// Get returns postmand.Webhook by options filter.
func (w Webhook) Get(getOptions *postmand.RepositoryGetOptions) (*postmand.Webhook, error) {
webhook := postmand.Webhook{}
sb := sqlbuilder.PostgreSQL.NewSelectBuilder()
sb.Select("*").From("webhooks")
for key, value := range getOptions.Filters {
sb.Where(sb.Equal(key, value))
}
sql, args := sb.Build()
err := w.db.Get(&webhook, sql, args...)
return &webhook, err
}
// List returns a slice of postmand.Webhook by options filter.
func (w Webhook) List(listOptions *postmand.RepositoryListOptions) ([]*postmand.Webhook, error) {
webhooks := []*postmand.Webhook{}
sb := sqlbuilder.PostgreSQL.NewSelectBuilder()
sb.Select("*").From("webhooks").Limit(listOptions.Limit).Offset(listOptions.Offset)
for key, value := range listOptions.Filters {
sb.Where(sb.Equal(key, value))
}
if listOptions.OrderBy != "" {
sb.OrderBy(listOptions.OrderBy)
}
sql, args := sb.Build()
err := w.db.Select(&webhooks, sql, args...)
return webhooks, err
}
// Create postmand.Webhook on database.
func (w Webhook) Create(webhook *postmand.Webhook) error {
sqlStatement := `
INSERT INTO webhooks (
"id",
"name",
"url",
"content_type",
"valid_status_codes",
"secret_token",
"active",
"max_delivery_attempts",
"delivery_attempt_timeout",
"retry_min_backoff",
"retry_max_backoff",
"created_at",
"updated_at"
)
VALUES (
:id,
:name,
:url,
:content_type,
:valid_status_codes,
:secret_token,
:active,
:max_delivery_attempts,
:delivery_attempt_timeout,
:retry_min_backoff,
:retry_max_backoff,
:created_at,
:updated_at
)
`
_, err := w.db.NamedExec(sqlStatement, webhook)
return err
}
// Update postmand.Webhook on database.
func (w Webhook) Update(webhook *postmand.Webhook) error {
sqlStatement := `
UPDATE webhooks
SET name = :name,
url = :url,
content_type = :content_type,
valid_status_codes = :valid_status_codes,
secret_token = :secret_token,
active = :active,
max_delivery_attempts = :max_delivery_attempts,
delivery_attempt_timeout = :delivery_attempt_timeout,
retry_min_backoff = :retry_min_backoff,
retry_max_backoff = :retry_max_backoff,
created_at = :created_at,
updated_at = :updated_at
WHERE id = :id
`
_, err := w.db.NamedExec(sqlStatement, webhook)
return err
}
// Delete postmand.Webhook on database.
func (w Webhook) Delete(id postmand.ID) error {
sqlStatement := `
DELETE FROM webhooks WHERE id = $1
`
_, err := w.db.Exec(sqlStatement, id)
return err
}
// NewWebhook returns postmand.Webhook with db connection.
func NewWebhook(db *sqlx.DB) *Webhook {
return &Webhook{db: db}
}