generated from NdoleStudio/go-http-client
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add implementation for heartbeat and message thread API's
- Loading branch information
1 parent
0f0403a
commit 5f05f17
Showing
16 changed files
with
324 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package httpsms | ||
|
||
type ApiResponse[T any] struct { | ||
Data T `json:"data"` | ||
Message string `json:"message"` | ||
Status string `json:"status"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package httpsms | ||
|
||
import ( | ||
"time" | ||
|
||
"github.com/google/uuid" | ||
) | ||
|
||
// Heartbeat represents is a pulse from an active phone | ||
type Heartbeat struct { | ||
ID uuid.UUID `json:"id" example:"32343a19-da5e-4b1b-a767-3298a73703cb"` | ||
Owner string `json:"owner" gorm:"index:idx_heartbeats_owner_timestamp" example:"+18005550199"` | ||
UserID string `json:"user_id" example:"WB7DRDWrJZRGbYrv2CKGkqbzvqdC"` | ||
Timestamp time.Time `json:"timestamp" example:"2022-06-05T14:26:01.520828+03:00"` | ||
} | ||
|
||
// HeartbeatIndexParams is the payload for fetching entities.Heartbeat of a phone number | ||
type HeartbeatIndexParams struct { | ||
Skip int `json:"skip"` | ||
Owner string `json:"owner"` | ||
Query *string `json:"query"` | ||
Limit int `json:"limit"` | ||
} | ||
|
||
// HeartbeatsResponse is the response gotten with a message content | ||
type HeartbeatsResponse ApiResponse[[]Heartbeat] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package httpsms | ||
|
||
import ( | ||
"context" | ||
"encoding/json" | ||
"net/http" | ||
"strconv" | ||
) | ||
|
||
// HeartbeatService is the API client for the `/heartbeats` endpoint | ||
type HeartbeatService service | ||
|
||
// Index returns a list of heartbeats from an android phone. It will be sorted by timestamp in descending order. | ||
// | ||
// API Docs: https://api.httpsms.com/index.html#/Heartbeats/get_heartbeats | ||
func (service *HeartbeatService) Index(ctx context.Context, params *HeartbeatIndexParams) (*HeartbeatsResponse, *Response, error) { | ||
request, err := service.client.newRequest(ctx, http.MethodGet, "/v1/heartbeats", nil) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
q := request.URL.Query() | ||
q.Add("skip", strconv.Itoa(params.Skip)) | ||
q.Add("owner", params.Owner) | ||
q.Add("limit", strconv.Itoa(params.Limit)) | ||
|
||
if params.Query != nil { | ||
q.Add("query", *params.Query) | ||
} | ||
|
||
request.URL.RawQuery = q.Encode() | ||
|
||
response, err := service.client.do(request) | ||
if err != nil { | ||
return nil, response, err | ||
} | ||
|
||
heartbeats := new(HeartbeatsResponse) | ||
if err = json.Unmarshal(*response.Body, heartbeats); err != nil { | ||
return nil, response, err | ||
} | ||
|
||
return heartbeats, response, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package httpsms | ||
|
||
import ( | ||
"time" | ||
|
||
"github.com/google/uuid" | ||
) | ||
|
||
// MessageSendParams is the request payload for sending a message | ||
type MessageSendParams struct { | ||
Content string `json:"content"` | ||
From string `json:"from"` | ||
RequestID string `json:"request_id,omitempty"` | ||
To string `json:"to"` | ||
} | ||
|
||
// MessageIndexParams is the payload fetching entities.Message sent between 2 numbers | ||
type MessageIndexParams struct { | ||
Skip int `json:"skip"` | ||
Contact string `json:"contact"` | ||
Owner string `json:"owner"` | ||
Query *string `json:"query"` | ||
Limit int `json:"limit"` | ||
} | ||
|
||
// MessageResponse is the response gotten with a message content | ||
type MessageResponse ApiResponse[Message] | ||
|
||
// MessagesResponse is the response with multiple messages | ||
type MessagesResponse ApiResponse[[]Message] | ||
|
||
// Message represents and incoming or outgoing SMS message | ||
type Message struct { | ||
ID uuid.UUID `json:"id" example:"32343a19-da5e-4b1b-a767-3298a73703cb"` | ||
RequestID *string `json:"request_id" example:"153554b5-ae44-44a0-8f4f-7bbac5657ad4"` | ||
Owner string `json:"owner" example:"+18005550199"` | ||
UserID string `json:"user_id" example:"WB7DRDWrJZRGbYrv2CKGkqbzvqdC"` | ||
Contact string `json:"contact" example:"+18005550100"` | ||
Content string `json:"content" example:"This is a sample text message"` | ||
Type string `json:"type" example:"mobile-terminated"` | ||
Status string `json:"status" example:"pending"` | ||
// SIM is the SIM card to use to send the message | ||
// * SMS1: use the SIM card in slot 1 | ||
// * SMS2: use the SIM card in slot 2 | ||
SIM string `json:"sim" example:"SIM1"` | ||
|
||
// SendDuration is the number of nanoseconds from when the request was received until when the mobile phone send the message | ||
SendDuration *int64 `json:"send_time" example:"133414"` | ||
|
||
RequestReceivedAt time.Time `json:"request_received_at" example:"2022-06-05T14:26:01.520828+03:00"` | ||
CreatedAt time.Time `json:"created_at" example:"2022-06-05T14:26:02.302718+03:00"` | ||
UpdatedAt time.Time `json:"updated_at" example:"2022-06-05T14:26:10.303278+03:00"` | ||
OrderTimestamp time.Time `json:"order_timestamp" gorm:"index:idx_messages_order_timestamp" example:"2022-06-05T14:26:09.527976+03:00"` | ||
LastAttemptedAt *time.Time `json:"last_attempted_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
NotificationScheduledAt *time.Time `json:"scheduled_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
SentAt *time.Time `json:"sent_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
DeliveredAt *time.Time `json:"delivered_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
ExpiredAt *time.Time `json:"expired_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
FailedAt *time.Time `json:"failed_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
CanBePolled bool `json:"can_be_polled" example:"false"` | ||
SendAttemptCount uint `json:"send_attempt_count" example:"0"` | ||
MaxSendAttempts uint `json:"max_send_attempts" example:"1"` | ||
ReceivedAt *time.Time `json:"received_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
FailureReason *string `json:"failure_reason" example:"UNKNOWN"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package httpsms | ||
|
||
import ( | ||
"context" | ||
"encoding/json" | ||
"net/http" | ||
"strconv" | ||
) | ||
|
||
// MessageService is the API client for the `/` endpoint | ||
type MessageService service | ||
|
||
// Send adds a new SMS message to be sent by the android phone | ||
// | ||
// API Docs: https://api.httpsms.com/index.html#/Messages/post_messages_send | ||
func (service *MessageService) Send(ctx context.Context, params *MessageSendParams) (*MessageResponse, *Response, error) { | ||
request, err := service.client.newRequest(ctx, http.MethodPost, "/v1/messages/send", params) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
response, err := service.client.do(request) | ||
if err != nil { | ||
return nil, response, err | ||
} | ||
|
||
message := new(MessageResponse) | ||
if err = json.Unmarshal(*response.Body, message); err != nil { | ||
return nil, response, err | ||
} | ||
|
||
return message, response, nil | ||
} | ||
|
||
// Index returns a list of messages which are sent between 2 phone numbers. It will be sorted by timestamp in descending order. | ||
// | ||
// API Docs: https://api.httpsms.com/index.html#/Messages/get_messages | ||
func (service *MessageService) Index(ctx context.Context, params *MessageIndexParams) (*MessagesResponse, *Response, error) { | ||
request, err := service.client.newRequest(ctx, http.MethodGet, "/v1/messages", nil) | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
|
||
q := request.URL.Query() | ||
q.Add("skip", strconv.Itoa(params.Skip)) | ||
q.Add("owner", params.Owner) | ||
q.Add("contact", params.Contact) | ||
q.Add("limit", strconv.Itoa(params.Limit)) | ||
|
||
if params.Query != nil { | ||
q.Add("query", *params.Query) | ||
} | ||
|
||
request.URL.RawQuery = q.Encode() | ||
|
||
response, err := service.client.do(request) | ||
if err != nil { | ||
return nil, response, err | ||
} | ||
|
||
messages := new(MessagesResponse) | ||
if err = json.Unmarshal(*response.Body, messages); err != nil { | ||
return nil, response, err | ||
} | ||
|
||
return messages, response, nil | ||
} |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package httpsms | ||
|
||
import ( | ||
"time" | ||
|
||
"github.com/google/uuid" | ||
) | ||
|
||
// MessageThreadIndexParams is the payload fetching entities.MessageThread sent between 2 numbers | ||
type MessageThreadIndexParams struct { | ||
IsArchived bool `json:"is_archived"` | ||
Skip int `json:"skip"` | ||
Query *string `json:"query"` | ||
Limit int `json:"limit"` | ||
Owner string `json:"owner"` | ||
} | ||
|
||
// MessageThread represents a message thread between 2 phone numbers | ||
type MessageThread struct { | ||
ID uuid.UUID `json:"id" example:"32343a19-da5e-4b1b-a767-3298a73703ca"` | ||
Owner string `json:"owner" example:"+18005550199"` | ||
Contact string `json:"contact" example:"+18005550100"` | ||
IsArchived bool `json:"is_archived" example:"false"` | ||
UserID string `json:"user_id" example:"WB7DRDWrJZRGbYrv2CKGkqbzvqdC"` | ||
Color string `json:"color" example:"indigo"` | ||
LastMessageContent string `json:"last_message_content" example:"This is a sample message content"` | ||
LastMessageID uuid.UUID `json:"last_message_id" example:"32343a19-da5e-4b1b-a767-3298a73703ca"` | ||
CreatedAt time.Time `json:"created_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
UpdatedAt time.Time `json:"updated_at" example:"2022-06-05T14:26:09.527976+03:00"` | ||
OrderTimestamp time.Time `json:"order_timestamp" example:"2022-06-05T14:26:09.527976+03:00"` | ||
} | ||
|
||
// MessageThreadsResponse is the response gotten with a message content | ||
type MessageThreadsResponse ApiResponse[[]MessageThread] |
Oops, something went wrong.