Compare commits
25 Commits
optimize_c
...
main
Author | SHA1 | Date | |
---|---|---|---|
ded9befb35 | |||
68c6e25260 | |||
a831c5c316 | |||
a19ebea5ec | |||
7de5821692 | |||
bd307dcddf | |||
![]() |
54b558636c | ||
0e13df1f83 | |||
df757e097b | |||
a7596ff33d | |||
75870273bd | |||
b375f8dbbc | |||
c29636f2d3 | |||
8f8ab4aa0f | |||
1a0da95d1d | |||
c138e94c61 | |||
f3f3c05ed7 | |||
42a11924c1 | |||
266e5f0487 | |||
de874994b9 | |||
51510cd655 | |||
37f4b69948 | |||
437b74d748 | |||
ab5a751786 | |||
ef6cd11e86 |
26
.gitea/workflows/deployProd.yml
Normal file
26
.gitea/workflows/deployProd.yml
Normal file
@ -0,0 +1,26 @@
|
||||
name: Deploy
|
||||
run-name: ${{ gitea.actor }} build image and push to container registry
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
|
||||
jobs:
|
||||
CreateImage:
|
||||
runs-on: [squizstaging]
|
||||
uses: https://gitea.pena/PenaDevops/actions.git/.gitea/workflows/build-image.yml@v1.1.6-p
|
||||
with:
|
||||
runner: hubstaging
|
||||
secrets:
|
||||
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
DeployService:
|
||||
runs-on: [squizprod]
|
||||
needs: CreateImage
|
||||
uses: https://gitea.pena/PenaDevops/actions.git/.gitea/workflows/deploy.yml@v1.1.4-p7
|
||||
with:
|
||||
runner: hubprod
|
||||
actionid: ${{ gitea.run_id }}
|
||||
|
||||
|
26
.gitea/workflows/deployStaging.yml
Normal file
26
.gitea/workflows/deployStaging.yml
Normal file
@ -0,0 +1,26 @@
|
||||
name: Deploy
|
||||
run-name: ${{ gitea.actor }} build image and push to container registry
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'staging'
|
||||
|
||||
jobs:
|
||||
CreateImage:
|
||||
runs-on: [hubstaging]
|
||||
uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/build-image.yml@v1.1.6-p
|
||||
with:
|
||||
runner: hubstaging
|
||||
secrets:
|
||||
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
|
||||
DeployService:
|
||||
runs-on: [hubstaging]
|
||||
needs: CreateImage
|
||||
uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/deploy.yml@v1.1.4-p7
|
||||
with:
|
||||
runner: hubstaging
|
||||
actionid: ${{ gitea.run_id }}
|
||||
|
||||
|
14
.gitea/workflows/lint.yml
Normal file
14
.gitea/workflows/lint.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Lint
|
||||
run-name: ${{ gitea.actor }} produce linting
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'dev'
|
||||
|
||||
jobs:
|
||||
Lint:
|
||||
runs-on: [hubstaging]
|
||||
uses: http://gitea.pena/PenaDevops/actions.git/.gitea/workflows/lint.yml@v1.1.0
|
||||
with:
|
||||
runner: hubstaging
|
13
Dockerfile
13
Dockerfile
@ -1,16 +1,11 @@
|
||||
FROM dockerhub.timeweb.cloud/golang:alpine as build
|
||||
FROM gitea.pena/penadevops/container-images/golang:main as build
|
||||
WORKDIR /app
|
||||
RUN apk add git
|
||||
COPY . .
|
||||
ARG GITLAB_TOKEN
|
||||
ENV GOPRIVATE=penahub.gitlab.yandexcloud.net/backend/penahub_common
|
||||
RUN git config --global url."https://buildToken:glpat-axA8ttckx3aPf_xd2Dym@penahub.gitlab.yandexcloud.net/".insteadOf "https://penahub.gitlab.yandexcloud.net/"
|
||||
RUN go mod download
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o amocrm ./cmd/main.go
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o token_refresher ./cmd/tokens/main.go
|
||||
|
||||
FROM penahub.gitlab.yandexcloud.net:5050/devops/dockerhub-backup/alpine as prod
|
||||
FROM gitea.pena/penadevops/container-images/alpine:main as prod
|
||||
COPY --from=build /app/amocrm .
|
||||
EXPOSE 1488
|
||||
ENV IS_PROD_LOG=false
|
||||
ENV IS_PROD=false
|
||||
COPY --from=build /app/token_refresher .
|
||||
CMD ["/amocrm"]
|
||||
|
@ -1,18 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"amocrm/internal/initialize"
|
||||
"context"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/initialize"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"amocrm/internal/app"
|
||||
"gitea.pena/SQuiz/amocrm/internal/app"
|
||||
|
||||
"go.uber.org/zap"
|
||||
// import for automatically updating linter rules
|
||||
_ "penahub.gitlab.yandexcloud.net/devops/linters/golang.git/pkg/dummy"
|
||||
_ "gitea.pena/PenaSide/linters-golang/pkg/dummy"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
94
cmd/tokens/main.go
Normal file
94
cmd/tokens/main.go
Normal file
@ -0,0 +1,94 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/cmd/tokens/refresh_wc"
|
||||
"gitea.pena/SQuiz/amocrm/internal/initialize"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/limiter"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/closer"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"go.uber.org/zap"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
logger, err := zap.NewProduction()
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to initialize logger: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
logger = logger.Named("REFRESH_WC")
|
||||
|
||||
config, err := initialize.LoadConfig()
|
||||
if err != nil {
|
||||
logger.Fatal("Failed to load config", zap.Error(err))
|
||||
}
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
if err = run(ctx, logger, *config); err != nil {
|
||||
logger.Fatal("App exited with error", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
func run(ctx context.Context, logger *zap.Logger, cfg initialize.Config) error {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logger.Error("Recovered in app from a panic", zap.Any("error", r))
|
||||
}
|
||||
}()
|
||||
|
||||
shutdownGroup := closer.NewCloserGroup()
|
||||
|
||||
amoRepo, err := dal.NewAmoDal(ctx, cfg.PostgresCredentials)
|
||||
if err != nil {
|
||||
logger.Error("error init amo repo", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
rateLimiter := limiter.NewRateLimiter(ctx, 6, 1500*time.Millisecond)
|
||||
|
||||
amoCl := amoClient.NewAmoClient(amoClient.AmoDeps{
|
||||
Logger: logger,
|
||||
RedirectionURL: cfg.ReturnURL,
|
||||
IntegrationID: cfg.IntegrationID,
|
||||
IntegrationSecret: cfg.IntegrationSecret,
|
||||
RateLimiter: rateLimiter,
|
||||
})
|
||||
|
||||
refreshWC := refresh_wc.NewRefreshWC(refresh_wc.Deps{
|
||||
Logger: logger,
|
||||
AmoClient: amoCl,
|
||||
Repo: amoRepo,
|
||||
})
|
||||
|
||||
go refreshWC.Start(ctx)
|
||||
|
||||
shutdownGroup.Add(closer.CloserFunc(amoRepo.Close))
|
||||
shutdownGroup.Add(closer.CloserFunc(rateLimiter.Stop))
|
||||
shutdownGroup.Add(closer.CloserFunc(refreshWC.Stop))
|
||||
|
||||
<-ctx.Done()
|
||||
|
||||
timeoutCtx, timeoutCancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer timeoutCancel()
|
||||
if err := shutdownGroup.Call(timeoutCtx); err != nil {
|
||||
if errors.Is(err, context.DeadlineExceeded) {
|
||||
logger.Error("Shutdown timed out", zap.Error(err))
|
||||
} else {
|
||||
logger.Error("Failed to shutdown services gracefully", zap.Error(err))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
logger.Info("Application has stopped")
|
||||
return nil
|
||||
}
|
94
cmd/tokens/refresh_wc/tokens_updater.go
Normal file
94
cmd/tokens/refresh_wc/tokens_updater.go
Normal file
@ -0,0 +1,94 @@
|
||||
package refresh_wc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/timer"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"go.uber.org/zap"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Deps struct {
|
||||
AmoClient *amoClient.Amo
|
||||
Repo *dal.AmoDal
|
||||
Logger *zap.Logger
|
||||
}
|
||||
|
||||
type WebHookUpdater struct {
|
||||
amoClient *amoClient.Amo
|
||||
repo *dal.AmoDal
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
func NewRefreshWC(deps Deps) *WebHookUpdater {
|
||||
return &WebHookUpdater{
|
||||
amoClient: deps.AmoClient,
|
||||
repo: deps.Repo,
|
||||
logger: deps.Logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *WebHookUpdater) Start(ctx context.Context) {
|
||||
nextStart := timer.CalculateTime(3)
|
||||
ticker := time.NewTicker(time.Nanosecond * time.Duration(nextStart))
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTasks(ctx)
|
||||
nextStart = timer.CalculateTime(3)
|
||||
ticker.Reset(time.Nanosecond * time.Duration(nextStart))
|
||||
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// todo если так нормально будет, то предлагаю батчами сделать, батч на 1000 к примеру,
|
||||
// делим количество всего токенов на размер батча чтобы было без остатка и строим вейт группу вокруг этого
|
||||
func (wc *WebHookUpdater) processTasks(ctx context.Context) {
|
||||
currentTokens, err := wc.repo.AmoRepo.GetAllTokens(ctx)
|
||||
if err != nil {
|
||||
wc.logger.Error("Failed to get all tokens", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
for _, token := range currentTokens {
|
||||
user, err := wc.repo.AmoRepo.GetCurrentAccount(ctx, token.AccountID)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting account by id", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
req := models.UpdateWebHookReq{
|
||||
GrantType: "refresh_token",
|
||||
RefreshToken: token.RefreshToken,
|
||||
}
|
||||
|
||||
resp, err := wc.amoClient.CreateWebHook(&req, user.Subdomain)
|
||||
if err != nil {
|
||||
wc.logger.Error("error create webhook", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
|
||||
err = wc.repo.AmoRepo.WebhookUpdate(ctx, model.Token{
|
||||
AccountID: token.AccountID,
|
||||
RefreshToken: resp.RefreshToken,
|
||||
AccessToken: resp.AccessToken,
|
||||
Expiration: time.Now().Unix() + resp.ExpiresIn,
|
||||
CreatedAt: time.Now().Unix(),
|
||||
})
|
||||
if err != nil {
|
||||
wc.logger.Error("error update token in db", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *WebHookUpdater) Stop(_ context.Context) error {
|
||||
return nil
|
||||
}
|
@ -1,28 +1,49 @@
|
||||
version: "3"
|
||||
services:
|
||||
amocrm:
|
||||
hostname: squiz-amocrm
|
||||
container_name: squiz-amocrm
|
||||
image: $CI_REGISTRY_IMAGE/main:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
|
||||
image: gitea.pena/squiz/amocrm/main:$GITHUB_RUN_NUMBER
|
||||
tty: true
|
||||
environment:
|
||||
HTTP_HOST: '0.0.0.0'
|
||||
HTTP_PORT: 1488
|
||||
REDIS_ADDR: '10.8.0.9:6379'
|
||||
REDIS_ADDR: '10.8.0.12:6379'
|
||||
REDIS_PASS: 'Redalert2'
|
||||
REDIS_DB: 4
|
||||
PENA_SOCIAL_AUTH_URL: 'http://10.8.0.8:59344/amocrm/auth'
|
||||
PENA_SOCIAL_AUTH_URL: 'http://10.8.0.226:59344/amocrm/auth'
|
||||
|
||||
PUBLIC_ACCESS_SECRET_KEY: $JWT_PUBLIC_KEY
|
||||
PG_CRED: 'host=10.8.0.9 port=5433 user=squiz password=Redalert2 dbname=squiz sslmode=disable'
|
||||
PUBLIC_KEY: $PEM_PUB_USERID
|
||||
PRIVATE_KEY: $PEM_PRIV_USERID
|
||||
KAFKA_BROKERS: 10.8.0.8:9092
|
||||
PUBLIC_ACCESS_SECRET_KEY: "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLW1tlHyKC9AG0hGpmkksET2DE\nr7ojSPemxFWAgFgcPJWQ7x3uNbsdJ3bIZFoA/FClaWKMCZmjnH9tv0bKZtY/CDhM\nZEyHpMruRSn6IKrxjtQZWy4uv/w6MzUeyBYG0OvNCiYpdvz5SkAGAUHD5ZNFqn2w\nKKFD0I2Dr59BFVSGJwIDAQAB\n-----END PUBLIC KEY-----"
|
||||
PG_CRED: 'host=10.8.0.12 port=5433 user=squiz password=Redalert2 dbname=squiz sslmode=disable'
|
||||
PUBLIC_KEY: "-----BEGIN PUBLIC KEY-----\nMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAn/Q3CKvaxK4YR3N3Iy8O\nIOs218oDQIwoHpmRh3a9V+vTEqT+rY8/Dkf5cnbTMuEBFP1NYtS+pcSFF7nLlZdm\nVb6rhtjLCV0awogeWxJsXCHBOHF7Fv4iqDa85qMwl7XiVXxKo/9kH9TkPsgFsuYt\nvL4Xc1u6ogoYeVHP7ULDMxgmdLd2N9VIVphxsiGDq304NbgWFVr47/J3x3DU0bw+\nF5QdI7ScU/m4T3S0WlhFaG0hblVbH8x+8U81F9OIyJCX9tGZYb6eR3v1pnWP191L\nkpJPSlj9cPPJhl3d6bCyYzGv6k8KQClSs8lsSklPrcXl0ut3raC+oEFp2JkHQL7R\nUlwPr2ZOt9DTTs7l70gvr8FswO4/N6+t+6spce2s3lwN41BWGWHYcc9PuOHqUQTw\nJ3IQQU6NmAyZOjDiZJw7uoNG2rtCqWQRykTULZvtfxh3lMXI/qKM1em+Qo3AZnKC\nY01xhCr4ahPs9Rb4eReigTJSzq+IRSJa1+xPaR4dNm6tAgMBAAE=\n-----END PUBLIC KEY-----"
|
||||
PRIVATE_KEY: "-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----"
|
||||
KAFKA_BROKERS: 10.8.0.226:9092
|
||||
KAFKA_TOPIC: "squiz-amocrm"
|
||||
GRPC_HOST: "0.0.0.0"
|
||||
RETURN_URL: "https://quiz.pena.digital/squiz/amocrm/oauth"
|
||||
REDIRECT_URL: "https://quiz.pena.digital/integrations"
|
||||
INTEGRATION_ID: "6c7f3fdb-cce7-4fb0-a8a3-640b695c8d00"
|
||||
INTEGRATION_SECRET: "s5PaAHc4BranEawClbTZs4Bhc1SSTcx1Jf4XRydvp7UqbeZiTAi6plWFYU5HSFQn"
|
||||
INTEGRATION_ID: "48fc50c2-67a6-4619-bd54-23311619cc79"
|
||||
INTEGRATION_SECRET: "YRvT2CRFprN7r5N021YTSe1LKT0HJdhaE6GJbGYs08q9llyDrwE5FMuM3HXl7CZ0"
|
||||
ports:
|
||||
- 10.8.0.9:1492:1488
|
||||
- 10.8.0.12:1492:1488
|
||||
refresher:
|
||||
image: gitea.pena/squiz/amocrm/main:$GITHUB_RUN_NUMBER
|
||||
tty: true
|
||||
command: /token_refresher
|
||||
environment:
|
||||
HTTP_HOST: '0.0.0.0'
|
||||
HTTP_PORT: 1488
|
||||
REDIS_ADDR: '10.8.0.12:6379'
|
||||
REDIS_PASS: 'Redalert2'
|
||||
REDIS_DB: 4
|
||||
PENA_SOCIAL_AUTH_URL: 'http://10.8.0.226:59344/amocrm/auth'
|
||||
|
||||
PUBLIC_ACCESS_SECRET_KEY: "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLW1tlHyKC9AG0hGpmkksET2DE\nr7ojSPemxFWAgFgcPJWQ7x3uNbsdJ3bIZFoA/FClaWKMCZmjnH9tv0bKZtY/CDhM\nZEyHpMruRSn6IKrxjtQZWy4uv/w6MzUeyBYG0OvNCiYpdvz5SkAGAUHD5ZNFqn2w\nKKFD0I2Dr59BFVSGJwIDAQAB\n-----END PUBLIC KEY-----"
|
||||
PG_CRED: 'host=10.8.0.12 port=5433 user=squiz password=Redalert2 dbname=squiz sslmode=disable'
|
||||
PUBLIC_KEY: "-----BEGIN PUBLIC KEY-----\nMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAn/Q3CKvaxK4YR3N3Iy8O\nIOs218oDQIwoHpmRh3a9V+vTEqT+rY8/Dkf5cnbTMuEBFP1NYtS+pcSFF7nLlZdm\nVb6rhtjLCV0awogeWxJsXCHBOHF7Fv4iqDa85qMwl7XiVXxKo/9kH9TkPsgFsuYt\nvL4Xc1u6ogoYeVHP7ULDMxgmdLd2N9VIVphxsiGDq304NbgWFVr47/J3x3DU0bw+\nF5QdI7ScU/m4T3S0WlhFaG0hblVbH8x+8U81F9OIyJCX9tGZYb6eR3v1pnWP191L\nkpJPSlj9cPPJhl3d6bCyYzGv6k8KQClSs8lsSklPrcXl0ut3raC+oEFp2JkHQL7R\nUlwPr2ZOt9DTTs7l70gvr8FswO4/N6+t+6spce2s3lwN41BWGWHYcc9PuOHqUQTw\nJ3IQQU6NmAyZOjDiZJw7uoNG2rtCqWQRykTULZvtfxh3lMXI/qKM1em+Qo3AZnKC\nY01xhCr4ahPs9Rb4eReigTJSzq+IRSJa1+xPaR4dNm6tAgMBAAE=\n-----END PUBLIC KEY-----"
|
||||
PRIVATE_KEY: "-----BEGIN RSA PRIVATE KEY-----\n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\n-----END RSA PRIVATE KEY-----"
|
||||
KAFKA_BROKERS: 10.8.0.226:9092
|
||||
KAFKA_TOPIC: "squiz-amocrm"
|
||||
GRPC_HOST: "0.0.0.0"
|
||||
RETURN_URL: "https://quiz.pena.digital/squiz/amocrm/oauth"
|
||||
REDIRECT_URL: "https://quiz.pena.digital/integrations"
|
||||
INTEGRATION_ID: "48fc50c2-67a6-4619-bd54-23311619cc79"
|
||||
INTEGRATION_SECRET: "YRvT2CRFprN7r5N021YTSe1LKT0HJdhaE6GJbGYs08q9llyDrwE5FMuM3HXl7CZ0"
|
||||
|
||||
|
45
go.mod
45
go.mod
@ -1,23 +1,26 @@
|
||||
module amocrm
|
||||
module gitea.pena/SQuiz/amocrm
|
||||
|
||||
go 1.22.0
|
||||
go 1.23.2
|
||||
|
||||
toolchain go1.22.2
|
||||
toolchain go1.23.4
|
||||
|
||||
require (
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735
|
||||
gitea.pena/SQuiz/common v0.0.0-20250207214652-9994f2d4d43f
|
||||
github.com/caarlos0/env/v8 v8.0.0
|
||||
github.com/go-redis/redis/v8 v8.11.5
|
||||
github.com/gofiber/fiber/v2 v2.52.4
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/lib/pq v1.10.9
|
||||
github.com/stretchr/testify v1.8.4
|
||||
github.com/twmb/franz-go v1.16.1
|
||||
github.com/stretchr/testify v1.9.0
|
||||
github.com/twmb/franz-go v1.18.0
|
||||
go.uber.org/zap v1.27.0
|
||||
google.golang.org/protobuf v1.33.0
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240710173639-ae1b5abeb71f
|
||||
)
|
||||
|
||||
require (
|
||||
gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 // indirect
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 // indirect
|
||||
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
@ -25,37 +28,31 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/go-ini/ini v1.67.0 // indirect
|
||||
github.com/goccy/go-json v0.10.3 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.17.6 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.6 // indirect
|
||||
github.com/klauspost/compress v1.17.11 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||
github.com/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/minio/minio-go/v7 v7.0.69 // 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/reflect2 v1.0.2 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.19 // indirect
|
||||
github.com/minio/minio-go/v7 v7.0.81 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/rs/xid v1.5.0 // indirect
|
||||
github.com/rs/xid v1.6.0 // indirect
|
||||
github.com/tealeg/xlsx v1.0.5 // indirect
|
||||
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf // indirect
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.9.0 // indirect
|
||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||
github.com/valyala/fasthttp v1.51.0 // indirect
|
||||
github.com/valyala/tcplisten v1.0.0 // indirect
|
||||
go.uber.org/multierr v1.10.0 // indirect
|
||||
golang.org/x/crypto v0.20.0 // indirect
|
||||
golang.org/x/net v0.21.0 // indirect
|
||||
golang.org/x/sys v0.17.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
golang.org/x/crypto v0.28.0 // indirect
|
||||
golang.org/x/net v0.30.0 // indirect
|
||||
golang.org/x/sys v0.26.0 // indirect
|
||||
golang.org/x/text v0.19.0 // 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/devops/linters/golang.git v0.0.0-20240803124813-79e62d2acf3c // indirect
|
||||
)
|
||||
|
84
go.sum
84
go.sum
@ -1,3 +1,11 @@
|
||||
gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517 h1:EgBe8VcdPwmxbSzYLndncP+NmR73uYuXxkTeDlEttEE=
|
||||
gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517/go.mod h1:91EuBCgcqgJ6mG36n2pds8sPwwfaJytLWOzY3h2YFKU=
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 h1:tBkXWNIt8icmkMMnq8MA421RWkUy4OZh5P7C3q8uCu4=
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9/go.mod h1:sanhSL8aEsfcq21P+eItYiAnKAre+B67nGJmDfk2cf0=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250207214652-9994f2d4d43f h1:458FCN98jVkjAqg3yyspgkUdJnKz3BNMiZosrVtPpv8=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250207214652-9994f2d4d43f/go.mod h1:/YR+uo4RouZshuHPkguk7nAJVKuFt3Z0mTFxUPdlzxQ=
|
||||
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=
|
||||
@ -19,9 +27,13 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
|
||||
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
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-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
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/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
||||
@ -32,19 +44,16 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
|
||||
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/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
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/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/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
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/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
|
||||
github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
||||
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
@ -64,15 +73,8 @@ github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh
|
||||
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/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/go.mod h1:XAvOPJQ5Xlzk5o3o/ArO2NMbhSGkimC+bpW/ngRKDmQ=
|
||||
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
|
||||
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
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/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA=
|
||||
github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
||||
@ -81,26 +83,24 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||
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/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
|
||||
github.com/pierrec/lz4/v4 v4.1.21/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/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
|
||||
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||
github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
|
||||
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
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.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
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/themakers/hlog v0.0.0-20191205140925-235e0e4baddf h1:TJJm6KcBssmbWzplF5lzixXl1RBAi/ViPs1GaSOkhwo=
|
||||
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf/go.mod h1:1FsorU3vnXO9xS9SrhUp8fRb/6H/Zfll0rPt1i4GWaA=
|
||||
github.com/twmb/franz-go v1.16.1 h1:rpWc7fB9jd7TgmCyfxzenBI+QbgS8ZfJOUQE+tzPtbE=
|
||||
github.com/twmb/franz-go v1.16.1/go.mod h1:/pER254UPPGp/4WfGqRi+SIRGE50RSQzVubQp6+N4FA=
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E=
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw=
|
||||
github.com/twmb/franz-go v1.18.0 h1:25FjMZfdozBywVX+5xrWC2W+W76i0xykKjTdEeD2ejw=
|
||||
github.com/twmb/franz-go v1.18.0/go.mod h1:zXCGy74M0p5FbXsLeASdyvfLFsBvTubVqctIaa5wQ+I=
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.9.0 h1:JojYUph2TKAau6SBtErXpXGC7E3gg4vGZMv9xFU/B6M=
|
||||
github.com/twmb/franz-go/pkg/kmsg v1.9.0/go.mod h1:CMbfazviCyY6HM0SXuG5t9vOwYDHRCSrJJyBAe5paqg=
|
||||
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/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA=
|
||||
@ -113,17 +113,17 @@ 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/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
golang.org/x/crypto v0.20.0 h1:jmAMJJZXr5KiCw05dfYK9QnqaqKLYXijU23lsEdcQqg=
|
||||
golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
|
||||
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/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
|
||||
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
|
||||
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
|
||||
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
||||
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.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/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
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/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
|
||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
|
||||
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
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/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
@ -132,21 +132,9 @@ google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
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/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240628071842-da12f589207e h1:9wh9ch9UaJcC/b/SCgDWdj7UX1mPK7ko1PBNp5PpH5U=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240628071842-da12f589207e/go.mod h1:nfZkoj8MCYaoP+xiPeUn5D0lIzinUr1qDkNfX0ng9rk=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240628183520-89234a64c7fe h1:KRz7Blk/yniyY1iC5omxS8yZPb/uBEm0HhM6HGhs6Rw=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240628183520-89234a64c7fe/go.mod h1:nfZkoj8MCYaoP+xiPeUn5D0lIzinUr1qDkNfX0ng9rk=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240710173639-ae1b5abeb71f h1:AsazJV1Z1eCCKSTylddZnRp8ziy2YZofv7/AyPqqtXM=
|
||||
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240710173639-ae1b5abeb71f/go.mod h1:nfZkoj8MCYaoP+xiPeUn5D0lIzinUr1qDkNfX0ng9rk=
|
||||
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240803124813-79e62d2acf3c h1:imtXaIVscs8it6SfAmDxjNxqQSF44GgCTl1N6JT6unA=
|
||||
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240803124813-79e62d2acf3c/go.mod h1:i7M72RIpkSjcQtHID6KKj9RT/EYZ1rxS6tIPKWa/BSY=
|
||||
|
@ -1,25 +1,26 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"amocrm/internal/brokers"
|
||||
"amocrm/internal/controllers"
|
||||
"amocrm/internal/initialize"
|
||||
"amocrm/internal/repository"
|
||||
"amocrm/internal/server/http"
|
||||
"amocrm/internal/service"
|
||||
"amocrm/internal/tools"
|
||||
"amocrm/internal/workers/data_updater"
|
||||
"amocrm/internal/workers/limiter"
|
||||
"amocrm/internal/workers/post_deals_worker"
|
||||
"amocrm/internal/workers/post_fields_worker"
|
||||
"amocrm/internal/workers/queueUpdater"
|
||||
"amocrm/internal/workers_methods"
|
||||
"amocrm/pkg/amoClient"
|
||||
"amocrm/pkg/closer"
|
||||
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||
"context"
|
||||
"errors"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/brokers"
|
||||
"gitea.pena/SQuiz/amocrm/internal/controllers"
|
||||
"gitea.pena/SQuiz/amocrm/internal/initialize"
|
||||
"gitea.pena/SQuiz/amocrm/internal/repository"
|
||||
"gitea.pena/SQuiz/amocrm/internal/server/http"
|
||||
"gitea.pena/SQuiz/amocrm/internal/service"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/data_updater"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/limiter"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/post_deals_worker"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/post_fields_worker"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/queueUpdater"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers_methods"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/closer"
|
||||
pena_social_auth "gitea.pena/SQuiz/amocrm/pkg/pena-social-auth"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
@ -28,7 +29,7 @@ import (
|
||||
func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) error {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logger.Error("Recovered from a panic", zap.Any("error", r))
|
||||
logger.Error("Recovered in app from a panic", zap.Any("error", r))
|
||||
}
|
||||
}()
|
||||
|
||||
@ -135,6 +136,7 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) erro
|
||||
|
||||
go dataUpdater.Start(ctx)
|
||||
go queUpdater.Start(ctx)
|
||||
fmt.Println("UMBRELLA")
|
||||
go dealsPoster.Start(ctx)
|
||||
go fieldsPoster.Start(ctx)
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
package brokers
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"github.com/twmb/franz-go/pkg/kgo"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
@ -3,8 +3,8 @@ package controllers
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
)
|
||||
|
||||
func (c *Controller) GetFieldsWithPagination(ctx *fiber.Ctx) error {
|
||||
|
@ -1,8 +1,8 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"amocrm/internal/service"
|
||||
"amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/amocrm/internal/service"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
@ -2,7 +2,7 @@ package controllers
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
|
@ -3,8 +3,8 @@ package controllers
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
)
|
||||
|
||||
func (c *Controller) UpdateListPipelines(ctx *fiber.Ctx) error {
|
||||
|
@ -5,9 +5,9 @@ import (
|
||||
"fmt"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/lib/pq"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
@ -95,8 +95,13 @@ func (c *Controller) GettingQuizRules(ctx *fiber.Ctx) error {
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
|
||||
}
|
||||
accountID, ok := middleware.GetAccountId(ctx)
|
||||
if !ok {
|
||||
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
|
||||
}
|
||||
|
||||
response, err := c.service.GettingQuizRules(ctx.Context(), quizIDInt)
|
||||
|
||||
response, err := c.service.GettingQuizRules(ctx.Context(),accountID, quizIDInt)
|
||||
|
||||
if err != nil {
|
||||
switch {
|
||||
|
@ -3,8 +3,8 @@ package controllers
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
|
@ -3,8 +3,8 @@ package controllers
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
)
|
||||
|
||||
func (c *Controller) GetTagsWithPagination(ctx *fiber.Ctx) error {
|
||||
|
@ -4,8 +4,8 @@ import (
|
||||
"errors"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
)
|
||||
|
||||
func (c *Controller) UpdateListUsers(ctx *fiber.Ctx) error {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"amocrm/internal/service"
|
||||
"amocrm/internal/tools"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/service"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
|
@ -1,7 +1,7 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
)
|
||||
|
||||
type GetListFieldsReq struct {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
)
|
||||
|
||||
type GetListTagsReq struct {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package models
|
||||
|
||||
import "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
import "gitea.pena/SQuiz/common/model"
|
||||
|
||||
type KafkaMessage struct {
|
||||
AccountID string
|
||||
|
@ -1,10 +1,10 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"github.com/go-redis/redis/v8"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
|
||||
"gitea.pena/SQuiz/common/middleware"
|
||||
)
|
||||
|
||||
type ServerConfig struct {
|
||||
|
@ -1,13 +1,13 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/tools"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) GetFieldsWithPagination(ctx context.Context, req *model.PaginationReq, accountID string) (*model.UserListFieldsResp, error) {
|
||||
|
@ -1,11 +1,11 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/brokers"
|
||||
"amocrm/pkg/amoClient"
|
||||
pena_social_auth "amocrm/pkg/pena-social-auth"
|
||||
"gitea.pena/SQuiz/amocrm/internal/brokers"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
pena_social_auth "gitea.pena/SQuiz/amocrm/pkg/pena-social-auth"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
)
|
||||
|
||||
type Deps struct {
|
||||
|
@ -1,12 +1,12 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) UpdateListPipelines(ctx context.Context, accountID string) error {
|
||||
|
@ -1,12 +1,12 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) ChangeQuizSettings(ctx context.Context, request *model.RulesReq, accountID string, quizID int) error {
|
||||
@ -75,8 +75,8 @@ func (s *Service) SetQuizSettings(ctx context.Context, request *model.RulesReq,
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) GettingQuizRules(ctx context.Context, quizID int) (*model.Rule, error) {
|
||||
rule, err := s.repository.AmoRepo.GettingQuizRules(ctx, quizID)
|
||||
func (s *Service) GettingQuizRules(ctx context.Context, accountID string, quizID int) (*model.Rule, error) {
|
||||
rule, err := s.repository.AmoRepo.GettingQuizRules(ctx, accountID, quizID)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, pj_errors.ErrNotFound
|
||||
|
@ -1,12 +1,12 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) GetStepsWithPagination(ctx context.Context, req *model.PaginationReq, accountID string, pipelineID int) (*model.UserListStepsResp, error) {
|
||||
|
@ -1,12 +1,12 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) GetTagsWithPagination(ctx context.Context, req *model.PaginationReq, accountID string) (*model.UserListTagsResp, error) {
|
||||
|
@ -1,12 +1,12 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
func (s *Service) UpdateListUsers(ctx context.Context, accountID string) error {
|
||||
|
@ -1,11 +1,11 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"errors"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
)
|
||||
|
||||
type ParamsWebhookCreate struct {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"fmt"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
@ -1,9 +1,9 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"fmt"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"strings"
|
||||
)
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
)
|
||||
|
||||
func ConvertUserGroups(groups *models.AmocrmUserInformation) []model.UserGroups {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"amocrm/internal/proto/socialauth"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/proto/socialauth"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func DeserializeProtobufMessage(protobufMessage string) (string, string, error) {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
)
|
||||
|
||||
func ValidateUtmFields(response *model.UserListFieldsResp) *model.UserListFieldsResp {
|
||||
|
@ -1,9 +1,11 @@
|
||||
package data_updater
|
||||
|
||||
import (
|
||||
"amocrm/internal/brokers"
|
||||
"amocrm/internal/models"
|
||||
"context"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/brokers"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/timer"
|
||||
"go.uber.org/zap"
|
||||
"time"
|
||||
)
|
||||
@ -26,20 +28,26 @@ func NewDataUpdaterWC(deps Deps) *DataUpdater {
|
||||
}
|
||||
|
||||
func (wc *DataUpdater) Start(ctx context.Context) {
|
||||
nextStart := calculateTime()
|
||||
nextStart := timer.CalculateTime(4)
|
||||
ticker := time.NewTicker(time.Nanosecond * time.Duration(nextStart))
|
||||
//ticker := time.NewTicker(10 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTasks(ctx)
|
||||
nextStart = calculateTime()
|
||||
ticker.Reset(time.Nanosecond * time.Duration(nextStart))
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
func() {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("RECOVERING in DataUpdater", v)
|
||||
}
|
||||
}()
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTasks(ctx)
|
||||
ticker.Reset(time.Nanosecond * time.Duration(nextStart))
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,21 +1,21 @@
|
||||
package post_deals_worker
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/repository"
|
||||
"amocrm/internal/tools"
|
||||
"amocrm/pkg/amoClient"
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/repository"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"gitea.pena/SQuiz/common/pj_errors"
|
||||
"gitea.pena/SQuiz/common/repository/amo"
|
||||
"gitea.pena/SQuiz/common/utils"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/amo"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/utils"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -45,22 +45,147 @@ func NewPostDealsWC(deps Deps) *PostDeals {
|
||||
}
|
||||
|
||||
func (wc *PostDeals) Start(ctx context.Context) {
|
||||
fmt.Println("Start")
|
||||
ticker := time.NewTicker(1 * time.Minute)
|
||||
defer ticker.Stop()
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("StartFetchingRecover", v)
|
||||
}
|
||||
}()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.startFetching(ctx)
|
||||
func() {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("RECOVERING in PostDeals", v)
|
||||
}
|
||||
}()
|
||||
select {
|
||||
case <-ticker.C:
|
||||
fmt.Println("StartFetching")
|
||||
wc.startFetching(ctx)
|
||||
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
case <-ctx.Done():
|
||||
fmt.Println("Done")
|
||||
return
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *PostDeals) processResult(ctx context.Context,
|
||||
result model.AmoUsersTrueResults,
|
||||
mapDealReq *map[string][]models.DealReq,
|
||||
mapTokenDomain *map[string]string,
|
||||
) error {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("RECOVERING in processResult", v)
|
||||
}
|
||||
}()
|
||||
fmt.Println("StartFetchingResult", result)
|
||||
userPrivileges, err := wc.amoRepo.AccountRepo.GetPrivilegesByAccountID(ctx, result.QuizAccountID)
|
||||
fmt.Println("StartFetchingUP", userPrivileges, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting user privileges", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
if !utils.VerifyUserPrivileges(userPrivileges) {
|
||||
wc.logger.Info("User don't have active quizCnt or quizUnlim privileges, aborting")
|
||||
//TODO: acquire results only for accounts with active privileges
|
||||
return nil
|
||||
}
|
||||
|
||||
allAnswers, err := wc.amoRepo.AnswerRepo.GetAllAnswersByQuizID(ctx, result.Session)
|
||||
fmt.Println("StartFetchingAA", allAnswers, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting all user answers by result session", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
userTags, err := wc.amoRepo.AmoRepo.GetUserTagsByID(ctx, result.AmoAccountID)
|
||||
fmt.Println("StartFetchingUT", userTags, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting user tags by ano account id", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// За один запрос можно передать не более 50 сделок.
|
||||
deal := models.DealReq{
|
||||
Name: fmt.Sprintf("deal quiz number %d", result.QuizID),
|
||||
StatusID: result.StepID,
|
||||
PipelineID: result.PipelineID,
|
||||
CreatedBy: 0, //result.AmoAccountID,
|
||||
UpdatedBy: 0,
|
||||
CreatedAt: time.Now().Unix(),
|
||||
ResponsibleUserID: result.PerformerID,
|
||||
Embed: models.Embedd{
|
||||
Company: []models.Company{},
|
||||
Source: models.Source{
|
||||
Type: "widget",
|
||||
},
|
||||
Tags: tools.ConstructAmoTags(userTags, result.TagsToAdd),
|
||||
},
|
||||
// строка которая будет возвращенна в респонсе чтоб понимать кто есть что
|
||||
RequestID: strconv.Itoa(int(result.AnswerID)),
|
||||
}
|
||||
|
||||
leadFields, contactData, companyData, customerToCreate, err := wc.constructField(ctx, allAnswers, result)
|
||||
fmt.Println("StartFetchingCF", leadFields, contactData, companyData, customerToCreate, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error construct fields", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
currentFields, err := wc.amoRepo.AmoRepo.GetUserFieldsByID(ctx, result.AmoAccountID)
|
||||
fmt.Println("StartFetchingcuF", currentFields, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting current user fields from db", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
utmFields := tools.ConstructUTMFields(result.UTMs, currentFields)
|
||||
|
||||
_, err = wc.amoClient.CreatingCustomer(customerToCreate, result.AccessToken, result.SubDomain)
|
||||
fmt.Println("StartFetchingcC", currentFields, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error sending requests for create customer", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
err = wc.redisRepo.CachingLeadFieldsToRedis(ctx, result.AnswerID, leadFields)
|
||||
if err != nil {
|
||||
wc.logger.Error("error saving leads fields in redis", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
deal.Embed.Contact = contactData
|
||||
deal.Embed.Company = companyData
|
||||
deal.CustomFieldsValues = utmFields
|
||||
|
||||
wc.logger.Info("NOW DEAL CONSTRUCTED IS:", zap.Any("DEAL", deal))
|
||||
|
||||
if len((*mapDealReq)[result.AccessToken]) >= 49 {
|
||||
wc.logger.Info("reached maximum number of deals for access token", zap.String("access_token", result.AccessToken))
|
||||
err = wc.sendingDealsReq(ctx, *mapDealReq, *mapTokenDomain)
|
||||
if err != nil {
|
||||
wc.logger.Error("error sending requests for create deals", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
mapDealReqTemp := make(map[string][]models.DealReq)
|
||||
mapDealReq = &mapDealReqTemp
|
||||
}
|
||||
|
||||
(*mapDealReq)[result.AccessToken] = append((*mapDealReq)[result.AccessToken], deal)
|
||||
(*mapTokenDomain)[result.AccessToken] = result.SubDomain
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (wc *PostDeals) startFetching(ctx context.Context) {
|
||||
results, err := wc.amoRepo.AmoRepo.GettingAmoUsersTrueResults(ctx)
|
||||
fmt.Println("StartFetchingResults", results, err)
|
||||
if err != nil {
|
||||
wc.logger.Error("error fetching users answers true results, for sending data to amo", zap.Error(err))
|
||||
return
|
||||
@ -70,92 +195,9 @@ func (wc *PostDeals) startFetching(ctx context.Context) {
|
||||
mapTokenDomain := make(map[string]string)
|
||||
|
||||
for _, result := range results {
|
||||
userPrivileges, err := wc.amoRepo.AccountRepo.GetPrivilegesByAccountID(ctx, result.QuizAccountID)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting user privileges", zap.Error(err))
|
||||
return
|
||||
if err := wc.processResult(ctx, result, &mapDealReq, &mapTokenDomain); err != nil {
|
||||
wc.logger.Error("error processing result", zap.Error(err))
|
||||
}
|
||||
|
||||
if !utils.VerifyUserPrivileges(userPrivileges) {
|
||||
wc.logger.Info("User don't have active quizCnt or quizUnlim privileges, aborting")
|
||||
continue
|
||||
}
|
||||
|
||||
allAnswers, err := wc.amoRepo.AnswerRepo.GetAllAnswersByQuizID(ctx, result.Session)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting all user answers by result session", zap.Error(err))
|
||||
return
|
||||
}
|
||||
userTags, err := wc.amoRepo.AmoRepo.GetUserTagsByID(ctx, result.AmoAccountID)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting user tags by ano account id", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// За один запрос можно передать не более 50 сделок.
|
||||
deal := models.DealReq{
|
||||
Name: fmt.Sprintf("deal quiz number %d", result.QuizID),
|
||||
StatusID: result.StepID,
|
||||
PipelineID: result.PipelineID,
|
||||
CreatedBy: 0, //result.AmoAccountID,
|
||||
UpdatedBy: 0,
|
||||
CreatedAt: time.Now().Unix(),
|
||||
ResponsibleUserID: result.PerformerID,
|
||||
Embed: models.Embedd{
|
||||
Company: []models.Company{},
|
||||
Source: models.Source{
|
||||
Type: "widget",
|
||||
},
|
||||
Tags: tools.ConstructAmoTags(userTags, result.TagsToAdd),
|
||||
},
|
||||
// строка которая будет возвращенна в респонсе чтоб понимать кто есть что
|
||||
RequestID: strconv.Itoa(int(result.AnswerID)),
|
||||
}
|
||||
|
||||
leadFields, contactData, companyData, customerToCreate, err := wc.constructField(ctx, allAnswers, result)
|
||||
if err != nil {
|
||||
wc.logger.Error("error construct fields", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
currentFields, err := wc.amoRepo.AmoRepo.GetUserFieldsByID(ctx, result.AmoAccountID)
|
||||
if err != nil {
|
||||
wc.logger.Error("error getting current user fields from db", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
utmFields := tools.ConstructUTMFields(result.UTMs, currentFields)
|
||||
|
||||
_, err = wc.amoClient.CreatingCustomer(customerToCreate, result.AccessToken, result.SubDomain)
|
||||
if err != nil {
|
||||
wc.logger.Error("error sending requests for create customer", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
|
||||
err = wc.redisRepo.CachingLeadFieldsToRedis(ctx, result.AnswerID, leadFields)
|
||||
if err != nil {
|
||||
wc.logger.Error("error saving leads fields in redis", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
deal.Embed.Contact = contactData
|
||||
deal.Embed.Company = companyData
|
||||
deal.CustomFieldsValues = utmFields
|
||||
|
||||
wc.logger.Info("NOW DEAL CONSTRUCTED IS:", zap.Any("DEAL", deal))
|
||||
|
||||
if len(mapDealReq[result.AccessToken]) >= 49 {
|
||||
wc.logger.Info("reached maximum number of deals for access token", zap.String("access_token", result.AccessToken))
|
||||
err = wc.sendingDealsReq(ctx, mapDealReq, mapTokenDomain)
|
||||
if err != nil {
|
||||
wc.logger.Error("error sending requests for create deals", zap.Error(err))
|
||||
return
|
||||
}
|
||||
mapDealReq = make(map[string][]models.DealReq)
|
||||
}
|
||||
|
||||
mapDealReq[result.AccessToken] = append(mapDealReq[result.AccessToken], deal)
|
||||
mapTokenDomain[result.AccessToken] = result.SubDomain
|
||||
}
|
||||
|
||||
err = wc.sendingDealsReq(ctx, mapDealReq, mapTokenDomain)
|
||||
|
@ -1,14 +1,14 @@
|
||||
package post_fields_worker
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/repository"
|
||||
"amocrm/pkg/amoClient"
|
||||
"context"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/repository"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"gitea.pena/SQuiz/common/repository/amo"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/amo"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -40,14 +40,51 @@ func (wc *PostFields) Start(ctx context.Context) {
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTask(ctx)
|
||||
func() {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("RECOVERING in PostFields", v)
|
||||
}
|
||||
}()
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTask(ctx)
|
||||
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *PostFields) processDeal(ctx context.Context, token string, dealsData []models.MappingDealsData, forRestoringMap map[int32]models.ForRestoringData) error {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("RECOVERING inprocessDeal", v)
|
||||
}
|
||||
}()
|
||||
|
||||
errorCheckerMap, err := wc.sendForUpdate(ctx, token, dealsData)
|
||||
if err != nil {
|
||||
wc.logger.Error("error updating deals fields in db", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
for dealID, _ := range errorCheckerMap {
|
||||
restoringData := forRestoringMap[dealID]
|
||||
err = wc.redisRepo.CachingDealToRedis(ctx, restoringData.SaveDeal)
|
||||
if err != nil {
|
||||
wc.logger.Error("error restoring deal in redis", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
err = wc.redisRepo.CachingLeadFieldsToRedis(ctx, restoringData.SaveDeal.AnswerID, restoringData.LeadFields)
|
||||
if err != nil {
|
||||
wc.logger.Error("error restoring deal fields in redis", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (wc *PostFields) processTask(ctx context.Context) {
|
||||
@ -57,24 +94,8 @@ func (wc *PostFields) processTask(ctx context.Context) {
|
||||
return
|
||||
}
|
||||
for token, dealsData := range dealsDataForUpdate {
|
||||
errorCheckerMap, err := wc.sendForUpdate(ctx, token, dealsData)
|
||||
if err != nil {
|
||||
wc.logger.Error("error updating deals fields in db", zap.Error(err))
|
||||
}
|
||||
|
||||
for dealID, _ := range errorCheckerMap {
|
||||
restoringData := forRestoringMap[dealID]
|
||||
err = wc.redisRepo.CachingDealToRedis(ctx, restoringData.SaveDeal)
|
||||
if err != nil {
|
||||
wc.logger.Error("error restoring deal in redis", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
err = wc.redisRepo.CachingLeadFieldsToRedis(ctx, restoringData.SaveDeal.AnswerID, restoringData.LeadFields)
|
||||
if err != nil {
|
||||
wc.logger.Error("error restoring deal fields in redis", zap.Error(err))
|
||||
return
|
||||
}
|
||||
if err := wc.processDeal(ctx, token, dealsData, forRestoringMap); err != nil {
|
||||
wc.logger.Error("error processDeal", zap.Error(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,14 @@
|
||||
package queueUpdater
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/workers_methods"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers_methods"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"github.com/twmb/franz-go/pkg/kgo"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -36,13 +37,20 @@ func (wc *QueueUpdater) Start(ctx context.Context) {
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.consumeMessages(ctx)
|
||||
func() {
|
||||
defer func() {
|
||||
if v := recover(); v != nil {
|
||||
fmt.Println("queuer recover", v)
|
||||
}
|
||||
}()
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.consumeMessages(ctx)
|
||||
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,78 +0,0 @@
|
||||
package tokens
|
||||
|
||||
import (
|
||||
"amocrm/pkg/amoClient"
|
||||
"context"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Deps struct {
|
||||
AmoClient *amoClient.Amo
|
||||
Repo *dal.AmoDal
|
||||
Logger *zap.Logger
|
||||
}
|
||||
|
||||
type Token struct {
|
||||
amoClient *amoClient.Amo
|
||||
repo *dal.AmoDal
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
func NewRefreshWC(deps Deps) *Token {
|
||||
return &Token{
|
||||
amoClient: deps.AmoClient,
|
||||
repo: deps.Repo,
|
||||
logger: deps.Logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *Token) Start(ctx context.Context) {
|
||||
ticker := time.NewTicker(5 * time.Minute)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
wc.processTasks(ctx)
|
||||
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (wc *Token) processTasks(ctx context.Context) {
|
||||
//tokens, err := wc.repo.AmoRepo.CheckExpired(ctx)
|
||||
//if err != nil {
|
||||
// wc.logger.Error("error fetch expired tokens in mongo", zap.Error(err))
|
||||
// return
|
||||
//}
|
||||
//for _, token := range tokens {
|
||||
// req := models.UpdateWebHookReq{
|
||||
// GrantType: "refresh_token",
|
||||
// RefreshToken: token.RefreshToken,
|
||||
// }
|
||||
// newTokens, err := wc.amoClient.CreateWebHook(&req)
|
||||
// if err != nil {
|
||||
// wc.logger.Error("error create webhook for update tokens", zap.Error(err))
|
||||
// continue
|
||||
// }
|
||||
// err = wc.repo.AmoRepo.WebhookUpdate(ctx, model.Token{
|
||||
// AccountID: token.AccountID,
|
||||
// RefreshToken: newTokens.RefreshToken,
|
||||
// AccessToken: newTokens.AccessToken,
|
||||
// Expiration: time.Now().Unix() + newTokens.ExpiresIn,
|
||||
// CreatedAt: time.Now().Unix(),
|
||||
// })
|
||||
// if err != nil {
|
||||
// wc.logger.Error("error update new tokens in mongo", zap.Error(err))
|
||||
// continue
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
func (wc *Token) Stop(_ context.Context) error {
|
||||
return nil
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
package workers_methods
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/tools"
|
||||
"amocrm/pkg/amoClient"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/amocrm/pkg/amoClient"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@ -41,46 +41,7 @@ func (m *Methods) UpdateTokens(ctx context.Context) ([]model.Token, error) {
|
||||
m.logger.Error("error getting all tokens from db in UpdateTokens", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, oldToken := range allTokens {
|
||||
user, err := m.repo.AmoRepo.GetCurrentAccount(ctx, oldToken.AccountID)
|
||||
if err != nil {
|
||||
m.logger.Error("error getting account by id in UpdateTokens", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
req := models.UpdateWebHookReq{
|
||||
GrantType: "refresh_token",
|
||||
RefreshToken: oldToken.RefreshToken,
|
||||
}
|
||||
|
||||
resp, err := m.amoClient.CreateWebHook(&req, user.Subdomain)
|
||||
if err != nil {
|
||||
m.logger.Error("error create webhook in UpdateTokens", zap.Error(err))
|
||||
continue
|
||||
}
|
||||
|
||||
newToken := model.Token{
|
||||
AccountID: oldToken.AccountID,
|
||||
RefreshToken: resp.RefreshToken,
|
||||
AccessToken: resp.AccessToken,
|
||||
Expiration: time.Now().Unix() + resp.ExpiresIn,
|
||||
CreatedAt: time.Now().Unix(),
|
||||
}
|
||||
|
||||
err = m.repo.AmoRepo.WebhookUpdate(ctx, newToken)
|
||||
if err != nil {
|
||||
m.logger.Error("error update token in db", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
newTokens, err := m.repo.AmoRepo.GetAllTokens(ctx)
|
||||
if err != nil {
|
||||
m.logger.Error("error getting all new updated tokens from db in UpdateTokens", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return newTokens, nil
|
||||
return allTokens, nil
|
||||
}
|
||||
|
||||
func (m *Methods) CheckUsers(ctx context.Context, allTokens []model.Token) error {
|
||||
|
@ -1,15 +1,15 @@
|
||||
package amoClient
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/workers/limiter"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/limiter"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
@ -252,8 +252,10 @@ func (a *Amo) GetListTags(req models.GetListTagsReq, accessToken string, domain
|
||||
return nil, fmt.Errorf("request GetListTags failed: %v", errs[0])
|
||||
}
|
||||
|
||||
a.logger.Info("Succesfull get tags:", zap.String("respBody", string(resBody)), zap.String("fullUrl", fullURL))
|
||||
|
||||
if statusCode != fiber.StatusOK {
|
||||
errorMessage := fmt.Sprintf("received an incorrect response from GetListTags: %s", string(resBody))
|
||||
errorMessage := fmt.Sprintf("received an incorrect response from GetListTags(%s): %s", fullURL, string(resBody))
|
||||
a.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||
return nil, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
package amoClient
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/workers/limiter"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/limiter"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"go.uber.org/zap"
|
||||
|
@ -1,13 +1,13 @@
|
||||
package data_updater
|
||||
package timer
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func calculateTime() int64 {
|
||||
func CalculateTime(hour int) int64 {
|
||||
now := time.Now()
|
||||
|
||||
targetTime := time.Date(now.Year(), now.Month(), now.Day(), 4, 0, 0, 0, now.Location())
|
||||
targetTime := time.Date(now.Year(), now.Month(), now.Day(), hour, 0, 0, 0, now.Location())
|
||||
if now.After(targetTime) {
|
||||
targetTime = targetTime.AddDate(0, 0, 1)
|
||||
}
|
14
pkg/timer/timer_test.go
Normal file
14
pkg/timer/timer_test.go
Normal file
@ -0,0 +1,14 @@
|
||||
package timer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTimer(t *testing.T) {
|
||||
result := CalculateTime(4)
|
||||
fmt.Println(result)
|
||||
|
||||
result = CalculateTime(3)
|
||||
fmt.Println(result)
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
package json
|
||||
|
||||
import (
|
||||
"amocrm/internal/models"
|
||||
"amocrm/internal/tools"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/models"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
package limiter
|
||||
|
||||
import (
|
||||
"amocrm/internal/workers/limiter"
|
||||
"context"
|
||||
"fmt"
|
||||
"gitea.pena/SQuiz/amocrm/internal/workers/limiter"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
|
||||
"gitea.pena/SQuiz/common/dal"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"amocrm/internal/tools"
|
||||
"fmt"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
||||
"gitea.pena/SQuiz/amocrm/internal/tools"
|
||||
"gitea.pena/SQuiz/common/model"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user