refactor after testing with real data
This commit is contained in:
parent
4404b5abf8
commit
d4fa90ae26
30
cmd/main.go
30
cmd/main.go
@ -3,38 +3,32 @@ package main
|
|||||||
import (
|
import (
|
||||||
"amocrm/internal/initialize"
|
"amocrm/internal/initialize"
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"amocrm/internal/app"
|
"amocrm/internal/app"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"go.uber.org/zap/zapcore"
|
|
||||||
|
|
||||||
"github.com/caarlos0/env/v8"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cfgLogger := zap.NewDevelopmentConfig()
|
logger, err := zap.NewProduction()
|
||||||
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
||||||
cfgLogger.EncoderConfig.ConsoleSeparator = " "
|
|
||||||
|
|
||||||
logger, err := cfgLogger.Build()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
fmt.Printf("Failed to initialize logger: %v\n", err)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
config, err := initialize.LoadConfig()
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
var config initialize.Config
|
|
||||||
|
|
||||||
err = env.Parse(config)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
logger.Fatal("Failed to load config", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := app.Run(ctx, config, logger); err != nil {
|
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
||||||
logger.Fatal("Failed to run app", zap.Any("Error", err))
|
defer stop()
|
||||||
|
|
||||||
|
if err = app.Run(ctx, *config, logger); err != nil {
|
||||||
|
logger.Fatal("App exited with error", zap.Error(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
go.mod
16
go.mod
@ -5,11 +5,12 @@ go 1.21.6
|
|||||||
require (
|
require (
|
||||||
github.com/caarlos0/env/v8 v8.0.0
|
github.com/caarlos0/env/v8 v8.0.0
|
||||||
github.com/gofiber/fiber/v2 v2.52.4
|
github.com/gofiber/fiber/v2 v2.52.4
|
||||||
|
github.com/joho/godotenv v1.5.1
|
||||||
github.com/pioz/faker v1.7.3
|
github.com/pioz/faker v1.7.3
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
go.mongodb.org/mongo-driver v1.14.0
|
|
||||||
go.uber.org/zap v1.27.0
|
go.uber.org/zap v1.27.0
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419085450-fa0a053add5c
|
google.golang.org/protobuf v1.33.0
|
||||||
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419144125-64e45ebed8ae
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -20,13 +21,13 @@ require (
|
|||||||
github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
|
github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
|
||||||
github.com/golang-migrate/migrate/v4 v4.17.0 // indirect
|
github.com/golang-migrate/migrate/v4 v4.17.0 // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/compress v1.17.6 // indirect
|
github.com/klauspost/compress v1.17.6 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
||||||
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
github.com/lib/pq v1.10.9 // indirect
|
github.com/lib/pq v1.10.9 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
@ -36,27 +37,20 @@ require (
|
|||||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
github.com/rs/xid v1.5.0 // indirect
|
github.com/rs/xid v1.5.0 // indirect
|
||||||
github.com/sqlc-dev/pqtype v0.3.0 // indirect
|
github.com/sqlc-dev/pqtype v0.3.0 // indirect
|
||||||
github.com/tealeg/xlsx v1.0.5 // indirect
|
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
github.com/valyala/fasthttp v1.51.0 // indirect
|
github.com/valyala/fasthttp v1.51.0 // indirect
|
||||||
github.com/valyala/tcplisten v1.0.0 // indirect
|
github.com/valyala/tcplisten v1.0.0 // indirect
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
|
||||||
github.com/xdg-go/scram v1.1.2 // indirect
|
|
||||||
github.com/xdg-go/stringprep v1.0.4 // indirect
|
|
||||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
|
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.11.0 // indirect
|
||||||
go.uber.org/multierr v1.10.0 // indirect
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
golang.org/x/crypto v0.20.0 // indirect
|
golang.org/x/crypto v0.20.0 // indirect
|
||||||
golang.org/x/net v0.21.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sync v0.5.0 // indirect
|
|
||||||
golang.org/x/sys v0.17.0 // indirect
|
golang.org/x/sys v0.17.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
google.golang.org/protobuf v1.33.0 // indirect
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 // indirect
|
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 // indirect
|
||||||
|
58
go.sum
58
go.sum
@ -32,8 +32,6 @@ github.com/golang-migrate/migrate/v4 v4.17.0/go.mod h1:+Cp2mtLP4/aXDTKb9wmXYitdr
|
|||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
|
||||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
@ -45,6 +43,8 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
|
|||||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
|
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=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
|
github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
|
||||||
@ -80,8 +80,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
|
|||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
|
|
||||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
|
||||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
@ -105,25 +103,12 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
|
|||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
|
|
||||||
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
|
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
|
github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
|
||||||
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
|
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
|
||||||
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
|
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
|
||||||
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
|
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
|
||||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
|
||||||
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
|
||||||
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
|
||||||
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
|
||||||
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
|
||||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
|
|
||||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
|
||||||
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
|
|
||||||
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
|
|
||||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
@ -132,46 +117,21 @@ go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
|||||||
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
||||||
golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg=
|
golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg=
|
||||||
golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
|
golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
|
||||||
golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
|
golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
|
||||||
golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
|
||||||
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
||||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
|
||||||
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
|
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
|
||||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
|
||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
|
||||||
golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg=
|
golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg=
|
||||||
golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM=
|
golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
@ -187,17 +147,7 @@ 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-20240418145924-0bb104019522 h1:5QanVhIhGPhIHEe+Jx2SjrzWUPBvte8SBi2ISDumdrw=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419144125-64e45ebed8ae h1:FaV/RbCQaMZg48bzvMhNzzC4RtI3wQIPrMA0ZDl3jDA=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240418145924-0bb104019522/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419144125-64e45ebed8ae/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240418201438-ce2d4fedb918 h1:hM3KjidqfZPl64A77KogjN3qCyLOh3Ht3RE8CKA6wU0=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240418201438-ce2d4fedb918/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240418203530-3960a1a5d544 h1:5lmLOw1OJpbSO+SSuqYsVN3y/LX2MOZkv9BNr+xmLMk=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240418203530-3960a1a5d544/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419081911-630c321e514c h1:1lPPV9Ge5JGYCbg7jMkwYEm0YLVyfKJUuk+ppV0gJp4=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419081911-630c321e514c/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419083154-b6b37bac246c h1:kXwU/uWnnJPdnXXNSInFzTR/2IUFWp72yrA4cSFGDoI=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419083154-b6b37bac246c/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419085450-fa0a053add5c h1:kLHMXdQ2XcoPagMPSCkK2blrwGqwApECVy7PnN/5P24=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240419085450-fa0a053add5c/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo=
|
||||||
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I=
|
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I=
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/utils"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -39,8 +38,6 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
encrypt := utils.NewEncrypt(config.PubKey, config.PrivKey)
|
|
||||||
|
|
||||||
socialAithClient := pena_social_auth.NewClient(pena_social_auth.Deps{
|
socialAithClient := pena_social_auth.NewClient(pena_social_auth.Deps{
|
||||||
PenaSocialAuthURL: config.PenaSocialAuthURL,
|
PenaSocialAuthURL: config.PenaSocialAuthURL,
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
@ -56,7 +53,6 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
|||||||
RedirectionURL: config.ReturnURL,
|
RedirectionURL: config.ReturnURL,
|
||||||
IntegrationID: config.IntegrationID,
|
IntegrationID: config.IntegrationID,
|
||||||
IntegrationSecret: config.IntegrationSecret,
|
IntegrationSecret: config.IntegrationSecret,
|
||||||
AdminToken: config.AdminToken,
|
|
||||||
RateLimiter: rateLimiter,
|
RateLimiter: rateLimiter,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -65,7 +61,6 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
|||||||
Logger: logger,
|
Logger: logger,
|
||||||
SocialAuthClient: socialAithClient,
|
SocialAuthClient: socialAithClient,
|
||||||
AmoClient: amoClient,
|
AmoClient: amoClient,
|
||||||
Encrypt: encrypt,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
controller := controllers.NewController(controllers.Deps{
|
controller := controllers.NewController(controllers.Deps{
|
||||||
|
@ -34,7 +34,8 @@ func (c *Controller) Register(router fiber.Router) {
|
|||||||
router.Post("/account", c.ConnectAccount)
|
router.Post("/account", c.ConnectAccount)
|
||||||
router.Get("/steps", c.GettingStepsFromCash)
|
router.Get("/steps", c.GettingStepsFromCash)
|
||||||
router.Patch("/steps", c.UpdateListSteps)
|
router.Patch("/steps", c.UpdateListSteps)
|
||||||
router.Get("/webhook/create", c.WebhookCreate)
|
//todo поменять как было GET webhook/create
|
||||||
|
router.Get("/", c.WebhookCreate)
|
||||||
router.Get("/webhook/delete", c.WebhookDelete)
|
router.Get("/webhook/delete", c.WebhookDelete)
|
||||||
router.Patch("/pipelines", c.UpdateListPipelines)
|
router.Patch("/pipelines", c.UpdateListPipelines)
|
||||||
router.Get("/pipelines", c.GettingPipelinesFromCash)
|
router.Get("/pipelines", c.GettingPipelinesFromCash)
|
||||||
|
@ -63,10 +63,6 @@ func (c *Controller) GetCurrentAccount(ctx *fiber.Ctx) error {
|
|||||||
return ctx.Status(fiber.StatusOK).JSON(response)
|
return ctx.Status(fiber.StatusOK).JSON(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
// при запросе на этот контроллер приходит только токен из которого получаем id аккаунта в ис
|
|
||||||
// отдает ссылку на подключение к amocrm и создает модель в монге имеющую связь с аккаунтом
|
|
||||||
// в постгресе по accountid
|
|
||||||
// ссылку составляет сервис соц авторизации
|
|
||||||
func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error {
|
func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error {
|
||||||
accountID, ok := middleware.GetAccountId(ctx)
|
accountID, ok := middleware.GetAccountId(ctx)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"amocrm/internal/service"
|
"amocrm/internal/service"
|
||||||
|
"amocrm/internal/tools"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -20,15 +21,26 @@ func (c *Controller) WebhookCreate(ctx *fiber.Ctx) error {
|
|||||||
return ctx.Status(http.StatusForbidden).SendString("Access denied")
|
return ctx.Status(http.StatusForbidden).SendString("Access denied")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
accountID, err := tools.DeserializeProtobufMessage(state)
|
||||||
|
if err != nil {
|
||||||
|
c.logger.Error("error Deserialize Protobuf Message", zap.Error(err))
|
||||||
|
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
||||||
|
}
|
||||||
|
|
||||||
|
if accountID == nil {
|
||||||
|
c.logger.Error("error account id do not be nil", zap.Error(err))
|
||||||
|
return ctx.Status(fiber.StatusBadRequest).SendString("nil account id")
|
||||||
|
}
|
||||||
|
|
||||||
req := service.ParamsWebhookCreate{
|
req := service.ParamsWebhookCreate{
|
||||||
Code: code,
|
Code: code,
|
||||||
Referer: referer,
|
Referer: referer,
|
||||||
State: state,
|
AccountID: *accountID,
|
||||||
FromWidget: fromWidget,
|
FromWidget: fromWidget,
|
||||||
Platform: platform,
|
Platform: platform,
|
||||||
}
|
}
|
||||||
|
|
||||||
err := c.service.WebhookCreate(ctx.Context(), req)
|
err = c.service.WebhookCreate(ctx.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.logger.Error("error create webhook", zap.Error(err))
|
c.logger.Error("error create webhook", zap.Error(err))
|
||||||
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
||||||
|
@ -1,23 +1,36 @@
|
|||||||
package initialize
|
package initialize
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/caarlos0/env/v8"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AppName string `env:"APP_NAME" envDefault:"amocrm"`
|
AppName string `env:"APP_NAME" envDefault:"amocrm"`
|
||||||
HTTPHost string `env:"HTTP_HOST" envDefault:"localhost"`
|
HTTPHost string `env:"HTTP_HOST" envDefault:"10.8.0.18"`
|
||||||
HTTPPort string `env:"HTTP_PORT" envDefault:"3000"`
|
HTTPPort string `env:"HTTP_PORT" envDefault:"8001"`
|
||||||
PostgresCredentials string `env:"PG_CRED" envDefault:"host=localhost port=35432 user=squiz password=Redalert2 dbname=squiz sslmode=disable"`
|
PostgresCredentials string `env:"PG_CRED" envDefault:"host=localhost port=35432 user=squiz password=Redalert2 dbname=squiz sslmode=disable"`
|
||||||
PubKey string `env:"PUBLIC_KEY"`
|
|
||||||
PrivKey string `env:"PRIVATE_KEY"`
|
|
||||||
// урл в соц аус сервисе для генерации ссылки для авторизации в амо
|
// урл в соц аус сервисе для генерации ссылки для авторизации в амо
|
||||||
PenaSocialAuthURL string `env:"PENA_SOCIAL_AUTH_URL"`
|
PenaSocialAuthURL string `env:"PENA_SOCIAL_AUTH_URL" envDefault:"http://localhost:8000/amocrm/auth"`
|
||||||
// урл на который будет возвращен пользователь после авторизации это webhook/create get
|
// урл на который будет возвращен пользователь после авторизации это webhook/create get
|
||||||
ReturnURL string `env:"RETURN_URL"`
|
ReturnURL string `env:"RETURN_URL" envDefault:"https://squiz.pena.digital/squiz/amocrm/oauth"`
|
||||||
ApiURL string `env:"API_URL" envDefault:"https://example.amocrm.ru"`
|
ApiURL string `env:"API_URL" envDefault:"https://penadigitaltech.amocrm.ru"`
|
||||||
// id интеграции
|
// id интеграции
|
||||||
IntegrationID string `env:"INTEGRATION_ID"`
|
IntegrationID string `env:"INTEGRATION_ID" envDefault:"2dbd6329-9be6-41f2-aa5f-964b9e723e49"`
|
||||||
// секрет интеграции
|
// секрет интеграции
|
||||||
IntegrationSecret string `env:"INTEGRATION_SECRET"`
|
IntegrationSecret string `env:"INTEGRATION_SECRET" envDefault:"tNK3LwL4ovP0OBK4jKDHJ3646PqRJDOKQYgY6P2t6DCuV8LEzDzszTDY0Fhwmzc8"`
|
||||||
// uri о которому получать информацию о пользователе https://www.amocrm.ru/developers/content/crm_platform/account-info
|
// uri о которому получать информацию о пользователе https://www.amocrm.ru/developers/content/crm_platform/account-info
|
||||||
UserInfoURL string `env:"USER_INFO_URL"`
|
UserInfoURL string `env:"USER_INFO_URL" envDefault:"https://penadigitaltech.amocrm.ru/api/v4/account"`
|
||||||
// долгосрочный токен по которому осуществляется доступ к методам доступным только администратору аккаунта
|
}
|
||||||
AdminToken string `env:"ADMIN_TOKEN"`
|
|
||||||
|
func LoadConfig() (*Config, error) {
|
||||||
|
if err := godotenv.Load(); err != nil {
|
||||||
|
log.Print("No .env file found")
|
||||||
|
}
|
||||||
|
var config Config
|
||||||
|
if err := env.Parse(&config); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &config, nil
|
||||||
}
|
}
|
||||||
|
165
internal/proto/socialauth/models.pb.go
Normal file
165
internal/proto/socialauth/models.pb.go
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// protoc-gen-go v1.31.0
|
||||||
|
// protoc (unknown)
|
||||||
|
// source: social_auth/v1/models.proto
|
||||||
|
|
||||||
|
package socialauth
|
||||||
|
|
||||||
|
import (
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Verify that this generated code is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||||
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
|
)
|
||||||
|
|
||||||
|
type Message struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
State string `protobuf:"bytes,1,opt,name=State,proto3" json:"State,omitempty"`
|
||||||
|
ReturnURL string `protobuf:"bytes,2,opt,name=ReturnURL,proto3" json:"ReturnURL,omitempty"`
|
||||||
|
AccessToken *string `protobuf:"bytes,3,opt,name=AccessToken,proto3,oneof" json:"AccessToken,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Message) Reset() {
|
||||||
|
*x = Message{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_social_auth_v1_models_proto_msgTypes[0]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Message) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Message) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Message) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_social_auth_v1_models_proto_msgTypes[0]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Message.ProtoReflect.Descriptor instead.
|
||||||
|
func (*Message) Descriptor() ([]byte, []int) {
|
||||||
|
return file_social_auth_v1_models_proto_rawDescGZIP(), []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Message) GetState() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.State
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Message) GetReturnURL() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.ReturnURL
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Message) GetAccessToken() string {
|
||||||
|
if x != nil && x.AccessToken != nil {
|
||||||
|
return *x.AccessToken
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var File_social_auth_v1_models_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_social_auth_v1_models_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x1b, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31,
|
||||||
|
0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x73,
|
||||||
|
0x6f, 0x63, 0x69, 0x61, 0x6c, 0x61, 0x75, 0x74, 0x68, 0x22, 0x74, 0x0a, 0x07, 0x4d, 0x65, 0x73,
|
||||||
|
0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20,
|
||||||
|
0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65,
|
||||||
|
0x74, 0x75, 0x72, 0x6e, 0x55, 0x52, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x52,
|
||||||
|
0x65, 0x74, 0x75, 0x72, 0x6e, 0x55, 0x52, 0x4c, 0x12, 0x25, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65,
|
||||||
|
0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
|
||||||
|
0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x42,
|
||||||
|
0x0e, 0x0a, 0x0c, 0x5f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42,
|
||||||
|
0x0e, 0x5a, 0x0c, 0x2e, 0x2f, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x61, 0x75, 0x74, 0x68, 0x62,
|
||||||
|
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
file_social_auth_v1_models_proto_rawDescOnce sync.Once
|
||||||
|
file_social_auth_v1_models_proto_rawDescData = file_social_auth_v1_models_proto_rawDesc
|
||||||
|
)
|
||||||
|
|
||||||
|
func file_social_auth_v1_models_proto_rawDescGZIP() []byte {
|
||||||
|
file_social_auth_v1_models_proto_rawDescOnce.Do(func() {
|
||||||
|
file_social_auth_v1_models_proto_rawDescData = protoimpl.X.CompressGZIP(file_social_auth_v1_models_proto_rawDescData)
|
||||||
|
})
|
||||||
|
return file_social_auth_v1_models_proto_rawDescData
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_social_auth_v1_models_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
|
var file_social_auth_v1_models_proto_goTypes = []interface{}{
|
||||||
|
(*Message)(nil), // 0: socialauth.Message
|
||||||
|
}
|
||||||
|
var file_social_auth_v1_models_proto_depIdxs = []int32{
|
||||||
|
0, // [0:0] is the sub-list for method output_type
|
||||||
|
0, // [0:0] is the sub-list for method input_type
|
||||||
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_social_auth_v1_models_proto_init() }
|
||||||
|
func file_social_auth_v1_models_proto_init() {
|
||||||
|
if File_social_auth_v1_models_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !protoimpl.UnsafeEnabled {
|
||||||
|
file_social_auth_v1_models_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Message); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_social_auth_v1_models_proto_msgTypes[0].OneofWrappers = []interface{}{}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_social_auth_v1_models_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 1,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
GoTypes: file_social_auth_v1_models_proto_goTypes,
|
||||||
|
DependencyIndexes: file_social_auth_v1_models_proto_depIdxs,
|
||||||
|
MessageInfos: file_social_auth_v1_models_proto_msgTypes,
|
||||||
|
}.Build()
|
||||||
|
File_social_auth_v1_models_proto = out.File
|
||||||
|
file_social_auth_v1_models_proto_rawDesc = nil
|
||||||
|
file_social_auth_v1_models_proto_goTypes = nil
|
||||||
|
file_social_auth_v1_models_proto_depIdxs = nil
|
||||||
|
}
|
@ -1,27 +1,27 @@
|
|||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
//import (
|
||||||
"amocrm/internal/models"
|
// "amocrm/internal/models"
|
||||||
"context"
|
// "context"
|
||||||
)
|
//)
|
||||||
|
//
|
||||||
func (r *Repository) ChangeQuizSettings(ctx context.Context, request *models.RulesReq) error {
|
//func (r *Repository) ChangeQuizSettings(ctx context.Context, request *models.RulesReq) error {
|
||||||
//TODO:IMPLEMENT ME
|
// //TODO:IMPLEMENT ME
|
||||||
|
//
|
||||||
return nil
|
// return nil
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (r *Repository) SetQuizSettings(ctx context.Context, request *models.RulesReq) error {
|
//func (r *Repository) SetQuizSettings(ctx context.Context, request *models.RulesReq) error {
|
||||||
//TODO:IMPLEMENT ME
|
// //TODO:IMPLEMENT ME
|
||||||
|
//
|
||||||
return nil
|
// return nil
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
func (r *Repository) GettingQuizRules(ctx context.Context) (*models.Rule, error) {
|
//func (r *Repository) GettingQuizRules(ctx context.Context) (*models.Rule, error) {
|
||||||
//TODO:IMPLEMENT ME
|
// //TODO:IMPLEMENT ME
|
||||||
|
//
|
||||||
return &models.Rule{}, nil
|
// return &models.Rule{}, nil
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
@ -1,132 +1,121 @@
|
|||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
//// test +
|
||||||
"amocrm/internal/models"
|
//func (r *Repository) DeletingUserUtm(ctx context.Context, request *model.ListDeleteUTMIDsReq) error {
|
||||||
"context"
|
// var objIDs []primitive.ObjectID
|
||||||
"fmt"
|
//
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
// for _, id := range request.Utms {
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
// objID, err := primitive.ObjectIDFromHex(id)
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
// if err != nil {
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
// return err
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
// }
|
||||||
)
|
// objIDs = append(objIDs, objID)
|
||||||
|
// }
|
||||||
// test +
|
//
|
||||||
func (r *Repository) DeletingUserUtm(ctx context.Context, request *model.ListDeleteUTMIDsReq) error {
|
// filter := bson.M{"_id": bson.M{"$in": objIDs}}
|
||||||
var objIDs []primitive.ObjectID
|
//
|
||||||
|
// update := bson.M{"$set": bson.M{"Deleted": true}}
|
||||||
for _, id := range request.Utms {
|
//
|
||||||
objID, err := primitive.ObjectIDFromHex(id)
|
// _, err := r.utms.UpdateMany(ctx, filter, update)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
objIDs = append(objIDs, objID)
|
//
|
||||||
}
|
// return nil
|
||||||
|
//}
|
||||||
filter := bson.M{"_id": bson.M{"$in": objIDs}}
|
//
|
||||||
|
//// test +
|
||||||
update := bson.M{"$set": bson.M{"Deleted": true}}
|
//func (r *Repository) SavingUserUtm(ctx context.Context, request *models.SaveUserListUTMReq, accountID string, quizID int) (*models.ListSavedIDUTMResp, error) {
|
||||||
|
// opts := make([]mongo.WriteModel, 0)
|
||||||
_, err := r.utms.UpdateMany(ctx, filter, update)
|
//
|
||||||
if err != nil {
|
// filter := bson.M{
|
||||||
return err
|
// "ID": accountID,
|
||||||
}
|
// "QuizID": quizID,
|
||||||
|
// }
|
||||||
return nil
|
//
|
||||||
}
|
// cursor, err := r.utms.Find(ctx, filter)
|
||||||
|
// if err != nil {
|
||||||
// test +
|
// return nil, err
|
||||||
func (r *Repository) SavingUserUtm(ctx context.Context, request *models.SaveUserListUTMReq, accountID string, quizID int) (*models.ListSavedIDUTMResp, error) {
|
// }
|
||||||
opts := make([]mongo.WriteModel, 0)
|
// defer cursor.Close(ctx)
|
||||||
|
//
|
||||||
filter := bson.M{
|
// existingUtms := make(map[string]bool)
|
||||||
"ID": accountID,
|
// for cursor.Next(ctx) {
|
||||||
"QuizID": quizID,
|
// var utm models.UTM
|
||||||
}
|
// if err := cursor.Decode(&utm); err != nil {
|
||||||
|
// fmt.Println(err)
|
||||||
cursor, err := r.utms.Find(ctx, filter)
|
// return nil, err
|
||||||
if err != nil {
|
// }
|
||||||
return nil, err
|
// existingUtms[utm.Name] = true
|
||||||
}
|
// }
|
||||||
defer cursor.Close(ctx)
|
//
|
||||||
|
// resp := &models.ListSavedIDUTMResp{
|
||||||
existingUtms := make(map[string]bool)
|
// Ids: []string{},
|
||||||
for cursor.Next(ctx) {
|
// }
|
||||||
var utm models.UTM
|
//
|
||||||
if err := cursor.Decode(&utm); err != nil {
|
// for _, utm := range request.Utms {
|
||||||
fmt.Println(err)
|
// if !existingUtms[utm.Name] {
|
||||||
return nil, err
|
// objID := primitive.NewObjectID()
|
||||||
}
|
// resp.Ids = append(resp.Ids, objID.Hex())
|
||||||
existingUtms[utm.Name] = true
|
// opts = append(opts, mongo.NewInsertOneModel().SetDocument(
|
||||||
}
|
// bson.M{
|
||||||
|
// "_id": objID,
|
||||||
resp := &models.ListSavedIDUTMResp{
|
// "Name": utm.Name,
|
||||||
Ids: []string{},
|
// "QuizID": quizID,
|
||||||
}
|
// "AccountID": utm.Accountid,
|
||||||
|
// "AmoFieldID": utm.Amofieldid,
|
||||||
for _, utm := range request.Utms {
|
// "CreatedAt": utm.Createdat,
|
||||||
if !existingUtms[utm.Name] {
|
// "Deleted": utm.Deleted,
|
||||||
objID := primitive.NewObjectID()
|
// "ID": accountID,
|
||||||
resp.Ids = append(resp.Ids, objID.Hex())
|
// },
|
||||||
opts = append(opts, mongo.NewInsertOneModel().SetDocument(
|
// ))
|
||||||
bson.M{
|
// }
|
||||||
"_id": objID,
|
// }
|
||||||
"Name": utm.Name,
|
//
|
||||||
"QuizID": quizID,
|
// if len(opts) == 0 {
|
||||||
"AccountID": utm.Accountid,
|
// return resp, nil
|
||||||
"AmoFieldID": utm.Amofieldid,
|
// }
|
||||||
"CreatedAt": utm.Createdat,
|
//
|
||||||
"Deleted": utm.Deleted,
|
// _, err = r.utms.BulkWrite(ctx, opts)
|
||||||
"ID": accountID,
|
// if err != nil {
|
||||||
},
|
// return nil, err
|
||||||
))
|
// }
|
||||||
}
|
//
|
||||||
}
|
// return resp, nil
|
||||||
|
//}
|
||||||
if len(opts) == 0 {
|
//
|
||||||
return resp, nil
|
//// test +
|
||||||
}
|
//func (r *Repository) GettingUserUtm(ctx context.Context, request *models.PaginationReq, accountID string, quizID int) (*models.GetListUserUTMResp, error) {
|
||||||
|
// offset := (request.Page - 1) * request.Size
|
||||||
_, err = r.utms.BulkWrite(ctx, opts)
|
//
|
||||||
if err != nil {
|
// totalUTMS, err := r.utms.CountDocuments(ctx, bson.M{"Deleted": false, "ID": accountID, "QuizID": quizID})
|
||||||
return nil, err
|
// if err != nil {
|
||||||
}
|
// return nil, err
|
||||||
|
// }
|
||||||
return resp, nil
|
//
|
||||||
}
|
// var utms []models.UTM
|
||||||
|
//
|
||||||
// test +
|
// cursor, err := r.utms.Find(ctx, bson.M{"Deleted": false, "ID": accountID, "QuizID": quizID}, options.Find().SetLimit(int64(request.Size)).SetSkip(int64(offset)))
|
||||||
func (r *Repository) GettingUserUtm(ctx context.Context, request *models.PaginationReq, accountID string, quizID int) (*models.GetListUserUTMResp, error) {
|
// if err != nil {
|
||||||
offset := (request.Page - 1) * request.Size
|
// return nil, err
|
||||||
|
// }
|
||||||
totalUTMS, err := r.utms.CountDocuments(ctx, bson.M{"Deleted": false, "ID": accountID, "QuizID": quizID})
|
// defer cursor.Close(ctx)
|
||||||
if err != nil {
|
//
|
||||||
return nil, err
|
// for cursor.Next(ctx) {
|
||||||
}
|
// var utm models.UTM
|
||||||
|
// if err := cursor.Decode(&utm); err != nil {
|
||||||
var utms []models.UTM
|
// return nil, err
|
||||||
|
// }
|
||||||
cursor, err := r.utms.Find(ctx, bson.M{"Deleted": false, "ID": accountID, "QuizID": quizID}, options.Find().SetLimit(int64(request.Size)).SetSkip(int64(offset)))
|
// utms = append(utms, utm)
|
||||||
if err != nil {
|
// }
|
||||||
return nil, err
|
// if err := cursor.Err(); err != nil {
|
||||||
}
|
// return nil, err
|
||||||
defer cursor.Close(ctx)
|
// }
|
||||||
|
//
|
||||||
for cursor.Next(ctx) {
|
// utmListResp := &models.GetListUserUTMResp{
|
||||||
var utm models.UTM
|
// Count: totalUTMS,
|
||||||
if err := cursor.Decode(&utm); err != nil {
|
// Items: utms,
|
||||||
return nil, err
|
// }
|
||||||
}
|
//
|
||||||
utms = append(utms, utm)
|
// return utmListResp, nil
|
||||||
}
|
//}
|
||||||
if err := cursor.Err(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
utmListResp := &models.GetListUserUTMResp{
|
|
||||||
Count: totalUTMS,
|
|
||||||
Items: utms,
|
|
||||||
}
|
|
||||||
|
|
||||||
return utmListResp, nil
|
|
||||||
}
|
|
||||||
|
@ -3,8 +3,6 @@ package http
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -19,7 +17,7 @@ type Server struct {
|
|||||||
|
|
||||||
func NewServer(config ServerConfig) *Server {
|
func NewServer(config ServerConfig) *Server {
|
||||||
app := fiber.New()
|
app := fiber.New()
|
||||||
app.Use(middleware.JWTAuth())
|
//app.Use(middleware.JWTAuth())
|
||||||
|
|
||||||
s := &Server{
|
s := &Server{
|
||||||
Controllers: config.Controllers,
|
Controllers: config.Controllers,
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
pena_social_auth "amocrm/pkg/pena-social-auth"
|
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/utils"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Deps struct {
|
type Deps struct {
|
||||||
@ -13,7 +12,6 @@ type Deps struct {
|
|||||||
Logger *zap.Logger
|
Logger *zap.Logger
|
||||||
SocialAuthClient *pena_social_auth.Client
|
SocialAuthClient *pena_social_auth.Client
|
||||||
AmoClient *amoClient.Amo
|
AmoClient *amoClient.Amo
|
||||||
Encrypt *utils.Encrypt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
@ -21,7 +19,6 @@ type Service struct {
|
|||||||
logger *zap.Logger
|
logger *zap.Logger
|
||||||
socialAuthClient *pena_social_auth.Client
|
socialAuthClient *pena_social_auth.Client
|
||||||
amoClient *amoClient.Amo
|
amoClient *amoClient.Amo
|
||||||
encrypt *utils.Encrypt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewService(deps Deps) *Service {
|
func NewService(deps Deps) *Service {
|
||||||
@ -30,6 +27,5 @@ func NewService(deps Deps) *Service {
|
|||||||
logger: deps.Logger,
|
logger: deps.Logger,
|
||||||
socialAuthClient: deps.SocialAuthClient,
|
socialAuthClient: deps.SocialAuthClient,
|
||||||
amoClient: deps.AmoClient,
|
amoClient: deps.AmoClient,
|
||||||
encrypt: deps.Encrypt,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||||
)
|
)
|
||||||
@ -61,13 +62,9 @@ func (s *Service) ConnectAccount(ctx context.Context, accountID string) (*model.
|
|||||||
// return nil, err
|
// return nil, err
|
||||||
//}
|
//}
|
||||||
|
|
||||||
shifr, err := s.encrypt.EncryptStr(accountID)
|
fmt.Println("AAAAAAAAAAAAAAAAA")
|
||||||
if err != nil {
|
|
||||||
s.logger.Error("error encrypted account id in service ConnectAccount:", zap.Error(err))
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
link, err := s.socialAuthClient.GenerateAmocrmAuthURL(string(shifr))
|
link, err := s.socialAuthClient.GenerateAmocrmAuthURL(accountID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("error sending request to pena social auth service:", zap.Error(err))
|
s.logger.Error("error sending request to pena social auth service:", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
@ -12,18 +12,12 @@ import (
|
|||||||
type ParamsWebhookCreate struct {
|
type ParamsWebhookCreate struct {
|
||||||
Code string // Authorization 20 минут
|
Code string // Authorization 20 минут
|
||||||
Referer string // адрес аккаунта пользователя
|
Referer string // адрес аккаунта пользователя
|
||||||
State string // строка которая передавалась в соц аус сервисе
|
AccountID string // строка которая передавалась в соц аус сервисе
|
||||||
FromWidget string
|
FromWidget string
|
||||||
Platform string // ru/global 1/2
|
Platform string // ru/global 1/2
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) error {
|
func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) error {
|
||||||
accountID, err := s.encrypt.DecryptStr([]byte(req.State))
|
|
||||||
if err != nil {
|
|
||||||
s.logger.Error("error decrypted state in service WebhookCreate:", zap.Error(err))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// получаем аксес и рефреш токены по коду авторизации
|
// получаем аксес и рефреш токены по коду авторизации
|
||||||
forGetTokens := models.CreateWebHookReq{
|
forGetTokens := models.CreateWebHookReq{
|
||||||
GrantType: "authorization_code",
|
GrantType: "authorization_code",
|
||||||
@ -43,25 +37,19 @@ func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) er
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
userInfoByID, err := s.amoClient.GetUserByID(userInfo.ID)
|
|
||||||
if err != nil {
|
|
||||||
s.logger.Error("error getting GetUserByID in Service:", zap.Error(err))
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
toUpdate := model.User{
|
toUpdate := model.User{
|
||||||
Name: userInfoByID.Name,
|
Name: userInfo.Name,
|
||||||
Subdomain: userInfo.Subdomain,
|
Subdomain: userInfo.Subdomain,
|
||||||
AmoID: userInfo.ID,
|
AmoID: userInfo.ID,
|
||||||
// todo понять какой пользователь считается подключившим
|
// подключивший юзер считается тот который прокинул хук сюда
|
||||||
Amouserid: userInfo.ID,
|
Amouserid: userInfo.ID,
|
||||||
Email: userInfoByID.Email,
|
//Email: userInfoByID.Email,
|
||||||
Group: tools.ConvertUserGroups(userInfo),
|
Group: tools.ConvertUserGroups(userInfo),
|
||||||
Country: userInfo.Country,
|
Country: userInfo.Country,
|
||||||
Role: *userInfoByID.Role,
|
//Role: *userInfoByID.Role,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.repository.AmoRepo.CreateAccount(ctx, accountID, toUpdate)
|
err = s.repository.AmoRepo.CreateAccount(ctx, req.AccountID, toUpdate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.logger.Error("error update account in mongo on service WebhookCreate", zap.Error(err))
|
s.logger.Error("error update account in mongo on service WebhookCreate", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
@ -70,7 +58,7 @@ func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) er
|
|||||||
err = s.repository.AmoRepo.WebhookCreate(ctx, model.Token{
|
err = s.repository.AmoRepo.WebhookCreate(ctx, model.Token{
|
||||||
RefreshToken: tokens.RefreshToken,
|
RefreshToken: tokens.RefreshToken,
|
||||||
AccessToken: tokens.AccessToken,
|
AccessToken: tokens.AccessToken,
|
||||||
AccountID: accountID,
|
AccountID: req.AccountID,
|
||||||
AuthCode: req.Code,
|
AuthCode: req.Code,
|
||||||
Expiration: time.Now().Unix() + tokens.ExpiresIn,
|
Expiration: time.Now().Unix() + tokens.ExpiresIn,
|
||||||
CreatedAt: time.Now().Unix(),
|
CreatedAt: time.Now().Unix(),
|
||||||
|
17
internal/tools/proto.go
Normal file
17
internal/tools/proto.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"amocrm/internal/proto/socialauth"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DeserializeProtobufMessage(protobufMessage string) (*string, error) {
|
||||||
|
msg := socialauth.Message{}
|
||||||
|
|
||||||
|
err := proto.Unmarshal([]byte(protobufMessage), &msg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return msg.AccessToken, nil
|
||||||
|
}
|
@ -49,17 +49,19 @@ func (wc *DataUpdater) Start(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (wc *DataUpdater) processTasks(ctx context.Context) {
|
func (wc *DataUpdater) processTasks(ctx context.Context) {
|
||||||
// обновляем информацию о пользователях
|
|
||||||
err := wc.UserUpdater(ctx)
|
|
||||||
if err != nil {
|
|
||||||
wc.logger.Error("some error from UserUpdater", zap.Error(err))
|
|
||||||
}
|
|
||||||
// сначала получаем список токенов
|
// сначала получаем список токенов
|
||||||
allTokens, err := wc.repo.AmoRepo.GetAllTokens(ctx)
|
allTokens, err := wc.repo.AmoRepo.GetAllTokens(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wc.logger.Error("error fetch all tokens from mongo:", zap.Error(err))
|
wc.logger.Error("error fetch all tokens from mongo:", zap.Error(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// обновляем информацию о пользователях
|
||||||
|
err = wc.UserUpdater(ctx, allTokens)
|
||||||
|
if err != nil {
|
||||||
|
wc.logger.Error("some error from UserUpdater", zap.Error(err))
|
||||||
|
}
|
||||||
|
|
||||||
for _, token := range allTokens {
|
for _, token := range allTokens {
|
||||||
// pipelines
|
// pipelines
|
||||||
pipelines, err := wc.amoClient.GetListPipelines(token.AccessToken)
|
pipelines, err := wc.amoClient.GetListPipelines(token.AccessToken)
|
||||||
@ -227,41 +229,47 @@ func (wc *DataUpdater) processTasks(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *DataUpdater) UserUpdater(ctx context.Context) error {
|
func (wc *DataUpdater) UserUpdater(ctx context.Context, allTokens []model.Token) error {
|
||||||
var listUser []models.Users
|
var listUser []models.Users
|
||||||
page := 1
|
for _, token := range allTokens {
|
||||||
limit := 250
|
page := 1
|
||||||
for {
|
limit := 250
|
||||||
userData, err := wc.amoClient.GetUserList(models.RequestGetListUsers{
|
for {
|
||||||
Page: page,
|
userData, err := wc.amoClient.GetUserList(models.RequestGetListUsers{
|
||||||
Limit: limit,
|
Page: page,
|
||||||
})
|
Limit: limit,
|
||||||
if err != nil {
|
}, token.AccessToken)
|
||||||
wc.logger.Error("error getting user list", zap.Error(err))
|
if err != nil {
|
||||||
break
|
wc.logger.Error("error getting user list", zap.Error(err))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if userData == nil || len(userData.Embedded.Users) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
listUser = append(listUser, userData.Embedded.Users...)
|
||||||
|
|
||||||
|
page++
|
||||||
}
|
}
|
||||||
|
|
||||||
if userData == nil || len(userData.Embedded.Users) == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
listUser = append(listUser, userData.Embedded.Users...)
|
|
||||||
|
|
||||||
page++
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, user := range listUser {
|
for _, user := range listUser {
|
||||||
onlyOneUser, err := wc.amoClient.GetUserByID(user.ID)
|
//onlyOneUser, err := wc.amoClient.GetUserByID(user.ID)
|
||||||
if err != nil {
|
//if err != nil {
|
||||||
wc.logger.Error("error getting user by id", zap.Error(err))
|
// wc.logger.Error("error getting user by id", zap.Error(err))
|
||||||
continue
|
// continue
|
||||||
}
|
//}
|
||||||
err = wc.repo.AmoRepo.CheckUsers(ctx, user.ID, model.User{
|
err := wc.repo.AmoRepo.CheckUsers(ctx, user.ID, model.User{
|
||||||
Name: onlyOneUser.Name,
|
Name: user.Name,
|
||||||
Group: tools.ConvertGroups(user),
|
Group: tools.ConvertGroups(user),
|
||||||
Role: *onlyOneUser.Role,
|
Role: "todo",
|
||||||
Email: onlyOneUser.Email,
|
Email: user.Email,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -19,7 +19,6 @@ type Amo struct {
|
|||||||
redirectionURL string
|
redirectionURL string
|
||||||
integrationID string
|
integrationID string
|
||||||
integrationSecret string
|
integrationSecret string
|
||||||
adminToken string
|
|
||||||
rateLimiter *RateLimiter
|
rateLimiter *RateLimiter
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +30,6 @@ type AmoDeps struct {
|
|||||||
RedirectionURL string
|
RedirectionURL string
|
||||||
IntegrationID string
|
IntegrationID string
|
||||||
IntegrationSecret string
|
IntegrationSecret string
|
||||||
AdminToken string
|
|
||||||
RateLimiter *RateLimiter
|
RateLimiter *RateLimiter
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,20 +45,19 @@ func NewAmoClient(deps AmoDeps) *Amo {
|
|||||||
redirectionURL: deps.RedirectionURL,
|
redirectionURL: deps.RedirectionURL,
|
||||||
integrationSecret: deps.IntegrationSecret,
|
integrationSecret: deps.IntegrationSecret,
|
||||||
integrationID: deps.IntegrationID,
|
integrationID: deps.IntegrationID,
|
||||||
adminToken: deps.AdminToken,
|
|
||||||
rateLimiter: deps.RateLimiter,
|
rateLimiter: deps.RateLimiter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// токен должен быть с правами администратора
|
// токен должен быть с правами администратора
|
||||||
// https://www.amocrm.ru/developers/content/crm_platform/users-api#users-list
|
// https://www.amocrm.ru/developers/content/crm_platform/users-api#users-list
|
||||||
func (a *Amo) GetUserList(req models.RequestGetListUsers) (*models.ResponseGetListUsers, error) {
|
func (a *Amo) GetUserList(req models.RequestGetListUsers, accesToken string) (*models.ResponseGetListUsers, error) {
|
||||||
for {
|
for {
|
||||||
if a.rateLimiter.Check() {
|
if a.rateLimiter.Check() {
|
||||||
uri := fmt.Sprintf("%s/api/v4/users?page=%d&limit=%d&with=role,group,uuid", a.baseApiURL, req.Page, req.Limit)
|
uri := fmt.Sprintf("%s/api/v4/users?page=%d&limit=%d&with=role,group,uuid", a.baseApiURL, req.Page, req.Limit)
|
||||||
|
|
||||||
agent := a.fiberClient.Get(uri)
|
agent := a.fiberClient.Get(uri)
|
||||||
agent.Set("Authorization", "Bearer "+a.adminToken)
|
agent.Set("Authorization", "Bearer "+accesToken)
|
||||||
|
|
||||||
statusCode, resBody, errs := agent.Bytes()
|
statusCode, resBody, errs := agent.Bytes()
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
@ -318,42 +315,6 @@ func (a *Amo) GetUserInfo(accessToken string) (*models.AmocrmUserInformation, er
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// токен должен быть с правами администратора
|
|
||||||
// https://www.amocrm.ru/developers/content/crm_platform/users-api#user-detail
|
|
||||||
// GET /api/v4/users/{id
|
|
||||||
func (a *Amo) GetUserByID(id int32) (*models.OneUserInfo, error) {
|
|
||||||
for {
|
|
||||||
if a.rateLimiter.Check() {
|
|
||||||
uri := fmt.Sprintf("%s/api/v4/users/%d?with=role,uuid", a.baseApiURL, id)
|
|
||||||
agent := a.fiberClient.Get(uri)
|
|
||||||
agent.Set("Authorization", "Bearer "+a.adminToken)
|
|
||||||
statusCode, resBody, errs := agent.Bytes()
|
|
||||||
if len(errs) > 0 {
|
|
||||||
for _, err := range errs {
|
|
||||||
a.logger.Error("error sending request in GetUserByID", zap.Error(err))
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("request GetUserByID failed: %v", errs[0])
|
|
||||||
}
|
|
||||||
|
|
||||||
if statusCode != fiber.StatusOK {
|
|
||||||
errorMessage := fmt.Sprintf("received an incorrect response from GetUserByID:%s", string(resBody))
|
|
||||||
a.logger.Error(errorMessage, zap.Int("status", statusCode))
|
|
||||||
return nil, fmt.Errorf(errorMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
var userInfo models.OneUserInfo
|
|
||||||
err := json.Unmarshal(resBody, &userInfo)
|
|
||||||
if err != nil {
|
|
||||||
a.logger.Error("error unmarshal OneUserInfo:", zap.Error(err))
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &userInfo, nil
|
|
||||||
}
|
|
||||||
time.Sleep(a.rateLimiter.interval)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://www.amocrm.ru/developers/content/crm_platform/leads_pipelines#%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%B2%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%BE%D0%BA
|
// https://www.amocrm.ru/developers/content/crm_platform/leads_pipelines#%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%B2%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%BE%D0%BA
|
||||||
// GET /api/v4/leads/pipelines
|
// GET /api/v4/leads/pipelines
|
||||||
func (a *Amo) GetListPipelines(accessToken string) (*models.PipelineResponse, error) {
|
func (a *Amo) GetListPipelines(accessToken string) (*models.PipelineResponse, error) {
|
||||||
@ -388,3 +349,39 @@ func (a *Amo) GetListPipelines(accessToken string) (*models.PipelineResponse, er
|
|||||||
time.Sleep(a.rateLimiter.interval)
|
time.Sleep(a.rateLimiter.interval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// токен должен быть с правами администратора
|
||||||
|
// https://www.amocrm.ru/developers/content/crm_platform/users-api#user-detail
|
||||||
|
// GET /api/v4/users/{id
|
||||||
|
func (a *Amo) GetUserByID(id int32, accessToken string) (*models.OneUserInfo, error) {
|
||||||
|
for {
|
||||||
|
if a.rateLimiter.Check() {
|
||||||
|
uri := fmt.Sprintf("%s/api/v4/users/%d?with=role,uuid", a.baseApiURL, id)
|
||||||
|
agent := a.fiberClient.Get(uri)
|
||||||
|
agent.Set("Authorization", "Bearer "+accessToken)
|
||||||
|
statusCode, resBody, errs := agent.Bytes()
|
||||||
|
if len(errs) > 0 {
|
||||||
|
for _, err := range errs {
|
||||||
|
a.logger.Error("error sending request in GetUserByID", zap.Error(err))
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("request GetUserByID failed: %v", errs[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if statusCode != fiber.StatusOK {
|
||||||
|
errorMessage := fmt.Sprintf("received an incorrect response from GetUserByID:%s", string(resBody))
|
||||||
|
a.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||||
|
return nil, fmt.Errorf(errorMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
var userInfo models.OneUserInfo
|
||||||
|
err := json.Unmarshal(resBody, &userInfo)
|
||||||
|
if err != nil {
|
||||||
|
a.logger.Error("error unmarshal OneUserInfo:", zap.Error(err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &userInfo, nil
|
||||||
|
}
|
||||||
|
time.Sleep(a.rateLimiter.interval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -40,9 +40,9 @@ type GenAuthURLResp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// todo добавить state в этот запрос тут и в соц аус сервисе
|
// todo добавить state в этот запрос тут и в соц аус сервисе
|
||||||
func (c *Client) GenerateAmocrmAuthURL(state string) (string, error) {
|
func (c *Client) GenerateAmocrmAuthURL(accountID string) (string, error) {
|
||||||
url := c.penaSocialAuthURL + "?accessToken=" + "" + "&returnUrl=" + c.returnURL
|
url := c.penaSocialAuthURL + "?accessToken=" + accountID + "&returnUrl=" + c.returnURL
|
||||||
|
fmt.Println(url)
|
||||||
statusCode, resp, errs := c.fiberClient.Get(url).Bytes()
|
statusCode, resp, errs := c.fiberClient.Get(url).Bytes()
|
||||||
if len(errs) > 0 {
|
if len(errs) > 0 {
|
||||||
for _, err := range errs {
|
for _, err := range errs {
|
||||||
|
Loading…
Reference in New Issue
Block a user