1
0
mirror of synced 2024-11-25 14:36:03 +03:00

Merge pull request #36 from gwinn/master

Files & images
This commit is contained in:
Alex Lushpai 2018-11-15 15:35:26 +03:00 committed by GitHub
commit def217cb2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 203 additions and 6 deletions

View File

@ -384,6 +384,81 @@ func (c *MgClient) DeleteMessage(request DeleteData) (MessagesResponse, int, err
return resp, status, err return resp, status, err
} }
// GetFile implement get file url
//
// Example:
//
// var client = v1.New("https://token.url", "cb8ccf05e38a47543ad8477d4999be73bff503ea6")
//
// data, status, err := client.GetFile("file_ID")
//
// if err != nil {
// fmt.Printf("%v", err)
// }
//
// fmt.Printf("%s\n", data.MessageID)
func (c *MgClient) GetFile(request string) (FullFileResponse, int, error) {
var resp FullFileResponse
var b []byte
data, status, err := c.GetRequest(fmt.Sprintf("/files/%s", request), b)
if err != nil {
return resp, status, err
}
if e := json.Unmarshal(data, &resp); e != nil {
return resp, status, e
}
if status != http.StatusOK {
return resp, status, c.Error(data)
}
return resp, status, err
}
// UploadFile upload file
func (c *MgClient) UploadFile(request []byte) (UploadFileResponse, int, error) {
var resp UploadFileResponse
data, status, err := c.PostRequest("/files/upload", request)
if err != nil {
return resp, status, err
}
if e := json.Unmarshal(data, &resp); e != nil {
return resp, status, e
}
if status != http.StatusOK {
return resp, status, c.Error(data)
}
return resp, status, err
}
// UploadFileByURL upload file by url
func (c *MgClient) UploadFileByURL(request UploadFileByUrlRequest) (UploadFileResponse, int, error) {
var resp UploadFileResponse
outgoing, _ := json.Marshal(&request)
data, status, err := c.PostRequest("/files/upload_by_url", []byte(outgoing))
if err != nil {
return resp, status, err
}
if e := json.Unmarshal(data, &resp); e != nil {
return resp, status, e
}
if status != http.StatusOK {
return resp, status, c.Error(data)
}
return resp, status, err
}
func (c *MgClient) Error(info []byte) error { func (c *MgClient) Error(info []byte) error {
var data map[string]interface{} var data map[string]interface{}

View File

@ -57,6 +57,12 @@ func TestMgClient_ActivateTransportChannel(t *testing.T) {
Creating: ChannelFeatureBoth, Creating: ChannelFeatureBoth,
Deleting: ChannelFeatureSend, Deleting: ChannelFeatureSend,
}, },
Image: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
File: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
}, },
} }
@ -94,6 +100,12 @@ func TestMgClient_ActivateNewTransportChannel(t *testing.T) {
Creating: ChannelFeatureBoth, Creating: ChannelFeatureBoth,
Deleting: ChannelFeatureSend, Deleting: ChannelFeatureSend,
}, },
Image: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
File: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
}, },
} }
@ -143,6 +155,12 @@ func TestMgClient_UpdateTransportChannel(t *testing.T) {
Creating: ChannelFeatureBoth, Creating: ChannelFeatureBoth,
Deleting: ChannelFeatureSend, Deleting: ChannelFeatureSend,
}, },
Image: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
File: ChannelSettingsFilesBase{
Creating: ChannelFeatureBoth,
},
}, },
} }
@ -155,7 +173,7 @@ func TestMgClient_UpdateTransportChannel(t *testing.T) {
t.Logf("Update selected channel: %v", data.ChannelID) t.Logf("Update selected channel: %v", data.ChannelID)
} }
func TestMgClient_Messages(t *testing.T) { func TestMgClient_TextMessages(t *testing.T) {
c := client() c := client()
t.Logf("%v", ext) t.Logf("%v", ext)
@ -187,6 +205,46 @@ func TestMgClient_Messages(t *testing.T) {
t.Logf("Message %v is sent", data.MessageID) t.Logf("Message %v is sent", data.MessageID)
} }
func TestMgClient_ImageMessages(t *testing.T) {
c := client()
t.Logf("%v", ext)
uploadFileResponse, st, err := c.UploadFileByURL(UploadFileByUrlRequest{
Url: "https://via.placeholder.com/300",
})
if st != http.StatusOK {
t.Errorf("%v", err)
}
snd := SendData{
Message: Message{
ExternalID: ext,
Type: MsgTypeImage,
Items: []Item{{ID: uploadFileResponse.ID}},
},
User: User{
ExternalID: "6",
Nickname: "octopus",
Firstname: "Joe",
},
Channel: channelID,
ExternalChatID: "24798237492374",
}
data, status, err := c.Messages(snd)
if status != http.StatusOK {
t.Errorf("%v", err)
}
if data.Time.String() == "" {
t.Errorf("%v", err)
}
t.Logf("Message %v is sent", data.MessageID)
}
func TestMgClient_UpdateMessages(t *testing.T) { func TestMgClient_UpdateMessages(t *testing.T) {
c := client() c := client()
t.Logf("%v", ext) t.Logf("%v", ext)

View File

@ -26,6 +26,10 @@ const (
MsgTypeOrder string = "order" MsgTypeOrder string = "order"
// MsgTypeProduct product card // MsgTypeProduct product card
MsgTypeProduct string = "product" MsgTypeProduct string = "product"
// MsgTypeFile file card
MsgTypeFile string = "file"
// MsgTypeImage image card
MsgTypeImage string = "image"
// MsgOrderStatusCodeNew order status group new // MsgOrderStatusCodeNew order status group new
MsgOrderStatusCodeNew = "new" MsgOrderStatusCodeNew = "new"
@ -39,6 +43,8 @@ const (
MsgOrderStatusCodeComplete = "complete" MsgOrderStatusCodeComplete = "complete"
// MsgOrderStatusCodeCancel order status group cancel // MsgOrderStatusCodeCancel order status group cancel
MsgOrderStatusCodeCancel = "cancel" MsgOrderStatusCodeCancel = "cancel"
FileSizeLimit = 20 * 1024 * 1024
) )
// MgClient type // MgClient type
@ -64,6 +70,8 @@ type ChannelSettings struct {
Text ChannelSettingsText `json:"text"` Text ChannelSettingsText `json:"text"`
Product Product `json:"product"` Product Product `json:"product"`
Order Order `json:"order"` Order Order `json:"order"`
File ChannelSettingsFilesBase `json:"file"`
Image ChannelSettingsFilesBase `json:"image"`
} }
// Product type // Product type
@ -94,6 +102,46 @@ type ChannelSettingsText struct {
Deleting string `json:"deleting"` Deleting string `json:"deleting"`
} }
// ChannelSettingsFilesBase struct
type ChannelSettingsFilesBase struct {
Creating string `json:"creating"`
Editing string `json:"editing"`
Quoting string `json:"quoting"`
Deleting string `json:"deleting"`
Max uint64 `json:"max_items_count"`
}
// FullFileResponse uploaded file data
type FullFileResponse struct {
ID string `json:"id,omitempty"`
Type string `json:"type,omitempty"`
Size int `json:"size,omitempty"`
Url string `json:"url,omitempty"`
}
// UploadFileResponse uploaded file data
type UploadFileResponse struct {
ID string `json:"id"`
Hash string `json:"hash"`
Type string `json:"type"`
Meta FileMeta `json:"meta"`
MimeType string `json:"mime_type"`
Size int `json:"size"`
Url *string `json:"source_url"`
CreatedAt time.Time `json:"created_at"`
}
// FileMeta file metadata
type FileMeta struct {
Width *int `json:"width,omitempty"`
Height *int `json:"height,omitempty"`
}
// UploadFileByUrlRequest file url to upload
type UploadFileByUrlRequest struct {
Url string `json:"url"`
}
// ActivateResponse channel activation response // ActivateResponse channel activation response
type ActivateResponse struct { type ActivateResponse struct {
ChannelID uint64 `json:"id"` ChannelID uint64 `json:"id"`
@ -156,6 +204,7 @@ type Message struct {
ExternalID string `json:"external_id"` ExternalID string `json:"external_id"`
Type string `json:"type,omitempty"` Type string `json:"type,omitempty"`
Text string `json:"text,omitempty"` Text string `json:"text,omitempty"`
Items []Item `json:"items,omitempty"`
} }
// SendMessage struct // SendMessage struct
@ -186,6 +235,12 @@ type SendData struct {
Quote *SendMessageRequestQuote `json:"quote,omitempty"` Quote *SendMessageRequestQuote `json:"quote,omitempty"`
} }
// Item struct
type Item struct {
ID string `json:"id"`
Caption string `json:"caption"`
}
// SendMessageRequestQuote type // SendMessageRequestQuote type
type SendMessageRequestQuote struct { type SendMessageRequestQuote struct {
ExternalID string `json:"external_id"` ExternalID string `json:"external_id"`
@ -238,6 +293,15 @@ type WebhookData struct {
Bot *MessageDataBot `json:"bot,omitempty"` Bot *MessageDataBot `json:"bot,omitempty"`
Product *MessageDataProduct `json:"product,omitempty"` Product *MessageDataProduct `json:"product,omitempty"`
Order *MessageDataOrder `json:"order,omitempty"` Order *MessageDataOrder `json:"order,omitempty"`
Images *[]FileItem `json:"images,omitempty"`
Files *[]FileItem `json:"files,omitempty"`
}
// FileItem struct
type FileItem struct {
ID string `json:"id"`
Name string `json:"name"`
Size int `json:"size"`
} }
// MessageDataUser user data from webhook // MessageDataUser user data from webhook