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"
14
networkYandex = "yandex"
18
type Conversions struct {
19
app *pocketbase.PocketBase
22
func NewConversions(app *pocketbase.PocketBase) *Conversions {
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())
32
name := c.PathParam("name")
33
tracker, err := h.app.Dao().FindFirstRecordByFilter(
35
"name = {:name} && enabled = true",
36
dbx.Params{"name": name},
39
return apis.NewNotFoundError("", err)
42
conversions, err := h.app.Dao().FindCollectionByNameOrId("conversions")
44
return apis.NewNotFoundError("", err)
47
record := models.NewRecord(conversions)
49
yclid := c.QueryParam("yclid")
50
rbclickid := c.QueryParam("rb_clickid")
51
key := yclid + rbclickid
59
network = networkYandex
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)
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)