tracker

Форк
0
/
conversions.go 
75 строк · 1.8 Кб
1
package handlers
2

3
import (
4
	"net/http"
5

6
	"github.com/labstack/echo/v5"
7
	"github.com/pocketbase/dbx"
8
	"github.com/pocketbase/pocketbase"
9
	"github.com/pocketbase/pocketbase/apis"
10
	"github.com/pocketbase/pocketbase/models"
11
)
12

13
const (
14
	networkYandex = "yandex"
15
	networkVK     = "vk"
16
)
17

18
type Conversions struct {
19
	app *pocketbase.PocketBase
20
}
21

22
func NewConversions(app *pocketbase.PocketBase) *Conversions {
23
	return &Conversions{
24
		app: app,
25
	}
26
}
27

28
// /downloader/fire?client_id=&yclid=14178035617771290623&install_timestamp=1721291374&appmetrica_device_id=11918280336705624214&click_id=&transaction_id=cpi17188142678303156033&match_type=fingerprint&tracker=appmetrica_821509867285037527&rb_clickid=
29
func (h *Conversions) Fire(c echo.Context) error {
30
	h.app.Logger().Info("conversion fire request", "url", c.Request().URL.String())
31

32
	name := c.PathParam("name")
33
	tracker, err := h.app.Dao().FindFirstRecordByFilter(
34
		"tracker",
35
		"name = {:name} && enabled = true",
36
		dbx.Params{"name": name},
37
	)
38
	if err != nil {
39
		return apis.NewNotFoundError("", err)
40
	}
41

42
	conversions, err := h.app.Dao().FindCollectionByNameOrId("conversions")
43
	if err != nil {
44
		return apis.NewNotFoundError("", err)
45
	}
46

47
	record := models.NewRecord(conversions)
48

49
	yclid := c.QueryParam("yclid")
50
	rbclickid := c.QueryParam("rb_clickid")
51
	key := yclid + rbclickid
52

53
	if key == "" {
54
		return nil
55
	}
56

57
	network := networkVK
58
	if yclid != "" {
59
		network = networkYandex
60
	}
61

62
	record.Set("yclid", yclid)
63
	record.Set("rb_clickid", rbclickid)
64
	record.Set("key", key)
65
	record.Set("uploaded", false)
66
	record.Set("network", network)
67
	record.Set("tracker", tracker.Id)
68

69
	if err := h.app.Dao().SaveRecord(record); err != nil {
70
		h.app.Logger().Error("error on save conversions", "error", err)
71
		return apis.NewApiError(http.StatusInternalServerError, "error on save", err)
72
	}
73

74
	return nil
75
}
76

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.