feat: added getting for companies and contacts.
This commit is contained in:
parent
ab6d5fb118
commit
f970498504
8 changed files with 216 additions and 5 deletions
55
cmd/amocli/getcom.go
Normal file
55
cmd/amocli/getcom.go
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "surdeus.su/core/amo"
|
||||||
|
import "surdeus.su/core/ss/urlenc"
|
||||||
|
import "surdeus.su/core/cli/mtool"
|
||||||
|
import "encoding/json"
|
||||||
|
import "strconv"
|
||||||
|
import "log"
|
||||||
|
import "fmt"
|
||||||
|
//import "os"
|
||||||
|
|
||||||
|
var getComs = mtool.T("get-coms").Func(func(flags *mtool.Flags){
|
||||||
|
var (
|
||||||
|
secretPath string
|
||||||
|
)
|
||||||
|
|
||||||
|
flags.StringVar(
|
||||||
|
&secretPath,
|
||||||
|
"secret",
|
||||||
|
"",
|
||||||
|
"path to JSON file with AMO CRM secrets",
|
||||||
|
"AMO_SECRET",
|
||||||
|
)
|
||||||
|
idStrs := flags.Parse()
|
||||||
|
ids := make([]int, len(idStrs))
|
||||||
|
for i, idStr := range idStrs {
|
||||||
|
var err error
|
||||||
|
ids[i], err = strconv.Atoi(idStr)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: Atoi(%q): %s\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := amo.NewClient(secretPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewAmoClient(...): %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
coms, err := c.GetCompanies(
|
||||||
|
urlenc.Array[int]{
|
||||||
|
"id",
|
||||||
|
ids,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetCompanies(...): %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bts, err := json.MarshalIndent(coms, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("json.Marshal(...): %s\n", err)
|
||||||
|
}
|
||||||
|
fmt.Printf("%s\n", bts)
|
||||||
|
})
|
56
cmd/amocli/getcontact.go
Normal file
56
cmd/amocli/getcontact.go
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "surdeus.su/core/amo"
|
||||||
|
import "surdeus.su/core/ss/urlenc"
|
||||||
|
import "surdeus.su/core/cli/mtool"
|
||||||
|
import "encoding/json"
|
||||||
|
import "strconv"
|
||||||
|
import "log"
|
||||||
|
import "fmt"
|
||||||
|
//import "os"
|
||||||
|
|
||||||
|
var getContacts = mtool.T("get-contacts").
|
||||||
|
Func(func(flags *mtool.Flags){
|
||||||
|
var (
|
||||||
|
secretPath string
|
||||||
|
)
|
||||||
|
|
||||||
|
flags.StringVar(
|
||||||
|
&secretPath,
|
||||||
|
"secret",
|
||||||
|
"",
|
||||||
|
"path to JSON file with AMO CRM secrets",
|
||||||
|
"AMO_SECRET",
|
||||||
|
)
|
||||||
|
idStrs := flags.Parse()
|
||||||
|
ids := make([]int, len(idStrs))
|
||||||
|
for i, idStr := range idStrs {
|
||||||
|
var err error
|
||||||
|
ids[i], err = strconv.Atoi(idStr)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error: Atoi(%q): %s\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := amo.NewClient(secretPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("NewAmoClient(...): %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
contacts, err := c.GetContacts(
|
||||||
|
urlenc.Array[int]{
|
||||||
|
"id",
|
||||||
|
ids,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("GetContacts(...): %s\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bts, err := json.MarshalIndent(contacts, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("json.Marshal(...): %s\n", err)
|
||||||
|
}
|
||||||
|
fmt.Printf("%s\n", bts)
|
||||||
|
})
|
|
@ -9,5 +9,9 @@ func main() {
|
||||||
|
|
||||||
var tool = mtool.T("amocli").Subs(
|
var tool = mtool.T("amocli").Subs(
|
||||||
getLead,
|
getLead,
|
||||||
updateLead,
|
|
||||||
|
getComs,
|
||||||
|
updateComs,
|
||||||
|
|
||||||
|
getContacts,
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,8 +7,8 @@ import "encoding/json"
|
||||||
import "log"
|
import "log"
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
var updateLead =
|
var updateComs =
|
||||||
mtool.T("update-companies").Func(func(flags *mtool.Flags){
|
mtool.T("update-coms").Func(func(flags *mtool.Flags){
|
||||||
var (
|
var (
|
||||||
secretPath string
|
secretPath string
|
||||||
)
|
)
|
||||||
|
|
32
companies.go
32
companies.go
|
@ -2,6 +2,8 @@ package amo
|
||||||
|
|
||||||
import "surdeus.su/core/ss/urlenc"
|
import "surdeus.su/core/ss/urlenc"
|
||||||
import "surdeus.su/core/amo/companies"
|
import "surdeus.su/core/amo/companies"
|
||||||
|
import "surdeus.su/core/amo/api"
|
||||||
|
import "errors"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func (client *Client) GetCompany(
|
func (client *Client) GetCompany(
|
||||||
|
@ -21,6 +23,36 @@ func (client *Client) GetCompany(
|
||||||
}
|
}
|
||||||
return deal, nil
|
return deal, nil
|
||||||
}
|
}
|
||||||
|
// Get list of leads.
|
||||||
|
func (client *Client) GetCompanies(
|
||||||
|
opts ...urlenc.Builder,
|
||||||
|
) ([]companies.Company, error) {
|
||||||
|
res := fmt.Sprintf(
|
||||||
|
"/api/v4/companies?%s",
|
||||||
|
urlenc.Join(opts...).Encode(),
|
||||||
|
)
|
||||||
|
|
||||||
|
ret := []companies.Company{}
|
||||||
|
for {
|
||||||
|
var coms companies.Companies
|
||||||
|
err := client.API.Get(res, &coms)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, api.ErrNoContent) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = append(ret, coms.Embedded.Companies...)
|
||||||
|
|
||||||
|
if coms.Links.Next.Href == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
res = coms.Links.Next.Href
|
||||||
|
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (client *Client) UpdateCompany(
|
func (client *Client) UpdateCompany(
|
||||||
company *companies.Company,
|
company *companies.Company,
|
||||||
|
|
|
@ -34,3 +34,18 @@ type Embedded struct {
|
||||||
Tags []interface{} `json:"tags"`
|
Tags []interface{} `json:"tags"`
|
||||||
Contacts []*Contacts `json:"contacts"`
|
Contacts []*Contacts `json:"contacts"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Companies struct {
|
||||||
|
Page int `json:"_page"`
|
||||||
|
Links struct {
|
||||||
|
Self struct {
|
||||||
|
Href string `json:"href"`
|
||||||
|
} `json:"self"`
|
||||||
|
Next struct {
|
||||||
|
Href string `json:"href"`
|
||||||
|
} `json:"next"`
|
||||||
|
} `json:"_links"`
|
||||||
|
Embedded struct {
|
||||||
|
Companies []Company `json:"companies"`
|
||||||
|
} `json:"_embedded"`
|
||||||
|
}
|
||||||
|
|
33
contacts.go
33
contacts.go
|
@ -2,6 +2,8 @@ package amo
|
||||||
|
|
||||||
import "surdeus.su/core/amo/contacts"
|
import "surdeus.su/core/amo/contacts"
|
||||||
import "surdeus.su/core/ss/urlenc"
|
import "surdeus.su/core/ss/urlenc"
|
||||||
|
import "errors"
|
||||||
|
import "surdeus.su/core/amo/api"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
func (client *Client) GetContact(
|
func (client *Client) GetContact(
|
||||||
|
@ -21,6 +23,37 @@ func (client *Client) GetContact(
|
||||||
}
|
}
|
||||||
return deal, nil
|
return deal, nil
|
||||||
}
|
}
|
||||||
|
// Get list of contacts.
|
||||||
|
func (client *Client) GetContacts(
|
||||||
|
opts ...urlenc.Builder,
|
||||||
|
) ([]contacts.Contact, error) {
|
||||||
|
res := fmt.Sprintf(
|
||||||
|
"/api/v4/contacts?%s",
|
||||||
|
urlenc.Join(opts...).Encode(),
|
||||||
|
)
|
||||||
|
|
||||||
|
ret := []contacts.Contact{}
|
||||||
|
|
||||||
|
for {
|
||||||
|
var cts contacts.Contacts
|
||||||
|
err := client.API.Get(res, &cts)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, api.ErrNoContent) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = append(ret, cts.Embedded.Contacts...)
|
||||||
|
|
||||||
|
if cts.Links.Next.Href == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
res = cts.Links.Next.Href
|
||||||
|
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (client *Client) UpdateContact(contact *contacts.Contact) error {
|
func (client *Client) UpdateContact(contact *contacts.Contact) error {
|
||||||
return client.updateEntity(
|
return client.updateEntity(
|
||||||
|
|
|
@ -43,7 +43,7 @@ type Customers struct {
|
||||||
Links Links `json:"_links"`
|
Links Links `json:"_links"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Companies struct {
|
type Company struct {
|
||||||
Id int `json:"id"`
|
Id int `json:"id"`
|
||||||
Links Links `json:"_links"`
|
Links Links `json:"_links"`
|
||||||
}
|
}
|
||||||
|
@ -53,5 +53,21 @@ type Embedded struct {
|
||||||
Leads []Leads `json:"leads"`
|
Leads []Leads `json:"leads"`
|
||||||
Customers []Customers `json:"customers"`
|
Customers []Customers `json:"customers"`
|
||||||
CatalogElements []interface{} `json:"catalog_elements"`
|
CatalogElements []interface{} `json:"catalog_elements"`
|
||||||
Companies []Companies `json:"companies"`
|
Companies []Company `json:"companies"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Contacts struct {
|
||||||
|
Page int `json:"_page"`
|
||||||
|
Links struct {
|
||||||
|
Self struct {
|
||||||
|
Href string `json:"href"`
|
||||||
|
} `json:"self"`
|
||||||
|
Next struct {
|
||||||
|
Href string `json:"href"`
|
||||||
|
} `json:"next"`
|
||||||
|
} `json:"_links"`
|
||||||
|
Embedded struct {
|
||||||
|
Contacts []Contact `json:"contacts"`
|
||||||
|
} `json:"_embedded"`
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue