Skip to content

Commit

Permalink
fix: change request_body and response_body columns to text (#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
vm-001 authored and webhookx-x committed Oct 2, 2024
1 parent 65f5c00 commit 591e48f
Show file tree
Hide file tree
Showing 10 changed files with 57 additions and 59 deletions.
17 changes: 15 additions & 2 deletions admin/api/attempts.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,22 @@ func (api *API) GetAttempt(w http.ResponseWriter, r *http.Request) {
}

if attempt.AttemptedAt != nil {
attemptDetail, err := api.DB.AttemptDetailsWS.Get(r.Context(), attempt.ID)
detail, err := api.DB.AttemptDetailsWS.Get(r.Context(), attempt.ID)
api.assert(err)
attempt.Extend(attemptDetail)
if detail != nil {
if detail.RequestHeaders != nil {
attempt.Request.Headers = detail.RequestHeaders
}
if detail.RequestBody != nil {
attempt.Request.Body = detail.RequestBody
}
if detail.ResponseHeaders != nil {
attempt.Response.Headers = *detail.ResponseHeaders
}
if detail.ResponseBody != nil {
attempt.Response.Body = detail.ResponseBody
}
}
}

api.json(200, w, attempt)
Expand Down
14 changes: 9 additions & 5 deletions db/dao/attempt_detail_dao.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,21 @@ func NewAttemptDetailDao(db *sqlx.DB, workspace bool) AttemptDetailDAO {
}

func (dao *attemptDetailDao) Upsert(ctx context.Context, attemptDetail *entities.AttemptDetail) error {
values := []interface{}{attemptDetail.ID, attemptDetail.RequestHeaders, attemptDetail.RequestBody, attemptDetail.ResponseHeaders, attemptDetail.ResponseBody, time.Now(), attemptDetail.WorkspaceId}
now := time.Now()
values := []interface{}{attemptDetail.ID, attemptDetail.RequestHeaders, attemptDetail.RequestBody, attemptDetail.ResponseHeaders, attemptDetail.ResponseBody, now, now, attemptDetail.WorkspaceId}

sql := `INSERT INTO attempt_details (id, request_headers, request_body, response_headers, response_body, updated_at, ws_id) VALUES ($1, $2, $3, $4, $5, $6, $7)
sql := `INSERT INTO attempt_details (id, request_headers, request_body, response_headers, response_body, created_at, updated_at, ws_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
ON CONFLICT (id) DO UPDATE SET
request_headers = EXCLUDED.request_headers,
request_body = EXCLUDED.request_body,
response_headers = EXCLUDED.response_headers,
response_body = EXCLUDED.response_body,
updated_at = EXCLUDED.updated_at
RETURNING *`
updated_at = EXCLUDED.updated_at`

err := dao.UnsafeDB(ctx).QueryRowxContext(ctx, sql, values...).StructScan(attemptDetail)
result, err := dao.DB(ctx).ExecContext(ctx, sql, values...)
if err != nil {
return err

Check warning on line 35 in db/dao/attempt_detail_dao.go

View check run for this annotation

Codecov / codecov/patch

db/dao/attempt_detail_dao.go#L35

Added line #L35 was not covered by tests
}
_, err = result.RowsAffected()
return err
}
30 changes: 8 additions & 22 deletions db/entities/attempt.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,6 @@ type Attempt struct {
BaseModel
}

func (m *Attempt) Extend(detail *AttemptDetail) {
if detail == nil {
return
}
if m.Request != nil {
m.Request.Headers = detail.RequestHeaders
m.Request.Body = detail.RequestBody
}
if m.Response != nil {
m.Response.Headers = detail.ResponseHeaders
m.Response.Body = detail.ResponseBody
}
}

type AttemptStatus = string

const (
Expand Down Expand Up @@ -67,10 +53,10 @@ const (
)

type AttemptRequest struct {
Method string `json:"method"`
URL string `json:"url"`
Headers map[string]string `json:"headers"`
Body *string `json:"body"`
Method string `json:"method"`
URL string `json:"url"`
Headers Headers `json:"headers"`
Body *string `json:"body"`
}

func (m *AttemptRequest) Scan(src interface{}) error {
Expand All @@ -82,10 +68,10 @@ func (m AttemptRequest) Value() (driver.Value, error) {
}

type AttemptResponse struct {
Status int `json:"status"`
Latency int64 `json:"latency"`
Headers map[string]string `json:"headers"`
Body *string `json:"body"`
Status int `json:"status"`
Latency int64 `json:"latency"`
Headers Headers `json:"headers"`
Body *string `json:"body"`
}

func (m *AttemptResponse) Scan(src interface{}) error {
Expand Down
25 changes: 5 additions & 20 deletions db/entities/attempt_detail.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,11 @@
package entities

import (
"database/sql/driver"
"encoding/json"
)

type AttemptDetail struct {
ID string `json:"id" db:"id"`
RequestHeaders Headers `json:"request_headers" db:"request_headers"`
RequestBody *string `json:"request_body" db:"request_body"`
ResponseHeaders Headers `json:"response_headers" db:"response_headers"`
ResponseBody *string `json:"response_body" db:"response_body"`
ID string `json:"id" db:"id"`
RequestHeaders Headers `json:"request_headers" db:"request_headers"`
RequestBody *string `json:"request_body" db:"request_body"`
ResponseHeaders *Headers `json:"response_headers" db:"response_headers"`
ResponseBody *string `json:"response_body" db:"response_body"`

BaseModel
}

type Headers map[string]string

func (m *Headers) Scan(src interface{}) error {
return json.Unmarshal(src.([]byte), m)
}

func (m Headers) Value() (driver.Value, error) {
return json.Marshal(m)
}
10 changes: 10 additions & 0 deletions db/entities/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,13 @@ type BaseModel struct {
UpdatedAt types.Time `db:"updated_at" json:"updated_at"`
WorkspaceId string `db:"ws_id" json:"-"`
}

type Headers map[string]string

func (m *Headers) Scan(src interface{}) error {
return json.Unmarshal(src.([]byte), m)
}

func (m Headers) Value() (driver.Value, error) {
return json.Marshal(m)
}
2 changes: 2 additions & 0 deletions db/migrations/5_fix_attempt_details.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE IF EXISTS ONLY "attempt_details" ALTER COLUMN request_body TYPE JSONB USING request_body::JSONB;
ALTER TABLE IF EXISTS ONLY "attempt_details" ALTER COLUMN response_body TYPE JSONB USING response_body::JSONB;
2 changes: 2 additions & 0 deletions db/migrations/5_fix_attempt_details.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE IF EXISTS ONLY "attempt_details" ALTER COLUMN request_body TYPE TEXT;
ALTER TABLE IF EXISTS ONLY "attempt_details" ALTER COLUMN response_body TYPE TEXT;
5 changes: 3 additions & 2 deletions test/admin/attempts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,10 @@ var _ = Describe("/attempts", Ordered, func() {
"Content-Type": "application/json",
},
RequestBody: utils.Pointer(`{"key": "value"}`),
ResponseHeaders: map[string]string{
ResponseHeaders: &entities.Headers{
"Content-Type": "application/json",
},
ResponseBody: utils.Pointer("the response body"),
}
entitiesConfig.AttemptDetails = []*entities.AttemptDetail{detail}

Expand All @@ -237,7 +238,7 @@ var _ = Describe("/attempts", Ordered, func() {

assert.EqualValues(GinkgoT(), detail.RequestHeaders, result.Request.Headers)
assert.EqualValues(GinkgoT(), detail.RequestBody, result.Request.Body)
assert.EqualValues(GinkgoT(), detail.ResponseHeaders, result.Response.Headers)
assert.EqualValues(GinkgoT(), detail.ResponseHeaders, &result.Response.Headers)
assert.EqualValues(GinkgoT(), detail.ResponseBody, result.Response.Body)
assert.EqualValues(GinkgoT(), 200, result.Response.Status)
})
Expand Down
9 changes: 2 additions & 7 deletions test/delivery/delivery_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,6 @@ var _ = Describe("delivery", Ordered, func() {
timestamp := attemptDetail.RequestHeaders["Webhookx-Timestamp"]
assert.True(GinkgoT(), utils.Must(strconv.ParseInt(timestamp, 10, 0)) >= attempt.AttemptedAt.Unix())
assert.Equal(GinkgoT(), `{"key": "value"}`, *attemptDetail.RequestBody)

// attemptDetail.response
attempt.Extend(attemptDetail)
assert.NotNil(GinkgoT(), attempt.Response.Headers)
assert.NotNil(GinkgoT(), attempt.Response.Body)
})
})

Expand Down Expand Up @@ -176,8 +171,8 @@ var _ = Describe("delivery", Ordered, func() {

attemptDetail, err := db.AttemptDetails.Get(context.TODO(), e.ID)
assert.NoError(GinkgoT(), err)
e.Extend(attemptDetail)
assert.Nil(GinkgoT(), e.Response)
assert.Nil(GinkgoT(), attemptDetail.ResponseHeaders)
assert.Nil(GinkgoT(), attemptDetail.ResponseBody)
}
})
})
Expand Down
2 changes: 1 addition & 1 deletion worker/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ func (w *Worker) handleTask(ctx context.Context, task *queue.TaskMessage) error
RequestBody: utils.Pointer(string(request.Payload)),
}
if len(response.Header) > 0 {
attemptDetail.ResponseHeaders = utils.HeaderMap(response.Header)
attemptDetail.ResponseHeaders = utils.Pointer(entities.Headers(utils.HeaderMap(response.Header)))
}
if response.ResponseBody != nil {
attemptDetail.ResponseBody = utils.Pointer(string(response.ResponseBody))
Expand Down

0 comments on commit 591e48f

Please sign in to comment.