Merge branch 'fix' into 'staging'
Fix See merge request backend/quiz/amocrm!17
This commit is contained in:
commit
adcf172bad
4
go.mod
4
go.mod
@ -12,12 +12,14 @@ require (
|
|||||||
github.com/twmb/franz-go v1.16.1
|
github.com/twmb/franz-go v1.16.1
|
||||||
go.uber.org/zap v1.27.0
|
go.uber.org/zap v1.27.0
|
||||||
google.golang.org/protobuf v1.33.0
|
google.golang.org/protobuf v1.33.0
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621172746-5cbeb2b88f0a
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621165314-e374d50e42e6
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
|
||||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
|
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
|
26
go.sum
26
go.sum
@ -1,9 +1,15 @@
|
|||||||
|
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
|
||||||
|
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
|
||||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||||
|
github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
|
||||||
|
github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
|
||||||
github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
|
github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
|
||||||
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
|
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
|
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
|
||||||
|
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@ -15,6 +21,7 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo
|
|||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
||||||
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
||||||
|
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/gofiber/fiber/v2 v2.52.4 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM=
|
github.com/gofiber/fiber/v2 v2.52.4 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM=
|
||||||
github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
|
github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
||||||
@ -28,6 +35,7 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
|
|||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
@ -43,6 +51,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
|
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
@ -52,6 +61,7 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||||
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
|
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||||
github.com/minio/minio-go/v7 v7.0.69 h1:l8AnsQFyY1xiwa/DaQskY4NXSLA2yrGsW5iD9nRPVS0=
|
github.com/minio/minio-go/v7 v7.0.69 h1:l8AnsQFyY1xiwa/DaQskY4NXSLA2yrGsW5iD9nRPVS0=
|
||||||
@ -69,6 +79,8 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
|||||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||||
|
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
|
||||||
|
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4=
|
github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4=
|
||||||
github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
@ -130,15 +142,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 h1:oV+/HNX+JPoQ3/GUx08hio7d45WpY0AMGrFs7j70QlA=
|
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 h1:oV+/HNX+JPoQ3/GUx08hio7d45WpY0AMGrFs7j70QlA=
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240612153845-6a7e3f9ea52f h1:7pzOupQPADYOi7nH5lLZBzoAntV3rP8J4tlHg/eXkJA=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621165314-e374d50e42e6 h1:Ts1PGn2drIA3WJoSdlGvtMqsWBSQ02Pp/q4NxqIq/0c=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240612153845-6a7e3f9ea52f/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621165314-e374d50e42e6/go.mod h1:nfZkoj8MCYaoP+xiPeUn5D0lIzinUr1qDkNfX0ng9rk=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240619123238-dd521165c55a h1:u4soF4G76TAIN+/GLHdi+0Hc1qgN3W1s8g4hDvzqwyI=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240619123238-dd521165c55a/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240619180437-6d449201156e h1:ymGwJmQls96uNdY1301zLwJtC8YqSinZN0Rs+UGvYgA=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240619180437-6d449201156e/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621103513-9616b086fa4a h1:RPuYgZri2A15IF/kOshgstLdf6L0tV9m4FhFQUfzW/A=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621103513-9616b086fa4a/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621150128-4b70022ad675 h1:w9I3PSvR3XsxL48fgyi65zLhbnpJXUknKz3ZqkCltzI=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621150128-4b70022ad675/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621172746-5cbeb2b88f0a h1:all9W8RrLcr+47k6dAQgdyjVGuXbO3H29AkMGMTcJ28=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240621172746-5cbeb2b88f0a/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398=
|
|
||||||
|
@ -39,11 +39,11 @@ type LinkedContactReq struct {
|
|||||||
ToEntityID int32 `json:"to_entity_id"` // ID связанной сущности
|
ToEntityID int32 `json:"to_entity_id"` // ID связанной сущности
|
||||||
ToEntityType string `json:"to_entity_type"` // Тип связанной сущности (leads, contacts, companies, customers, catalog_elements)
|
ToEntityType string `json:"to_entity_type"` // Тип связанной сущности (leads, contacts, companies, customers, catalog_elements)
|
||||||
Metadata struct {
|
Metadata struct {
|
||||||
CatalogID int `json:"catalog_id"` // ID каталога
|
//CatalogID int `json:"catalog_id"` // ID каталога
|
||||||
Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
//Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
||||||
IsMain bool `json:"is_main"` // Является ли контакт главным
|
IsMain bool `json:"is_main"` // Является ли контакт главным
|
||||||
UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
//UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
||||||
PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
//PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
||||||
} `json:"metadata"`
|
} `json:"metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,13 +57,15 @@ func ToCreatedUpdateQuestionRules(questionsTypeMap map[model.EntityType][]model.
|
|||||||
for entity, questions := range questionsTypeMap {
|
for entity, questions := range questionsTypeMap {
|
||||||
for _, question := range questions {
|
for _, question := range questions {
|
||||||
// если заголоввок пустой у вопроса делаем ему заголовок чтоб в амо легли филды нормально
|
// если заголоввок пустой у вопроса делаем ему заголовок чтоб в амо легли филды нормально
|
||||||
title := strings.ReplaceAll(question.Title, " ", "")
|
title := strings.ToLower(strings.ReplaceAll(question.Title, " ", ""))
|
||||||
if title == "" {
|
if title == "" {
|
||||||
question.Title = fmt.Sprintf("Вопрос №%d", question.Page)
|
question.Title = fmt.Sprintf("Вопрос №%d", question.Page)
|
||||||
}
|
}
|
||||||
|
title = strings.ToLower(strings.ReplaceAll(question.Title, " ", ""))
|
||||||
matched := false
|
matched := false
|
||||||
for _, field := range currentFields {
|
for _, field := range currentFields {
|
||||||
if question.Title == field.Name && entity == field.Entity {
|
fieldName := strings.ToLower(strings.ReplaceAll(field.Name, " ", ""))
|
||||||
|
if title == fieldName && entity == field.Entity {
|
||||||
toUpdate[int(question.Id)] = ToUpdate{
|
toUpdate[int(question.Id)] = ToUpdate{
|
||||||
FieldID: int(field.Amoid),
|
FieldID: int(field.Amoid),
|
||||||
Entity: entity,
|
Entity: entity,
|
||||||
|
@ -316,15 +316,17 @@ func (wc *PostDeals) constructField(ctx context.Context, allAnswers []model.Resu
|
|||||||
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
|
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, err
|
||||||
}
|
}
|
||||||
|
if errors.Is(err, pj_errors.ErrNotFound) || len(existContactData) == 0 {
|
||||||
if errors.Is(err, pj_errors.ErrNotFound) {
|
fmt.Println("NO CONTACT")
|
||||||
contactResp, err := wc.amoClient.CreateContact(models.CreateContactReq{
|
contactResp, err := wc.amoClient.CreateContact([]models.CreateContactReq{
|
||||||
Name: resultInfo.Name,
|
{
|
||||||
ResponsibleUserID: result.PerformerID,
|
Name: resultInfo.Name,
|
||||||
CreatedBy: 0,
|
ResponsibleUserID: result.PerformerID,
|
||||||
UpdatedBy: 0,
|
CreatedBy: 0,
|
||||||
CreatedAt: dateCreating,
|
UpdatedBy: 0,
|
||||||
CustomFieldsValues: contactFields,
|
CreatedAt: dateCreating,
|
||||||
|
CustomFieldsValues: contactFields,
|
||||||
|
},
|
||||||
}, result.SubDomain, result.AccessToken)
|
}, result.SubDomain, result.AccessToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, err
|
||||||
@ -409,6 +411,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
for _, contact := range contactVariants {
|
for _, contact := range contactVariants {
|
||||||
if contact.Field == resultInfo.Email {
|
if contact.Field == resultInfo.Email {
|
||||||
if _, ok := phoneMatchedContacts[contact.AmoID]; ok {
|
if _, ok := phoneMatchedContacts[contact.AmoID]; ok {
|
||||||
|
fmt.Println("нашлось телефон и емайл в бд, с одинаковым амоид", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -431,11 +434,18 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
|
|
||||||
if phoneContactID != 0 && emailContactID != 0 && phoneContactID != emailContactID {
|
if phoneContactID != 0 && emailContactID != 0 && phoneContactID != emailContactID {
|
||||||
|
fmt.Println("нашлось телефон и емайл в бд, но это пока разные контакты", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
// делаем обновление телефона там где уже есть email
|
// делаем обновление телефона там где уже есть email
|
||||||
var valuePhone []models.FieldsValues
|
var valuePhone []models.FieldsValues
|
||||||
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valuePhone,
|
CustomFieldsValues: valuePhone,
|
||||||
}, result.SubDomain, result.AccessToken, emailContactID)
|
}, result.SubDomain, result.AccessToken, emailContactID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -447,14 +457,29 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = wc.amoClient.LinkedContactToContact(models.LinkedContactReq{
|
// todo пока без линковки
|
||||||
EntityID: emailContactID,
|
//_, err = wc.amoClient.LinkedContactToContact([]models.LinkedContactReq{
|
||||||
ToEntityID: phoneContactID,
|
// {
|
||||||
ToEntityType: string(model.ContactsType),
|
// ToEntityID: emailContactID,
|
||||||
}, result.SubDomain, result.AccessToken)
|
// ToEntityType: "contacts",
|
||||||
if err != nil {
|
// //Metadata: struct {
|
||||||
return 0, err
|
// // //CatalogID int `json:"catalog_id"`
|
||||||
}
|
// // //Quantity int `json:"quantity"`
|
||||||
|
// // IsMain bool `json:"is_main"`
|
||||||
|
// // //UpdatedBy int `json:"updated_by"`
|
||||||
|
// // //PriceID int `json:"price_id"`
|
||||||
|
// //}(struct {
|
||||||
|
// // //CatalogID int
|
||||||
|
// // //Quantity int
|
||||||
|
// // IsMain bool
|
||||||
|
// // //UpdatedBy int
|
||||||
|
// // //PriceID int
|
||||||
|
// //}{IsMain: true}),
|
||||||
|
// },
|
||||||
|
//}, result.SubDomain, result.AccessToken, phoneContactID)
|
||||||
|
//if err != nil {
|
||||||
|
// return 0, err
|
||||||
|
//}
|
||||||
|
|
||||||
return emailContactID, nil
|
return emailContactID, nil
|
||||||
}
|
}
|
||||||
@ -477,9 +502,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if !emailExists && resultInfo.Email != "" {
|
if !emailExists && resultInfo.Email != "" {
|
||||||
// email пустой обновляем контакт добавляя email, если не пустой
|
// email пустой обновляем контакт добавляя email, если не пустой
|
||||||
|
fmt.Println("нашлось телефон, емайл не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
var valueEmail []models.FieldsValues
|
var valueEmail []models.FieldsValues
|
||||||
valueEmail = tools.AddContactFields(valueEmail, resultInfo.Email, model.TypeContactEmail, contactRuleMap)
|
valueEmail = tools.AddContactFields(valueEmail, resultInfo.Email, model.TypeContactEmail, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valueEmail,
|
CustomFieldsValues: valueEmail,
|
||||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -497,17 +530,20 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if emailExists && resultInfo.Email != "" {
|
if emailExists && resultInfo.Email != "" {
|
||||||
// email не пустой значит это новый контакт создаем если наш email тоже не пустой
|
// email не пустой значит это новый контакт создаем если наш email тоже не пустой
|
||||||
|
fmt.Println("нашлось телефон, емайл не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
}
|
}
|
||||||
resp, err := wc.amoClient.CreateContact(models.CreateContactReq{
|
resp, err := wc.amoClient.CreateContact([]models.CreateContactReq{
|
||||||
Name: name,
|
{
|
||||||
ResponsibleUserID: result.PerformerID,
|
Name: name,
|
||||||
CreatedBy: 0,
|
ResponsibleUserID: result.PerformerID,
|
||||||
UpdatedBy: 0,
|
CreatedBy: 0,
|
||||||
CreatedAt: dateCreating,
|
UpdatedBy: 0,
|
||||||
CustomFieldsValues: contactFields,
|
CreatedAt: dateCreating,
|
||||||
|
CustomFieldsValues: contactFields,
|
||||||
|
},
|
||||||
}, result.SubDomain, result.AccessToken)
|
}, result.SubDomain, result.AccessToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@ -537,6 +573,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
return contactID, nil
|
return contactID, nil
|
||||||
}
|
}
|
||||||
// если пустой то это нужный контакт возвращаем его id, так как если мейл пустой у нас но номер совпадает а в бд не пустой значит оно нам надо
|
// если пустой то это нужный контакт возвращаем его id, так как если мейл пустой у нас но номер совпадает а в бд не пустой значит оно нам надо
|
||||||
|
fmt.Println("нашлось телефон, емайл пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -560,9 +597,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if !phoneExists && resultInfo.Phone != "" {
|
if !phoneExists && resultInfo.Phone != "" {
|
||||||
// телефон пустой обновляем контакт добавляя телефон, если не пустой
|
// телефон пустой обновляем контакт добавляя телефон, если не пустой
|
||||||
|
fmt.Println("нашлось емайл, телефон не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
var valuePhone []models.FieldsValues
|
var valuePhone []models.FieldsValues
|
||||||
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valuePhone,
|
CustomFieldsValues: valuePhone,
|
||||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -580,17 +625,20 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if phoneExists && resultInfo.Phone != "" {
|
if phoneExists && resultInfo.Phone != "" {
|
||||||
// телефон не пустой значит это новый контакт создаем если наш телефон не пустой
|
// телефон не пустой значит это новый контакт создаем если наш телефон не пустой
|
||||||
|
fmt.Println("нашлось емайл, телефон не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
}
|
}
|
||||||
resp, err := wc.amoClient.CreateContact(models.CreateContactReq{
|
resp, err := wc.amoClient.CreateContact([]models.CreateContactReq{
|
||||||
Name: name,
|
{
|
||||||
ResponsibleUserID: result.PerformerID,
|
Name: name,
|
||||||
CreatedBy: 0,
|
ResponsibleUserID: result.PerformerID,
|
||||||
UpdatedBy: 0,
|
CreatedBy: 0,
|
||||||
CreatedAt: dateCreating,
|
UpdatedBy: 0,
|
||||||
CustomFieldsValues: contactFields,
|
CreatedAt: dateCreating,
|
||||||
|
CustomFieldsValues: contactFields,
|
||||||
|
},
|
||||||
}, result.SubDomain, result.AccessToken)
|
}, result.SubDomain, result.AccessToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@ -621,24 +669,28 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
|
|
||||||
// если пустой то это нужный контакт возвращаем его id, так как если телефон пустой у нас но мейл совпадает а в бд не пустой значит оно нам надо
|
// если пустой то это нужный контакт возвращаем его id, так как если телефон пустой у нас но мейл совпадает а в бд не пустой значит оно нам надо
|
||||||
|
fmt.Println("нашлось емайл, телефон пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("ничего не нашлось, создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
// если дошлю до сюда то это новый контакт с новым email and phone
|
// если дошлю до сюда то это новый контакт с новым email and phone
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
}
|
}
|
||||||
resp, err := wc.amoClient.CreateContact(models.CreateContactReq{
|
resp, err := wc.amoClient.CreateContact([]models.CreateContactReq{
|
||||||
Name: name,
|
{
|
||||||
ResponsibleUserID: result.PerformerID,
|
Name: name,
|
||||||
CreatedBy: 0,
|
ResponsibleUserID: result.PerformerID,
|
||||||
UpdatedBy: 0,
|
CreatedBy: 0,
|
||||||
CreatedAt: dateCreating,
|
UpdatedBy: 0,
|
||||||
CustomFieldsValues: contactFields,
|
CreatedAt: dateCreating,
|
||||||
|
CustomFieldsValues: contactFields,
|
||||||
|
},
|
||||||
}, result.SubDomain, result.AccessToken)
|
}, result.SubDomain, result.AccessToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -679,12 +679,14 @@ func (m *Methods) CheckFieldRule(ctx context.Context, token string, msg models.K
|
|||||||
}
|
}
|
||||||
if questionID == int(question.Id) {
|
if questionID == int(question.Id) {
|
||||||
// тут также делаем чтобы сверить филд с вопросом
|
// тут также делаем чтобы сверить филд с вопросом
|
||||||
title := strings.ReplaceAll(question.Title, " ", "")
|
title := strings.ToLower(strings.ReplaceAll(question.Title, " ", ""))
|
||||||
if title == "" {
|
if title == "" {
|
||||||
question.Title = fmt.Sprintf("Вопрос №%d", question.Page)
|
question.Title = fmt.Sprintf("Вопрос №%d", question.Page)
|
||||||
}
|
}
|
||||||
|
title = strings.ToLower(strings.ReplaceAll(question.Title, " ", ""))
|
||||||
for _, field := range newFields {
|
for _, field := range newFields {
|
||||||
if question.Title == field.Name && field.Entity == currentEntity {
|
fieldName := strings.ToLower(strings.ReplaceAll(field.Name, " ", ""))
|
||||||
|
if title == fieldName && field.Entity == currentEntity {
|
||||||
ruleMap := make(map[int]int)
|
ruleMap := make(map[int]int)
|
||||||
ruleMap[questionID] = int(field.Amoid)
|
ruleMap[questionID] = int(field.Amoid)
|
||||||
*fieldRule = append(*fieldRule, model.FieldRule{Questionid: ruleMap})
|
*fieldRule = append(*fieldRule, model.FieldRule{Questionid: ruleMap})
|
||||||
|
@ -722,7 +722,7 @@ func (a *Amo) createPart(uploadData models.UploadSession, file *os.File) (*model
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Amo) CreateContact(req models.CreateContactReq, domain, accessToken string) (*models.ContactResponse, error) {
|
func (a *Amo) CreateContact(req []models.CreateContactReq, domain, accessToken string) (*models.ContactResponse, error) {
|
||||||
for {
|
for {
|
||||||
if a.rateLimiter.Check() {
|
if a.rateLimiter.Check() {
|
||||||
uri := fmt.Sprintf("https://%s/api/v4/contacts", domain)
|
uri := fmt.Sprintf("https://%s/api/v4/contacts", domain)
|
||||||
@ -804,10 +804,10 @@ func (a *Amo) UpdateContact(req models.CreateContactReq, domain, accessToken str
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Amo) LinkedContactToContact(req models.LinkedContactReq, domain, accessToken string) (*models.LinkedContactResponse, error) {
|
func (a *Amo) LinkedContactToContact(req []models.LinkedContactReq, domain, accessToken string, id int32) (*models.LinkedContactResponse, error) {
|
||||||
for {
|
for {
|
||||||
if a.rateLimiter.Check() {
|
if a.rateLimiter.Check() {
|
||||||
uri := fmt.Sprintf("https://%s/api/v4/contacts/link", domain)
|
uri := fmt.Sprintf("https://%s/api/v4/contacts/%d/link", domain, id)
|
||||||
bodyBytes, err := json.Marshal(req)
|
bodyBytes, err := json.Marshal(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
a.logger.Error("error marshal req in Linked Contact To Contact:", zap.Error(err))
|
a.logger.Error("error marshal req in Linked Contact To Contact:", zap.Error(err))
|
||||||
|
Loading…
Reference in New Issue
Block a user