15
"github.com/pocketbase/dbx"
16
"github.com/pocketbase/pocketbase/models"
19
type UploadError struct {
20
ErrorType string `json:"error_type"`
21
Message string `json:"message"`
23
type UploadResponse struct {
24
Errors []UploadError `json:"errors"`
25
Code int `json:"code"`
26
Message string `json:"message"`
29
func (t *Task) yandex(tracker *models.Record) error {
30
to := time.Now().Add(-time.Hour * 4).Format("2006-01-02 15:04:05")
31
records, err := t.app.Dao().FindRecordsByFilter(
33
"uploaded = false && network = 'yandex' && tracker = {:tracker} && created < {:to}",
37
dbx.Params{"tracker": tracker.Id, "to": to},
44
if len(records) == 0 {
45
t.app.Logger().Warn("empty yandex conversion")
49
yaurl := tracker.GetString("yaurl")
50
yatoken := tracker.GetString("yatoken")
52
// create conversions file data
53
data := &bytes.Buffer{}
54
// create writer for conversions file data
55
file := csv.NewWriter(data)
56
if err := file.Write([]string{
65
for _, record := range records {
66
if err := file.Write([]string{
68
record.GetString("yclid"),
70
strconv.Itoa(int(record.Created.Time().In(t.loc).Unix())),
72
t.app.Logger().Warn("error on write csv row", "error", err)
80
body := &bytes.Buffer{}
81
// create writer for body
82
writer := multipart.NewWriter(body)
84
part, _ := writer.CreateFormFile("file", "file.csv")
85
if _, err := io.Copy(part, data); err != nil {
88
if err := writer.Close(); err != nil {
92
request, _ := http.NewRequest("POST", yaurl, body)
93
request.Header.Add("Authorization", "OAuth "+yatoken)
94
request.Header.Add("Content-Type", writer.FormDataContentType())
95
dump, err := httputil.DumpRequest(request, true)
100
_ = dump // debug here
102
resp, err := t.client.Do(request)
107
dump, err = httputil.DumpResponse(resp, true)
112
_ = dump // debug here
114
result := UploadResponse{}
115
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
118
if len(result.Errors) != 0 {
119
return fmt.Errorf("error on upload file: %s", result.Message)
122
for _, record := range records {
123
record.Set("uploaded", true)
125
if err := t.app.Dao().Save(record); err != nil {
126
t.app.Logger().Warn("error save uploaded conversions", "error", err)