This commit is contained in:
skeris 2025-04-19 15:27:19 +03:00
parent 7c769ae4e9
commit 4538561c40
23 changed files with 272 additions and 362 deletions

@ -1,53 +0,0 @@
include:
- project: "devops/pena-continuous-integration"
file: "/templates/docker/build-template.gitlab-ci.yml"
- project: "devops/pena-continuous-integration"
file: "/templates/docker/deploy-template.gitlab-ci.yml"
- project: "devops/pena-continuous-integration"
file: "/templates/docker/golint.gitlab-ci.yml"
- project: "devops/pena-continuous-integration"
file: "/templates/docker/service-discovery.gitlab-ci.yml"
stages:
- lint
- build
- deploy
- service-discovery
lint:
extends: .golint_template
lint:
extends: .golint_template
build-app:
stage: build
extends: .build_template
rules:
- if: "$CI_COMMIT_BRANCH == $STAGING_BRANCH || $CI_COMMIT_BRANCH == $PRODUCTION_BRANCH"
script:
- docker build -t $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH-core:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID --build-arg GITLAB_TOKEN=$GITLAB_TOKEN $CI_PROJECT_DIR
- docker push $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH-core:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
deploy-staging:
stage: deploy
tags:
- staging
extends: .deploy_template
rules:
- if: "$CI_COMMIT_BRANCH == $STAGING_BRANCH"
after_script:
- docker ps -a
deploy-prod:
stage: deploy
tags:
- prod
extends: .deploy_template
rules:
- if: "$CI_COMMIT_BRANCH == $PRODUCTION_BRANCH"
after_script:
- ls
service-discovery:
extends: .sd_artefacts_template

@ -1,14 +1,11 @@
FROM penahub.gitlab.yandexcloud.net:5050/devops/dockerhub-backup/golang as build FROM gitea.pena/penadevops/container-images/golang:main as build
WORKDIR /app WORKDIR /app
RUN apk add git RUN apk add git
COPY . . 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 go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o core RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o core
FROM penahub.gitlab.yandexcloud.net:5050/devops/dockerhub-backup/alpine as prod FROM gitea.pena/penadevops/container-images/alpine:main
COPY --from=build /app/core . COPY --from=build /app/core .
COPY --from=build /app/schema /schema COPY --from=build /app/schema /schema
EXPOSE 1488 EXPOSE 1488

@ -1,10 +1,8 @@
version: "3"
tasks: tasks:
update-linter: update-linter:
cmds: cmds:
- go get -u penahub.gitlab.yandexcloud.net/devops/linters/golang.git - go get -u gitea.pena/PenaSide/linters-golang
lint: lint:
cmds: cmds:
- task: update-linter - task: update-linter
- cmd: golangci-lint run -v -c $(go list -f '{{"{{"}}.Dir{{"}}"}}' -m penahub.gitlab.yandexcloud.net/devops/linters/golang.git)/.golangci.yml - cmd: golangci-lint run -v -c $(go list -f '{{"{{"}}.Dir{{"}}"}}' -m gitea.pena/PenaSide/linters-golang)/.golangci.yml

@ -7,25 +7,25 @@ import (
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/skeris/appInit" "github.com/skeris/appInit"
"github.com/themakers/hlog"
"go.uber.org/zap" "go.uber.org/zap"
"gitea.pena/PenaSide/hlog"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw" "gitea.pena/PenaSide/common/log_mw"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege" "gitea.pena/PenaSide/common/privilege"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/healthchecks" "gitea.pena/SQuiz/common/healthchecks"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware" "gitea.pena/SQuiz/common/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/brokers" "gitea.pena/SQuiz/core/brokers"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/clients/auth" "gitea.pena/SQuiz/core/clients/auth"
//"penahub.gitlab.yandexcloud.net/backend/quiz/core/clients/telegram" //"gitea.pena/SQuiz/core/clients/telegram"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/initialize" "gitea.pena/SQuiz/core/initialize"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/models" "gitea.pena/SQuiz/core/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/server" "gitea.pena/SQuiz/core/server"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/service" "gitea.pena/SQuiz/core/service"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/tools" "gitea.pena/SQuiz/core/tools"
//"penahub.gitlab.yandexcloud.net/backend/quiz/core/workers" //"gitea.pena/SQuiz/core/workers"
"penahub.gitlab.yandexcloud.net/external/trashlog/wrappers/zaptrashlog" "gitea.pena/PenaSide/trashlog/wrappers/zaptrashlog"
"time" "time"
) )

47
go.mod

@ -1,8 +1,13 @@
module penahub.gitlab.yandexcloud.net/backend/quiz/core module gitea.pena/SQuiz/core
go 1.22.0 go 1.23.2
require ( require (
gitea.pena/PenaSide/common v0.0.0-20250103085335-91ea31fee517
gitea.pena/PenaSide/linters-golang v0.0.0-20241119212350-2759fa93724a
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4
gitea.pena/SQuiz/common v0.0.0-20250205160239-4ed00d74894b
gitea.pena/SQuiz/worker v0.0.0-20250205171832-dc46e3e23c1c
github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5
github.com/gofiber/fiber/v2 v2.52.4 github.com/gofiber/fiber/v2 v2.52.4
github.com/golang-jwt/jwt/v5 v5.2.1 github.com/golang-jwt/jwt/v5 v5.2.1
@ -10,62 +15,58 @@ require (
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
github.com/lib/pq v1.10.9 github.com/lib/pq v1.10.9
github.com/pioz/faker v1.7.3 github.com/pioz/faker v1.7.3
github.com/rs/xid v1.6.0
github.com/skeris/appInit v1.0.2 github.com/skeris/appInit v1.0.2
github.com/stretchr/testify v1.9.0 github.com/stretchr/testify v1.9.0
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf
github.com/twmb/franz-go v1.16.1 github.com/twmb/franz-go v1.18.0
github.com/xuri/excelize/v2 v2.8.1 github.com/xuri/excelize/v2 v2.8.1
go.uber.org/zap v1.27.0 go.uber.org/zap v1.27.0
google.golang.org/grpc v1.66.0 google.golang.org/grpc v1.66.0
google.golang.org/protobuf v1.34.2 google.golang.org/protobuf v1.34.2
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3
penahub.gitlab.yandexcloud.net/external/trashlog v0.1.6-0.20240827173635-78ce9878c387
) )
require ( require (
gitea.pena/PenaSide/customer v0.0.0-20250111112441-6b06a95b8e24 // indirect
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 // indirect
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect github.com/andybalholm/brotli v1.1.0 // indirect
github.com/caarlos0/env/v8 v8.0.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/goccy/go-json v0.10.2 // indirect github.com/go-ini/ini v1.67.0 // indirect
github.com/goccy/go-json v0.10.3 // indirect
github.com/golang/protobuf v1.5.4 // indirect github.com/golang/protobuf v1.5.4 // indirect
github.com/google/uuid v1.6.0 // indirect github.com/google/uuid v1.6.0 // indirect
github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/compress v1.17.11 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect
github.com/kr/pretty v0.3.1 // 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
github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/md5-simd v1.1.2 // indirect
github.com/minio/minio-go/v7 v7.0.70 // indirect github.com/minio/minio-go/v7 v7.0.81 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect
github.com/richardlehane/msoleps v1.0.3 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect
github.com/rivo/uniseg v0.4.7 // indirect github.com/rivo/uniseg v0.4.7 // indirect
github.com/tealeg/xlsx v1.0.5 // indirect github.com/rs/xid v1.6.0 // indirect
github.com/twmb/franz-go/pkg/kmsg v1.8.0 // indirect github.com/twmb/franz-go/pkg/kmsg v1.9.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.53.0 // indirect github.com/valyala/fasthttp v1.54.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect
go.etcd.io/bbolt v1.3.11 // indirect go.etcd.io/bbolt v1.3.11 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.27.0 // indirect golang.org/x/crypto v0.28.0 // indirect
golang.org/x/net v0.29.0 // indirect golang.org/x/net v0.30.0 // indirect
golang.org/x/sys v0.25.0 // indirect golang.org/x/sys v0.26.0 // indirect
golang.org/x/text v0.18.0 // indirect golang.org/x/text v0.19.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/tucnak/telebot.v2 v2.5.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
) )

86
go.sum

@ -1,4 +1,18 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
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/customer v0.0.0-20250111112441-6b06a95b8e24 h1:En76y8iqNJb51AwSd+ptsl5Z/yu2nOmLE+UkEU+jddU=
gitea.pena/PenaSide/customer v0.0.0-20250111112441-6b06a95b8e24/go.mod h1:DDg6CQDhU+aSSTv8R/LbkNGegdCx+Q++DcgPfE2LbZU=
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-20241119212350-2759fa93724a h1:UySqMgaOKNsR42Y6GQXoM2wn/waYNc9cakMUSvbEEAg=
gitea.pena/PenaSide/linters-golang v0.0.0-20241119212350-2759fa93724a/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU=
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4 h1:y9B4CSPIgiUoaXKyXLZxs1A9hxzDj26F9MH2R6uTkHQ=
gitea.pena/PenaSide/trashlog v0.0.0-20241119225515-2fd267647ca4/go.mod h1:Bp5fJX0XsTV3QYximX6R2kCRvVKQAPwxjjCPm+ToTY8=
gitea.pena/SQuiz/common v0.0.0-20250205160239-4ed00d74894b h1:N3DdDWQyTXC0B5mI7OpjxHQuHtt6EJCK+vqRrLqcb1w=
gitea.pena/SQuiz/common v0.0.0-20250205160239-4ed00d74894b/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
gitea.pena/SQuiz/worker v0.0.0-20250205171832-dc46e3e23c1c h1:MQqvgpJxcEIyL1DYkfmWTDgQqKfW509f75/YcVfXitQ=
gitea.pena/SQuiz/worker v0.0.0-20250205171832-dc46e3e23c1c/go.mod h1:dp5ZcO2EbRFOPZ2wwUovbFTJ/tdmt0VPf0iUw2jczQU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= 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/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
@ -7,8 +21,6 @@ github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer5
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk= github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4= github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@ -16,7 +28,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -32,14 +43,16 @@ github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= 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/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-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 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 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM=
github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@ -66,14 +79,13 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= 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.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@ -93,8 +105,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/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
github.com/minio/minio-go/v7 v7.0.70 h1:1u9NtMgfK1U42kUxcsl5v0yj6TEOPR497OAQxpJnn2g= github.com/minio/minio-go/v7 v7.0.81 h1:SzhMN0TQ6T/xSBu6Nvw3M5M8voM+Ht8RH3hE8S7zxaA=
github.com/minio/minio-go/v7 v7.0.70/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= github.com/minio/minio-go/v7 v7.0.81/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
@ -110,7 +122,6 @@ 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/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pioz/faker v1.7.3 h1:Tez8Emuq0UN+/d6mo3a9m/9ZZ/zdfJk0c5RtRatrceM= github.com/pioz/faker v1.7.3 h1:Tez8Emuq0UN+/d6mo3a9m/9ZZ/zdfJk0c5RtRatrceM=
github.com/pioz/faker v1.7.3/go.mod h1:xSpay5w/oz1a6+ww0M3vfpe40pSIykeUPeWEc3TvVlc= github.com/pioz/faker v1.7.3/go.mod h1:xSpay5w/oz1a6+ww0M3vfpe40pSIykeUPeWEc3TvVlc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -126,8 +137,8 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@ -138,23 +149,23 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
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.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 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/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33 h1:N9f/Q+2Ssa+yDcbfaoLTYvXmdeyUUxsJKdPUVsjSmiA= github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33 h1:N9f/Q+2Ssa+yDcbfaoLTYvXmdeyUUxsJKdPUVsjSmiA=
github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33/go.mod h1:rpcH99JknBh8seZmlOlUg51gasZH6QH34oXNsIwYT6E= github.com/themakers/bdd v0.0.0-20210316111417-6b1dfe326f33/go.mod h1:rpcH99JknBh8seZmlOlUg51gasZH6QH34oXNsIwYT6E=
github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf h1:TJJm6KcBssmbWzplF5lzixXl1RBAi/ViPs1GaSOkhwo= 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/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.18.0 h1:25FjMZfdozBywVX+5xrWC2W+W76i0xykKjTdEeD2ejw=
github.com/twmb/franz-go v1.16.1/go.mod h1:/pER254UPPGp/4WfGqRi+SIRGE50RSQzVubQp6+N4FA= github.com/twmb/franz-go v1.18.0/go.mod h1:zXCGy74M0p5FbXsLeASdyvfLFsBvTubVqctIaa5wQ+I=
github.com/twmb/franz-go/pkg/kmsg v1.8.0 h1:lAQB9Z3aMrIP9qF9288XcFf/ccaSxEitNA1CDTEIeTA= github.com/twmb/franz-go/pkg/kmsg v1.9.0 h1:JojYUph2TKAau6SBtErXpXGC7E3gg4vGZMv9xFU/B6M=
github.com/twmb/franz-go/pkg/kmsg v1.8.0/go.mod h1:HzYEb8G3uu5XevZbtU0dVbkphaKTHk0X68N5ka4q6mU= 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 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.53.0 h1:lW/+SUkOxCx2vlIu0iaImv4JLrVRnbbkpCoaawvA4zc= github.com/valyala/fasthttp v1.54.0 h1:cCL+ZZR3z3HPLMVfEYVUMtJqVaui0+gu7Lx63unHwS0=
github.com/valyala/fasthttp v1.53.0/go.mod h1:6dt4/8olwq9QARP/TDuPmWyWcl4byhpvTJ4AAtcz+QM= github.com/valyala/fasthttp v1.54.0/go.mod h1:6dt4/8olwq9QARP/TDuPmWyWcl4byhpvTJ4AAtcz+QM=
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/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY= github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY=
@ -185,8 +196,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=
golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE=
@ -205,8 +216,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -224,12 +235,12 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc
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.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@ -264,12 +275,9 @@ google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6h
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
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 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/tucnak/telebot.v2 v2.5.0 h1:i+NynLo443Vp+Zn3Gv9JBjh3Z/PaiKAQwcnhNI7y6Po= gopkg.in/tucnak/telebot.v2 v2.5.0 h1:i+NynLo443Vp+Zn3Gv9JBjh3Z/PaiKAQwcnhNI7y6Po=
@ -285,15 +293,3 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c h1:CWb4UcuNXhd1KTNOmy2U0TJO4+Qxgxrj5cwkyFqbgrk=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240711133242-0b8534fae5b2 h1:0t6pQHJvA3jMeBB3FPUmA+hw8rWlksTah8KJEtf2KD8=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240711133242-0b8534fae5b2/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240919124706-53cacd30903a h1:loD4hoCkx1ZTqw0mg/Br4RT2GI1vT2WvEh0I/j+DPo8=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240919124706-53cacd30903a/go.mod h1:uOuosXduBzd2WbLH6TDZO7ME7ZextulA662oZ6OsoB0=
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990 h1:jiO8GWO+3sCnDAV8/NAV8tQIUwae/I6/xiDilW7zf0o=
penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990/go.mod h1:zswBuTwmEsFHBVRu1nkG3/Fwylk5Vcm8OUm9iWxccSE=
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3 h1:sf6e2mp582L3i/FMDd2q6QuWm1njRXzYpIX0SipsvM4=
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240829220549-d35409b619a3/go.mod h1:i7M72RIpkSjcQtHID6KKj9RT/EYZ1rxS6tIPKWa/BSY=
penahub.gitlab.yandexcloud.net/external/trashlog v0.1.6-0.20240827173635-78ce9878c387 h1:G+GIhkkvUsM9No2rf2D4kvQ2ExTw9KxlA8vsSnC0ywU=
penahub.gitlab.yandexcloud.net/external/trashlog v0.1.6-0.20240827173635-78ce9878c387/go.mod h1:30nezjpGpZuNThbQOCULIfa79RoJ5sray593jhfVP/Q=

@ -0,0 +1,16 @@
package initialize
import (
"gitea.pena/SQuiz/common/dal"
"gitea.pena/SQuiz/core/rpc_service"
)
type RpcRegister struct {
MailNotify *rpc_service.MailNotify
}
func InitRpcControllers(dal *dal.DAL) *RpcRegister {
return &RpcRegister{
MailNotify: rpc_service.NewMailNotify(dal),
}
}

@ -1,50 +1,21 @@
package account package service
import ( import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/go-redis/redis/v8"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw" "gitea.pena/PenaSide/common/log_mw"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/pj_errors"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors" "gitea.pena/SQuiz/core/brokers"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/brokers" "gitea.pena/SQuiz/core/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/clients/auth"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/models"
"strconv" "strconv"
"time" "time"
) )
type Deps struct {
Dal *dal.DAL
AuthClient *auth.AuthClient
Producer *brokers.Producer
ServiceName string
RedisClient *redis.Client
}
type Account struct {
dal *dal.DAL
authClient *auth.AuthClient
producer *brokers.Producer
serviceName string
redisClient *redis.Client
}
func NewAccountController(deps Deps) *Account {
return &Account{
dal: deps.Dal,
authClient: deps.AuthClient,
producer: deps.Producer,
serviceName: deps.ServiceName,
redisClient: deps.RedisClient,
}
}
type CreateAccountReq struct { type CreateAccountReq struct {
UserID string `json:"userId"` UserID string `json:"userId"`
} }
@ -80,13 +51,13 @@ type GetAccountsResp struct {
} }
// getCurrentAccount обработчик для получения текущего аккаунта // getCurrentAccount обработчик для получения текущего аккаунта
func (r *Account) GetCurrentAccount(ctx *fiber.Ctx) error { func (s *Service) getCurrentAccount(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) account, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -100,14 +71,14 @@ func (r *Account) GetCurrentAccount(ctx *fiber.Ctx) error {
} }
// createAccount обработчик для создания нового аккаунта // createAccount обработчик для создания нового аккаунта
func (r *Account) CreateAccount(ctx *fiber.Ctx) error { func (s *Service) createAccount(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
hlogger := log_mw.ExtractLogger(ctx) hlogger := log_mw.ExtractLogger(ctx)
existingAccount, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) existingAccount, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -115,7 +86,7 @@ func (r *Account) CreateAccount(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusConflict).SendString("user with this ID already exists") return ctx.Status(fiber.StatusConflict).SendString("user with this ID already exists")
} }
email, err := r.authClient.GetUserEmail(accountID) email, err := s.authClient.GetUserEmail(accountID)
if err != nil { if err != nil {
return err return err
} }
@ -134,11 +105,11 @@ func (r *Account) CreateAccount(ctx *fiber.Ctx) error {
}, },
} }
createdAcc, err := r.dal.AccountRepo.CreateAccount(ctx.Context(), &newAccount) createdAcc, err := s.dal.AccountRepo.CreateAccount(ctx.Context(), &newAccount)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
_, err = r.dal.AccountRepo.PostLeadTarget(ctx.Context(), model.LeadTarget{ _, err = s.dal.AccountRepo.PostLeadTarget(ctx.Context(), model.LeadTarget{
AccountID: accountID, AccountID: accountID,
Target: email, Target: email,
Type: model.LeadTargetEmail, Type: model.LeadTargetEmail,
@ -153,10 +124,10 @@ func (r *Account) CreateAccount(ctx *fiber.Ctx) error {
CtxAccountID: createdAcc.ID, CtxAccountID: createdAcc.ID,
}) })
err = r.producer.ToMailNotify(ctx.Context(), brokers.Message{ err = s.producer.ToMailNotify(ctx.Context(), brokers.Message{
AccountID: accountID, AccountID: accountID,
Email: email, Email: email,
ServiceKey: r.serviceName, ServiceKey: s.serviceName,
SendAt: time.Now(), SendAt: time.Now(),
}) })
if err != nil { if err != nil {
@ -169,18 +140,18 @@ func (r *Account) CreateAccount(ctx *fiber.Ctx) error {
} }
// deleteAccount обработчик для удаления текущего аккаунта // deleteAccount обработчик для удаления текущего аккаунта
func (r *Account) DeleteAccount(ctx *fiber.Ctx) error { func (s *Service) deleteAccount(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) account, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
if err := r.dal.AccountRepo.DeleteAccount(ctx.Context(), account.ID); err != nil { if err := s.dal.AccountRepo.DeleteAccount(ctx.Context(), account.ID); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -190,13 +161,13 @@ func (r *Account) DeleteAccount(ctx *fiber.Ctx) error {
} }
// getPrivilegeByUserID обработчик для получения привилегий аккаунта по ID пользователя // getPrivilegeByUserID обработчик для получения привилегий аккаунта по ID пользователя
func (r *Account) GetPrivilegeByUserID(ctx *fiber.Ctx) error { func (s *Service) getPrivilegeByUserID(ctx *fiber.Ctx) error {
var req GetPrivilegeByUserIDReq var req GetPrivilegeByUserIDReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
privilege, err := r.dal.AccountRepo.GetPrivilegesByAccountID(ctx.Context(), req.UserID) privilege, err := s.dal.AccountRepo.GetPrivilegesByAccountID(ctx.Context(), req.UserID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -205,13 +176,13 @@ func (r *Account) GetPrivilegeByUserID(ctx *fiber.Ctx) error {
} }
// deleteAccountByUserID обработчик для удаления аккаунта по ID пользователя // deleteAccountByUserID обработчик для удаления аккаунта по ID пользователя
func (r *Account) DeleteAccountByUserID(ctx *fiber.Ctx) error { func (s *Service) deleteAccountByUserID(ctx *fiber.Ctx) error {
var req DeleteAccountByUserIDReq var req DeleteAccountByUserIDReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
existingAccount, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), req.UserID) existingAccount, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), req.UserID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -220,7 +191,7 @@ func (r *Account) DeleteAccountByUserID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).SendString("user with this ID not found") return ctx.Status(fiber.StatusInternalServerError).SendString("user with this ID not found")
} }
if err := r.dal.AccountRepo.DeleteAccount(ctx.Context(), existingAccount.ID); err != nil { if err := s.dal.AccountRepo.DeleteAccount(ctx.Context(), existingAccount.ID); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -230,7 +201,7 @@ func (r *Account) DeleteAccountByUserID(ctx *fiber.Ctx) error {
} }
// getAccounts обработчик для получения списка аккаунтов с пагинацией // getAccounts обработчик для получения списка аккаунтов с пагинацией
func (r *Account) GetAccounts(ctx *fiber.Ctx) error { func (s *Service) getAccounts(ctx *fiber.Ctx) error {
var req GetAccountsReq var req GetAccountsReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -241,7 +212,7 @@ func (r *Account) GetAccounts(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
accounts, totalCount, err := r.dal.AccountRepo.GetAccounts(ctx.Context(), req.Limit, req.Page) accounts, totalCount, err := s.dal.AccountRepo.GetAccounts(ctx.Context(), req.Limit, req.Page)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -254,7 +225,7 @@ func (r *Account) GetAccounts(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(response) return ctx.Status(fiber.StatusOK).JSON(response)
} }
func (r *Account) ManualDone(ctx *fiber.Ctx) error { func (s *Service) ManualDone(ctx *fiber.Ctx) error {
var req struct { var req struct {
Id string `json:"id"` Id string `json:"id"`
} }
@ -266,7 +237,7 @@ func (r *Account) ManualDone(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("User id is required") return ctx.Status(fiber.StatusBadRequest).SendString("User id is required")
} }
err := r.dal.AccountRepo.ManualDone(ctx.Context(), req.Id) err := s.dal.AccountRepo.ManualDone(ctx.Context(), req.Id)
if err != nil { if err != nil {
if errors.Is(err, pj_errors.ErrNotFound) { if errors.Is(err, pj_errors.ErrNotFound) {
return ctx.Status(fiber.StatusNotFound).SendString("user don't have this privilege") return ctx.Status(fiber.StatusNotFound).SendString("user don't have this privilege")
@ -277,7 +248,7 @@ func (r *Account) ManualDone(ctx *fiber.Ctx) error {
return ctx.SendStatus(fiber.StatusOK) return ctx.SendStatus(fiber.StatusOK)
} }
func (r *Account) PostLeadTarget(ctx *fiber.Ctx) error { func (s *Service) PostLeadTarget(ctx *fiber.Ctx) error {
var req struct { var req struct {
Type string `json:"type"` Type string `json:"type"`
QuizID int32 `json:"quizID"` QuizID int32 `json:"quizID"`
@ -305,7 +276,7 @@ func (r *Account) PostLeadTarget(ctx *fiber.Ctx) error {
switch req.Type { switch req.Type {
case "mail": case "mail":
_, err := r.dal.AccountRepo.PostLeadTarget(ctx.Context(), model.LeadTarget{ _, err := s.dal.AccountRepo.PostLeadTarget(ctx.Context(), model.LeadTarget{
AccountID: accountID, AccountID: accountID,
Target: req.Target, Target: req.Target,
Type: model.LeadTargetType(req.Type), Type: model.LeadTargetType(req.Type),
@ -316,7 +287,7 @@ func (r *Account) PostLeadTarget(ctx *fiber.Ctx) error {
} }
return ctx.SendStatus(fiber.StatusOK) return ctx.SendStatus(fiber.StatusOK)
case "telegram": case "telegram":
targets, err := r.dal.AccountRepo.GetLeadTarget(ctx.Context(), accountID, req.QuizID) targets, err := s.dal.AccountRepo.GetLeadTarget(ctx.Context(), accountID, req.QuizID)
if err != nil && !errors.Is(err, pj_errors.ErrNotFound) { if err != nil && !errors.Is(err, pj_errors.ErrNotFound) {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -340,7 +311,7 @@ func (r *Account) PostLeadTarget(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
if err := r.redisClient.Set(ctx.Context(), taskKey, taskData, 0).Err(); err != nil { if err := s.redisClient.Set(ctx.Context(), taskKey, taskData, 0).Err(); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
case "whatsapp": case "whatsapp":
@ -350,21 +321,21 @@ func (r *Account) PostLeadTarget(ctx *fiber.Ctx) error {
return nil return nil
} }
func (r *Account) DeleteLeadTarget(ctx *fiber.Ctx) error { func (s *Service) DeleteLeadTarget(ctx *fiber.Ctx) error {
leadIDStr := ctx.Params("id") leadIDStr := ctx.Params("id")
leadID, err := strconv.ParseInt(leadIDStr, 10, 64) leadID, err := strconv.ParseInt(leadIDStr, 10, 64)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid lead ID format") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid lead ID format")
} }
err = r.dal.AccountRepo.DeleteLeadTarget(ctx.Context(), leadID) err = s.dal.AccountRepo.DeleteLeadTarget(ctx.Context(), leadID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
return ctx.SendStatus(fiber.StatusOK) return ctx.SendStatus(fiber.StatusOK)
} }
func (r *Account) GetLeadTarget(ctx *fiber.Ctx) error { func (s *Service) GetLeadTarget(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
@ -376,7 +347,7 @@ func (r *Account) GetLeadTarget(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format")
} }
result, err := r.dal.AccountRepo.GetLeadTarget(ctx.Context(), accountID, int32(quizID)) result, err := s.dal.AccountRepo.GetLeadTarget(ctx.Context(), accountID, int32(quizID))
if err != nil { if err != nil {
switch { switch {
case errors.Is(err, pj_errors.ErrNotFound): case errors.Is(err, pj_errors.ErrNotFound):
@ -389,7 +360,7 @@ func (r *Account) GetLeadTarget(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(result) return ctx.Status(fiber.StatusOK).JSON(result)
} }
func (r *Account) UpdateLeadTarget(ctx *fiber.Ctx) error { func (s *Service) UpdateLeadTarget(ctx *fiber.Ctx) error {
var req struct { var req struct {
ID int64 `json:"id"` ID int64 `json:"id"`
Target string `json:"target"` Target string `json:"target"`
@ -403,7 +374,7 @@ func (r *Account) UpdateLeadTarget(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("ID and Target don't be nil") return ctx.Status(fiber.StatusBadRequest).SendString("ID and Target don't be nil")
} }
result, err := r.dal.AccountRepo.UpdateLeadTarget(ctx.Context(), model.LeadTarget{ result, err := s.dal.AccountRepo.UpdateLeadTarget(ctx.Context(), model.LeadTarget{
ID: req.ID, ID: req.ID,
Target: req.Target, Target: req.Target,
}) })

@ -1,13 +1,12 @@
package question package service
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/lib/pq" "github.com/lib/pq"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw" "gitea.pena/PenaSide/common/log_mw"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/core/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/models"
"unicode/utf8" "unicode/utf8"
) )
@ -36,7 +35,7 @@ type QuestionCreateReq struct {
} }
// CreateQuestion service handler for creating question for quiz // CreateQuestion service handler for creating question for quiz
func (r *Question) CreateQuestion(ctx *fiber.Ctx) error { func (s *Service) CreateQuestion(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
@ -77,7 +76,7 @@ func (r *Question) CreateQuestion(ctx *fiber.Ctx) error {
Content: req.Content, Content: req.Content,
} }
questionID, err := r.dal.QuestionRepo.CreateQuestion(ctx.Context(), &result) questionID, err := s.dal.QuestionRepo.CreateQuestion(ctx.Context(), &result)
if err != nil { if err != nil {
if e, ok := err.(*pq.Error); ok { if e, ok := err.(*pq.Error); ok {
if e.Constraint == "quiz_relation" { if e.Constraint == "quiz_relation" {
@ -117,7 +116,7 @@ type GetQuestionListResp struct {
} }
// GetQuestionList handler for paginated list question // GetQuestionList handler for paginated list question
func (r *Question) GetQuestionList(ctx *fiber.Ctx) error { func (s *Service) GetQuestionList(ctx *fiber.Ctx) error {
var req GetQuestionListReq var req GetQuestionListReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -140,7 +139,7 @@ func (r *Question) GetQuestionList(ctx *fiber.Ctx) error {
"'test','none','file', 'button','select','checkbox'") "'test','none','file', 'button','select','checkbox'")
} }
res, cnt, err := r.dal.QuestionRepo.GetQuestionList(ctx.Context(), res, cnt, err := s.dal.QuestionRepo.GetQuestionList(ctx.Context(),
req.Limit, req.Limit,
req.Page*req.Limit, req.Page*req.Limit,
uint64(req.From), uint64(req.From),
@ -178,7 +177,7 @@ type UpdateResp struct {
} }
// UpdateQuestion handler for update question // UpdateQuestion handler for update question
func (r *Question) UpdateQuestion(ctx *fiber.Ctx) error { func (s *Service) UpdateQuestion(ctx *fiber.Ctx) error {
var req UpdateQuestionReq var req UpdateQuestionReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -208,7 +207,7 @@ func (r *Question) UpdateQuestion(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusNotAcceptable).SendString("type must be only test,button,file,checkbox,select, none or empty string") return ctx.Status(fiber.StatusNotAcceptable).SendString("type must be only test,button,file,checkbox,select, none or empty string")
} }
question, err := r.dal.QuestionRepo.MoveToHistoryQuestion(ctx.Context(), req.Id) question, err := s.dal.QuestionRepo.MoveToHistoryQuestion(ctx.Context(), req.Id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -240,7 +239,7 @@ func (r *Question) UpdateQuestion(ctx *fiber.Ctx) error {
question.Content = req.Content question.Content = req.Content
} }
if err := r.dal.QuestionRepo.UpdateQuestion(ctx.Context(), question); err != nil { if err := s.dal.QuestionRepo.UpdateQuestion(ctx.Context(), question); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -256,7 +255,7 @@ type CopyQuestionReq struct {
} }
// CopyQuestion handler for copy question // CopyQuestion handler for copy question
func (r *Question) CopyQuestion(ctx *fiber.Ctx) error { func (s *Service) CopyQuestion(ctx *fiber.Ctx) error {
var req CopyQuestionReq var req CopyQuestionReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -266,7 +265,7 @@ func (r *Question) CopyQuestion(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided") return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided")
} }
question, err := r.dal.QuestionRepo.CopyQuestion(ctx.Context(), req.Id, req.QuizId) question, err := s.dal.QuestionRepo.CopyQuestion(ctx.Context(), req.Id, req.QuizId)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -284,8 +283,8 @@ type GetQuestionHistoryReq struct {
} }
// GetQuestionHistory handler for history of quiz // GetQuestionHistory handler for history of quiz
func (r *Question) GetQuestionHistory(ctx *fiber.Ctx) error { func (s *Service) GetQuestionHistory(ctx *fiber.Ctx) error {
var req GetQuestionHistoryReq var req GetQuizHistoryReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
@ -294,7 +293,7 @@ func (r *Question) GetQuestionHistory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided") return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided")
} }
history, err := r.dal.QuestionRepo.QuestionHistory(ctx.Context(), req.Id, req.Limit, req.Page*req.Limit) history, err := s.dal.QuestionRepo.QuestionHistory(ctx.Context(), req.Id, req.Limit, req.Page*req.Limit)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -307,17 +306,14 @@ type DeactivateResp struct {
} }
// DeleteQuestion handler for fake delete question // DeleteQuestion handler for fake delete question
func (r *Question) DeleteQuestion(ctx *fiber.Ctx) error { func (s *Service) DeleteQuestion(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
hlogger := log_mw.ExtractLogger(ctx) hlogger := log_mw.ExtractLogger(ctx)
var req struct { var req DeactivateReq
Id uint64 `json:"id"`
}
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
@ -326,7 +322,7 @@ func (r *Question) DeleteQuestion(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("id for deleting question is required") return ctx.Status(fiber.StatusFailedDependency).SendString("id for deleting question is required")
} }
deleted, err := r.dal.QuestionRepo.DeleteQuestion(ctx.Context(), req.Id) deleted, err := s.dal.QuestionRepo.DeleteQuestion(ctx.Context(), req.Id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }

@ -1,16 +1,15 @@
package quiz package service
import ( import (
"fmt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw" "gitea.pena/PenaSide/common/log_mw"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/repository/quiz"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/quiz" "gitea.pena/SQuiz/core/models"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/models"
"time" "time"
"unicode/utf8" "unicode/utf8"
"fmt"
) )
type Deps struct { type Deps struct {
@ -49,7 +48,7 @@ type CreateQuizReq struct {
} }
// CreateQuiz handler for quiz creating request // CreateQuiz handler for quiz creating request
func (r *Quiz) CreateQuiz(ctx *fiber.Ctx) error { func (s *Service) CreateQuiz(ctx *fiber.Ctx) error {
var req CreateQuizReq var req CreateQuizReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -108,7 +107,7 @@ func (r *Quiz) CreateQuiz(ctx *fiber.Ctx) error {
GroupId: req.GroupId, GroupId: req.GroupId,
} }
quizID, err := r.dal.QuizRepo.CreateQuiz(ctx.Context(), &record) quizID, err := s.dal.QuizRepo.CreateQuiz(ctx.Context(), &record)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -142,7 +141,7 @@ type GetQuizListResp struct {
} }
// GetQuizList handler for paginated list quiz // GetQuizList handler for paginated list quiz
func (r *Quiz) GetQuizList(ctx *fiber.Ctx) error { func (s *Service) GetQuizList(ctx *fiber.Ctx) error {
var req GetQuizListReq var req GetQuizListReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -164,7 +163,7 @@ func (r *Quiz) GetQuizList(ctx *fiber.Ctx) error {
"'stop','start','draft', 'template','timeout','offlimit'") "'stop','start','draft', 'template','timeout','offlimit'")
} }
res, cnt, err := r.dal.QuizRepo.GetQuizList(ctx.Context(), res, cnt, err := s.dal.QuizRepo.GetQuizList(ctx.Context(),
quiz.GetQuizListDeps{ quiz.GetQuizListDeps{
Limit: req.Limit, Limit: req.Limit,
Offset: req.Limit * req.Page, Offset: req.Limit * req.Page,
@ -208,11 +207,7 @@ type UpdateQuizReq struct {
GroupId uint64 `json:"group_id"` GroupId uint64 `json:"group_id"`
} }
type UpdateResp struct { func (s *Service) UpdateQuiz(ctx *fiber.Ctx) error {
Updated uint64 `json:"updated"`
}
func (r *Quiz) UpdateQuiz(ctx *fiber.Ctx) error {
var req UpdateQuizReq var req UpdateQuizReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -253,7 +248,7 @@ func (r *Quiz) UpdateQuiz(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusConflict).SendString("you can pause quiz only if it has deadline for passing") return ctx.Status(fiber.StatusConflict).SendString("you can pause quiz only if it has deadline for passing")
} }
quiz, err := r.dal.QuizRepo.MoveToHistoryQuiz(ctx.Context(), req.Id, accountId) quiz, err := s.dal.QuizRepo.MoveToHistoryQuiz(ctx.Context(), req.Id, accountId)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -325,7 +320,7 @@ func (r *Quiz) UpdateQuiz(ctx *fiber.Ctx) error {
quiz.ParentIds = append(quiz.ParentIds, int32(quiz.Id)) quiz.ParentIds = append(quiz.ParentIds, int32(quiz.Id))
if err := r.dal.QuizRepo.UpdateQuiz(ctx.Context(), accountId, quiz); err != nil { if err := s.dal.QuizRepo.UpdateQuiz(ctx.Context(), accountId, quiz); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -353,7 +348,7 @@ type CopyQuizReq struct {
} }
// CopyQuiz request handler for copy quiz // CopyQuiz request handler for copy quiz
func (r *Quiz) CopyQuiz(ctx *fiber.Ctx) error { func (s *Service) CopyQuiz(ctx *fiber.Ctx) error {
var req CopyQuizReq var req CopyQuizReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -368,7 +363,7 @@ func (r *Quiz) CopyQuiz(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided") return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided")
} }
quiz, err := r.dal.QuizRepo.CopyQuiz(ctx.Context(), accountId, req.Id) quiz, err := s.dal.QuizRepo.CopyQuiz(ctx.Context(), accountId, req.Id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -386,7 +381,7 @@ type GetQuizHistoryReq struct {
} }
// GetQuizHistory handler for history of quiz // GetQuizHistory handler for history of quiz
func (r *Quiz) GetQuizHistory(ctx *fiber.Ctx) error { func (s *Service) GetQuizHistory(ctx *fiber.Ctx) error {
var req GetQuizHistoryReq var req GetQuizHistoryReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -400,7 +395,7 @@ func (r *Quiz) GetQuizHistory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided") return ctx.Status(fiber.StatusFailedDependency).SendString("no id provided")
} }
history, err := r.dal.QuizRepo.QuizHistory(ctx.Context(), quiz.QuizHistoryDeps{ history, err := s.dal.QuizRepo.QuizHistory(ctx.Context(), quiz.QuizHistoryDeps{
Id: req.Id, Id: req.Id,
Limit: req.Limit, Limit: req.Limit,
Offset: req.Page * req.Limit, Offset: req.Page * req.Limit,
@ -423,7 +418,7 @@ type DeactivateResp struct {
} }
// DeleteQuiz handler for fake delete quiz // DeleteQuiz handler for fake delete quiz
func (r *Quiz) DeleteQuiz(ctx *fiber.Ctx) error { func (s *Service) DeleteQuiz(ctx *fiber.Ctx) error {
var req DeactivateReq var req DeactivateReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -439,7 +434,7 @@ func (r *Quiz) DeleteQuiz(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("id for deleting is required") return ctx.Status(fiber.StatusFailedDependency).SendString("id for deleting is required")
} }
deleted, err := r.dal.QuizRepo.DeleteQuiz(ctx.Context(), accountId, req.Id) deleted, err := s.dal.QuizRepo.DeleteQuiz(ctx.Context(), accountId, req.Id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -455,7 +450,7 @@ func (r *Quiz) DeleteQuiz(ctx *fiber.Ctx) error {
} }
// ArchiveQuiz handler for archiving quiz // ArchiveQuiz handler for archiving quiz
func (r *Quiz) ArchiveQuiz(ctx *fiber.Ctx) error { func (s *Service) ArchiveQuiz(ctx *fiber.Ctx) error {
var req DeactivateReq var req DeactivateReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -470,7 +465,7 @@ func (r *Quiz) ArchiveQuiz(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusFailedDependency).SendString("id for archive quiz is required") return ctx.Status(fiber.StatusFailedDependency).SendString("id for archive quiz is required")
} }
archived, err := r.dal.QuizRepo.DeleteQuiz(ctx.Context(), accountId, req.Id) archived, err := s.dal.QuizRepo.DeleteQuiz(ctx.Context(), accountId, req.Id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -484,7 +479,7 @@ type QuizMoveReq struct {
Qid, AccountID string Qid, AccountID string
} }
func (r *Quiz) QuizMove(ctx *fiber.Ctx) error { func (s *Service) QuizMove(ctx *fiber.Ctx) error {
var req QuizMoveReq var req QuizMoveReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -494,7 +489,7 @@ func (r *Quiz) QuizMove(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request qid and accountID is required") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request qid and accountID is required")
} }
resp, err := r.dal.QuizRepo.QuizMove(ctx.Context(), req.Qid, req.AccountID) resp, err := s.dal.QuizRepo.QuizMove(ctx.Context(), req.Qid, req.AccountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -502,7 +497,7 @@ func (r *Quiz) QuizMove(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(resp) return ctx.Status(fiber.StatusOK).JSON(resp)
} }
func (r *Quiz) TemplateCopy(ctx *fiber.Ctx) error { func (s *Service) TemplateCopy(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
@ -521,7 +516,7 @@ func (r *Quiz) TemplateCopy(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request qid is required") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request qid is required")
} }
qizID, err := r.dal.QuizRepo.TemplateCopy(ctx.Context(), accountID, req.Qid) qizID, err := s.dal.QuizRepo.TemplateCopy(ctx.Context(), accountID, req.Qid)
if err != nil { if err != nil {
fmt.Println("TEMPLERR", err) fmt.Println("TEMPLERR", err)
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())

@ -1,13 +1,12 @@
package result package service
import ( import (
"bytes" "bytes"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/repository/result"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/result" "gitea.pena/SQuiz/core/tools"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/tools"
"strconv" "strconv"
"time" "time"
) )
@ -41,7 +40,7 @@ type ReqExportResponse struct {
Results []model.AnswerExport `json:"results"` Results []model.AnswerExport `json:"results"`
} }
func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error { func (s *Service) GetResultsByQuizID(ctx *fiber.Ctx) error {
payment := true // параметр для определения существования текущих привилегий юзера payment := true // параметр для определения существования текущих привилегий юзера
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
@ -60,7 +59,7 @@ func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format")
} }
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) account, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -70,7 +69,7 @@ func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error {
} }
} }
results, totalCount, err := r.dal.ResultRepo.GetQuizResults(ctx.Context(), quizID, result.GetQuizResDeps{ results, totalCount, err := s.dal.ResultRepo.GetQuizResults(ctx.Context(), quizID, result.GetQuizResDeps{
To: req.To, To: req.To,
From: req.From, From: req.From,
New: req.New, New: req.New,
@ -89,7 +88,7 @@ func (r *Result) GetResultsByQuizID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(resp) return ctx.Status(fiber.StatusOK).JSON(resp)
} }
func (r *Result) DelResultByID(ctx *fiber.Ctx) error { func (s *Service) DelResultByID(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("could not get account ID from token") return ctx.Status(fiber.StatusUnauthorized).SendString("could not get account ID from token")
@ -101,7 +100,7 @@ func (r *Result) DelResultByID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid result ID format") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid result ID format")
} }
isOwner, err := r.dal.ResultRepo.CheckResultOwner(ctx.Context(), resultID, accountID) isOwner, err := s.dal.ResultRepo.CheckResultOwner(ctx.Context(), resultID, accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -110,7 +109,7 @@ func (r *Result) DelResultByID(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusUnauthorized).SendString("not the owner of the result") return ctx.Status(fiber.StatusUnauthorized).SendString("not the owner of the result")
} }
if err := r.dal.ResultRepo.SoftDeleteResultByID(ctx.Context(), resultID); err != nil { if err := s.dal.ResultRepo.SoftDeleteResultByID(ctx.Context(), resultID); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -122,7 +121,7 @@ type ReqSeen struct {
Answers []int64 Answers []int64
} }
func (r *Result) SetStatus(ctx *fiber.Ctx) error { func (s *Service) SetStatus(ctx *fiber.Ctx) error {
var req ReqSeen var req ReqSeen
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -133,7 +132,7 @@ func (r *Result) SetStatus(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusUnauthorized).SendString("could not get account ID from token") return ctx.Status(fiber.StatusUnauthorized).SendString("could not get account ID from token")
} }
answers, err := r.dal.ResultRepo.CheckResultsOwner(ctx.Context(), req.Answers, accountID) answers, err := s.dal.ResultRepo.CheckResultsOwner(ctx.Context(), req.Answers, accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -142,14 +141,14 @@ func (r *Result) SetStatus(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusNotAcceptable).SendString("could not update some answers because you don't have rights") return ctx.Status(fiber.StatusNotAcceptable).SendString("could not update some answers because you don't have rights")
} }
if err := r.dal.ResultRepo.UpdateAnswersStatus(ctx.Context(), accountID, answers); err != nil { if err := s.dal.ResultRepo.UpdateAnswersStatus(ctx.Context(), accountID, answers); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
return ctx.Status(fiber.StatusOK).JSON(nil) return ctx.Status(fiber.StatusOK).JSON(nil)
} }
func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error { func (s *Service) ExportResultsToCSV(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
@ -166,7 +165,7 @@ func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("invalid request body") return ctx.Status(fiber.StatusBadRequest).SendString("invalid request body")
} }
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) account, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -177,17 +176,17 @@ func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
} }
} }
quiz, err := r.dal.QuizRepo.GetQuizById(ctx.Context(), accountID, quizID) quiz, err := s.dal.QuizRepo.GetQuizById(ctx.Context(), accountID, quizID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get quiz") return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get quiz")
} }
questions, err := r.dal.ResultRepo.GetQuestions(ctx.Context(), quizID) questions, err := s.dal.ResultRepo.GetQuestions(ctx.Context(), quizID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get questions") return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get questions")
} }
answers, err := r.dal.ResultRepo.GetQuizResultsCSV(ctx.Context(), quizID, result.GetQuizResDeps{ answers, err := s.dal.ResultRepo.GetQuizResultsCSV(ctx.Context(), quizID, result.GetQuizResDeps{
To: req.To, To: req.To,
From: req.From, From: req.From,
New: req.New, New: req.New,
@ -200,7 +199,7 @@ func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
buffer := new(bytes.Buffer) buffer := new(bytes.Buffer)
if err := tools.WriteDataToExcel(buffer, questions, answers, r.s3Prefix+quiz.Qid+"/"); err != nil { if err := tools.WriteDataToExcel(buffer, questions, answers, s.s3Prefix + quiz.Qid + "/"); err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to write data to Excel") return ctx.Status(fiber.StatusInternalServerError).SendString("failed to write data to Excel")
} }
@ -210,7 +209,7 @@ func (r *Result) ExportResultsToCSV(ctx *fiber.Ctx) error {
return ctx.Send(buffer.Bytes()) return ctx.Send(buffer.Bytes())
} }
func (r *Result) GetResultAnswers(ctx *fiber.Ctx) error { func (s *Service) GetResultAnswers(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx) accountID, ok := middleware.GetAccountId(ctx)
if !ok { if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
@ -221,7 +220,7 @@ func (r *Result) GetResultAnswers(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("invalid quiz ID") return ctx.Status(fiber.StatusBadRequest).SendString("invalid quiz ID")
} }
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID) account, err := s.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -232,11 +231,11 @@ func (r *Result) GetResultAnswers(ctx *fiber.Ctx) error {
} }
} }
answers, err := r.dal.ResultRepo.GetResultAnswers(ctx.Context(), resultID) answers, err := s.dal.ResultRepo.GetResultAnswers(ctx.Context(), resultID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get result answers") return ctx.Status(fiber.StatusInternalServerError).SendString("failed to get result answers")
} }
sortedAnswers, err := r.dal.QuestionRepo.ForSortingResults(ctx.Context(), answers) sortedAnswers, err := s.dal.QuestionRepo.ForSortingResults(ctx.Context(), answers)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed sort result answers") return ctx.Status(fiber.StatusInternalServerError).SendString("failed sort result answers")
} }

@ -1,9 +1,8 @@
package statistic package service
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/repository/statistics"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/statistics"
"strconv" "strconv"
) )
@ -29,7 +28,7 @@ type DeviceStatReq struct {
To uint64 To uint64
} }
func (r *Statistic) GetDeviceStatistics(ctx *fiber.Ctx) error { func (s *Service) GetDeviceStatistics(ctx *fiber.Ctx) error {
quizIDStr := ctx.Params("quizID") quizIDStr := ctx.Params("quizID")
quizID, err := strconv.ParseInt(quizIDStr, 10, 64) quizID, err := strconv.ParseInt(quizIDStr, 10, 64)
@ -42,7 +41,7 @@ func (r *Statistic) GetDeviceStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
deviceStats, err := r.dal.StatisticsRepo.GetDeviceStatistics(ctx.Context(), statistics.DeviceStatReq{ deviceStats, err := s.dal.StatisticsRepo.GetDeviceStatistics(ctx.Context(), statistics.DeviceStatReq{
QuizId: quizID, QuizId: quizID,
From: req.From, From: req.From,
To: req.To, To: req.To,
@ -58,7 +57,7 @@ type GeneralStatsResp struct {
Open, Result, AvTime, Conversion map[uint64]uint64 Open, Result, AvTime, Conversion map[uint64]uint64
} }
func (r *Statistic) GetGeneralStatistics(ctx *fiber.Ctx) error { func (s *Service) GetGeneralStatistics(ctx *fiber.Ctx) error {
quizIDStr := ctx.Params("quizID") quizIDStr := ctx.Params("quizID")
quizID, err := strconv.ParseInt(quizIDStr, 10, 64) quizID, err := strconv.ParseInt(quizIDStr, 10, 64)
if err != nil { if err != nil {
@ -70,7 +69,7 @@ func (r *Statistic) GetGeneralStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
generalStats, err := r.dal.StatisticsRepo.GetGeneralStatistics(ctx.Context(), statistics.DeviceStatReq{ generalStats, err := s.dal.StatisticsRepo.GetGeneralStatistics(ctx.Context(), statistics.DeviceStatReq{
QuizId: quizID, QuizId: quizID,
From: req.From, From: req.From,
To: req.To, To: req.To,
@ -82,7 +81,7 @@ func (r *Statistic) GetGeneralStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(generalStats) return ctx.Status(fiber.StatusOK).JSON(generalStats)
} }
func (r *Statistic) GetQuestionsStatistics(ctx *fiber.Ctx) error { func (s *Service) GetQuestionsStatistics(ctx *fiber.Ctx) error {
quizIDStr := ctx.Params("quizID") quizIDStr := ctx.Params("quizID")
quizID, err := strconv.ParseInt(quizIDStr, 0, 64) quizID, err := strconv.ParseInt(quizIDStr, 0, 64)
if err != nil { if err != nil {
@ -94,7 +93,7 @@ func (r *Statistic) GetQuestionsStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
questionsStats, err := r.dal.StatisticsRepo.GetQuestionsStatistics(ctx.Context(), statistics.DeviceStatReq{ questionsStats, err := s.dal.StatisticsRepo.GetQuestionsStatistics(ctx.Context(), statistics.DeviceStatReq{
QuizId: quizID, QuizId: quizID,
From: req.From, From: req.From,
To: req.To, To: req.To,
@ -110,13 +109,13 @@ type StatisticReq struct {
From, To uint64 // временные границы выбора статистики From, To uint64 // временные границы выбора статистики
} }
func (r *Statistic) AllServiceStatistics(ctx *fiber.Ctx) error { func (s *Service) AllServiceStatistics(ctx *fiber.Ctx) error {
var req StatisticReq var req StatisticReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
} }
allSvcStats, err := r.dal.StatisticsRepo.AllServiceStatistics(ctx.Context(), req.From, req.To) allSvcStats, err := s.dal.StatisticsRepo.AllServiceStatistics(ctx.Context(), req.From, req.To)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -124,7 +123,7 @@ func (r *Statistic) AllServiceStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(allSvcStats) return ctx.Status(fiber.StatusOK).JSON(allSvcStats)
} }
func (r *Statistic) GetPipelinesStatistics(ctx *fiber.Ctx) error { func (s *Service) GetPipelinesStatistics(ctx *fiber.Ctx) error {
var req StatisticReq var req StatisticReq
if err := ctx.BodyParser(&req); err != nil { if err := ctx.BodyParser(&req); err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data")
@ -136,7 +135,7 @@ func (r *Statistic) GetPipelinesStatistics(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format")
} }
result, err := r.chDAL.StatisticClickRepo.GetPipelinesStatistics(ctx.Context(), quizID, req.From, req.To) result, err := s.chDAL.StatisticClickRepo.GetPipelinesStatistics(ctx.Context(), quizID, req.From, req.To)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }

@ -1,42 +1,25 @@
package telegram package service
import ( import (
"errors" "errors"
//"fmt" //"fmt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
// "github.com/rs/xid" // "github.com/rs/xid"
//"path/filepath" //"path/filepath"
// "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" // "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors" "gitea.pena/SQuiz/common/pj_errors"
// "penahub.gitlab.yandexcloud.net/backend/quiz/core/clients/telegram" // "gitea.pena/SQuiz/core/clients/telegram"
// "penahub.gitlab.yandexcloud.net/backend/tdlib/client" // "penahub.gitlab.yandexcloud.net/backend/tdlib/client"
"strconv" "strconv"
) )
type Deps struct {
DAL *dal.DAL
TelegramClient *telegram.TelegramClient
}
type Telegram struct {
dal *dal.DAL
telegramClient *telegram.TelegramClient
}
func NewTelegramController(deps Deps) *Telegram {
return &Telegram{
dal: deps.DAL,
telegramClient: deps.TelegramClient,
}
}
type Message struct { type Message struct {
Type string `json:"type"` Type string `json:"type"`
Data string `json:"data"` Data string `json:"data"`
} }
func (r *Telegram) GetPoolTgAccounts(ctx *fiber.Ctx) error { func (s *Service) GetPoolTgAccounts(ctx *fiber.Ctx) error {
allAccounts, err := r.dal.TgRepo.GetAllTgAccounts(ctx.Context()) allAccounts, err := s.dal.TgRepo.GetAllTgAccounts(ctx.Context())
if err != nil { if err != nil {
switch { switch {
case errors.Is(err, pj_errors.ErrNotFound): case errors.Is(err, pj_errors.ErrNotFound):
@ -132,7 +115,7 @@ func (s *Service) AddingTgAccount(ctx *fiber.Ctx) error {
return nil return nil
} }
func (r *Telegram) SettingTgCode(ctx *fiber.Ctx) error { func (s *Service) SettingTgCode(ctx *fiber.Ctx) error {
var req struct { var req struct {
Code string `json:"code"` Code string `json:"code"`
Signature string `json:"signature"` Signature string `json:"signature"`
@ -144,6 +127,7 @@ func (r *Telegram) SettingTgCode(ctx *fiber.Ctx) error {
if req.Code == "" || req.Signature == "" { if req.Code == "" || req.Signature == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("empty required fields") return ctx.Status(fiber.StatusBadRequest).SendString("empty required fields")
} }
// data, ok := s.telegramClient.GetFromMap(req.Signature) // data, ok := s.telegramClient.GetFromMap(req.Signature)
// if !ok { // if !ok {
// return ctx.Status(fiber.StatusBadRequest).SendString("Invalid id, don't have data") // return ctx.Status(fiber.StatusBadRequest).SendString("Invalid id, don't have data")
@ -178,12 +162,12 @@ func (r *Telegram) SettingTgCode(ctx *fiber.Ctx) error {
// } // }
} }
func (r *Telegram) DeleteTgAccountByID(ctx *fiber.Ctx) error { func (s *Service) DeleteTgAccountByID(ctx *fiber.Ctx) error {
id, err := strconv.ParseInt(ctx.Params("id"), 10, 64) id, err := strconv.ParseInt(ctx.Params("id"), 10, 64)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("invalid id format") return ctx.Status(fiber.StatusBadRequest).SendString("invalid id format")
} }
err = r.dal.TgRepo.SoftDeleteTgAccount(ctx.Context(), id) err = s.dal.TgRepo.SoftDeleteTgAccount(ctx.Context(), id)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }

@ -1,13 +1,13 @@
package rpc_controllers package rpc_service
import ( import (
"context" "context"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/dal"
notifyer2 "penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/proto/notifyer" "gitea.pena/SQuiz/core/proto/notifyer"
) )
type MailNotify struct { type MailNotify struct {
notifyer2.UnimplementedQuizServiceServer notifyer.UnimplementedQuizServiceServer
dal *dal.DAL dal *dal.DAL
} }
@ -17,23 +17,23 @@ func NewMailNotify(dal *dal.DAL) *MailNotify {
} }
} }
func (m *MailNotify) GetQuizzes(ctx context.Context, in *notifyer2.GetQuizzesRequest) (*notifyer2.GetQuizzesResponse, error) { func (m *MailNotify) GetQuizzes(ctx context.Context, in *notifyer.GetQuizzesRequest) (*notifyer.GetQuizzesResponse, error) {
ids, err := m.dal.QuizRepo.GetAllQuizzesID(ctx, in.AccountId) ids, err := m.dal.QuizRepo.GetAllQuizzesID(ctx, in.AccountId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resp := &notifyer2.GetQuizzesResponse{ resp := &notifyer.GetQuizzesResponse{
QuizIds: ids, QuizIds: ids,
} }
return resp, nil return resp, nil
} }
func (m *MailNotify) GetStartedQuizzes(ctx context.Context, in *notifyer2.GetStartedQuizzesRequest) (*notifyer2.GetStartedQuizzesResponse, error) { func (m *MailNotify) GetStartedQuizzes(ctx context.Context, in *notifyer.GetStartedQuizzesRequest) (*notifyer.GetStartedQuizzesResponse, error) {
ids, err := m.dal.QuizRepo.GetStartedQuizzesID(ctx, in.AccountId) ids, err := m.dal.QuizRepo.GetStartedQuizzesID(ctx, in.AccountId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resp := &notifyer2.GetStartedQuizzesResponse{ resp := &notifyer.GetStartedQuizzesResponse{
QuizIds: ids, QuizIds: ids,
} }
return resp, nil return resp, nil

@ -9,8 +9,8 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"google.golang.org/grpc" "google.golang.org/grpc"
"net" "net"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/initialize" "gitea.pena/SQuiz/core/initialize"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/proto/notifyer" "gitea.pena/SQuiz/core/proto/notifyer"
"time" "time"
) )
@ -58,7 +58,7 @@ func (g *GRPC) Stop(_ context.Context) error {
return nil return nil
} }
func (g *GRPC) Register(reg initialize.GRpcControllers) *GRPC { func (g *GRPC) Register(reg *initialize.RpcRegister) *GRPC {
notifyer.RegisterQuizServiceServer(g.grpc, reg.MailNotify) notifyer.RegisterQuizServiceServer(g.grpc, reg.MailNotify)
// another // another
return g return g

@ -2,7 +2,7 @@ package tools
import ( import (
"fmt" "fmt"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege" "gitea.pena/PenaSide/common/privilege"
"time" "time"
) )

@ -12,7 +12,7 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"path/filepath" "path/filepath"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/model"
"regexp" "regexp"
"sort" "sort"
"strconv" "strconv"

@ -5,9 +5,9 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/clients/telegram" "gitea.pena/SQuiz/core/clients/telegram"
"strconv" "strconv"
"time" "time"
) )

11
main.go Normal file

@ -0,0 +1,11 @@
package main
import (
"github.com/skeris/appInit"
"gitea.pena/SQuiz/core/app"
_ "gitea.pena/PenaSide/linters-golang/pkg/dummy"
)
func main() {
appInit.Initialize(app.New, app.Options{})
}

@ -3,10 +3,10 @@ package service
import ( import (
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal" "gitea.pena/SQuiz/common/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/brokers" "gitea.pena/SQuiz/core/brokers"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/clients/auth" "gitea.pena/SQuiz/core/clients/auth"
// "penahub.gitlab.yandexcloud.net/backend/quiz/core/clients/telegram" // "gitea.pena/SQuiz/core/clients/telegram"
) )
// Service is an entity for http requests handling // Service is an entity for http requests handling

@ -5,8 +5,8 @@ import (
"github.com/pioz/faker" "github.com/pioz/faker"
"go.uber.org/zap" "go.uber.org/zap"
"log" "log"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/initialize" "gitea.pena/SQuiz/core/brokers"
"penahub.gitlab.yandexcloud.net/backend/quiz/core/internal/brokers" "gitea.pena/SQuiz/core/initialize"
"testing" "testing"
"time" "time"
) )

@ -3,8 +3,8 @@ package tests
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege" "gitea.pena/PenaSide/common/privilege"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/model"
"testing" "testing"
) )

@ -5,9 +5,9 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/pioz/faker" "github.com/pioz/faker"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "gitea.pena/SQuiz/common/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/answerwc" "gitea.pena/SQuiz/worker/answerwc"
"penahub.gitlab.yandexcloud.net/backend/quiz/worker.git/clients/mailclient" "gitea.pena/SQuiz/common/clients"
"testing" "testing"
"time" "time"
) )