separate one server on two admin and client servers
This commit is contained in:
parent
c28bb6bb2d
commit
8ea49a32ac
16
go.sum
16
go.sum
@ -5,6 +5,7 @@ github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHg
|
|||||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||||
github.com/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/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 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
|
||||||
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
|
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
|
||||||
@ -24,6 +25,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
|||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
|
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
|
||||||
|
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-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||||
@ -91,6 +94,7 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042
|
|||||||
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
|
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4=
|
github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4=
|
||||||
github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
@ -120,6 +124,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
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.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
|
github.com/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/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.15.4 h1:qBCkHaiutetnrXjAUWA99D9FEcZVMt2AYwkH3vWEQTw=
|
github.com/twmb/franz-go v1.15.4 h1:qBCkHaiutetnrXjAUWA99D9FEcZVMt2AYwkH3vWEQTw=
|
||||||
@ -150,8 +156,8 @@ go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwD
|
|||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||||
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
||||||
@ -159,8 +165,6 @@ go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
|
|||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
||||||
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||||
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
|
|
||||||
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
|
|
||||||
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
@ -287,10 +291,6 @@ 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-20240202120244-c4ef330cfe5d h1:gbaDt35HMDqOK84WYmDIlXMI7rstUcRqNttaT6Kx1do=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607142502-8257e6c4aa5a h1:dGW8ErUVdwGJBq6uc5AHYn6Yt10CDNkMIpV+yrDDTLs=
|
|
||||||
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240607142502-8257e6c4aa5a/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE=
|
|
||||||
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 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/penahub_common v0.0.0-20240607202348-efe5f2bf3e8c/go.mod h1:+bPxq2wfW5S1gd+83vZYmHm33AE7nEBfznWS8AM1TKE=
|
||||||
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240725131128-102f5d56f156 h1:IpItA0b6uvawjNk3KzI5X92Z7Iwn1FX7s2TfcJ8tRus=
|
penahub.gitlab.yandexcloud.net/devops/linters/golang.git v0.0.0-20240725131128-102f5d56f156 h1:IpItA0b6uvawjNk3KzI5X92Z7Iwn1FX7s2TfcJ8tRus=
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"codeword/internal/controller/promocode"
|
"codeword/internal/controller/admin/admin_promocode"
|
||||||
"codeword/internal/controller/recovery"
|
"codeword/internal/controller/admin/admin_recovery"
|
||||||
|
"codeword/internal/controller/client/client_promocode"
|
||||||
|
"codeword/internal/controller/client/client_recovery"
|
||||||
"codeword/internal/controller/rpc_controllers"
|
"codeword/internal/controller/rpc_controllers"
|
||||||
"codeword/internal/initialize"
|
"codeword/internal/initialize"
|
||||||
"codeword/internal/models"
|
"codeword/internal/models"
|
||||||
@ -128,13 +130,21 @@ func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger, build B
|
|||||||
|
|
||||||
jwtUtil := middleware.NewJWT(&cfg)
|
jwtUtil := middleware.NewJWT(&cfg)
|
||||||
|
|
||||||
recoveryController := recovery.NewRecoveryController(recovery.Deps{
|
clientRecoveryController := client_recovery.NewRecoveryController(client_recovery.Deps{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
Service: recoveryService,
|
Service: recoveryService,
|
||||||
DefaultURL: cfg.DefaultRedirectionURL,
|
DefaultURL: cfg.DefaultRedirectionURL,
|
||||||
RecoveryURL: cfg.RecoveryUrl,
|
RecoveryURL: cfg.RecoveryUrl,
|
||||||
})
|
})
|
||||||
promoCodeController := promocode.NewPromoCodeController(promocode.Deps{Logger: logger, PromoCodeService: promoService})
|
clientPromoCodeController := client_promocode.NewPromoCodeController(client_promocode.Deps{Logger: logger, PromoCodeService: promoService})
|
||||||
|
|
||||||
|
adminRecoveryController := admin_recovery.NewRecoveryController(admin_recovery.Deps{
|
||||||
|
Logger: logger,
|
||||||
|
Service: recoveryService,
|
||||||
|
DefaultURL: cfg.DefaultRedirectionURL,
|
||||||
|
RecoveryURL: cfg.RecoveryUrl,
|
||||||
|
})
|
||||||
|
adminPromoCodeController := admin_promocode.NewPromoCodeController(admin_promocode.Deps{Logger: logger, PromoCodeService: promoService})
|
||||||
controllerRpc := rpc_controllers.InitRpcControllers(promoService)
|
controllerRpc := rpc_controllers.InitRpcControllers(promoService)
|
||||||
|
|
||||||
grpcServer, err := grpc.NewGRPC(logger)
|
grpcServer, err := grpc.NewGRPC(logger)
|
||||||
@ -159,16 +169,30 @@ func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger, build B
|
|||||||
go recoveryWC.Start(ctx)
|
go recoveryWC.Start(ctx)
|
||||||
go purgeWC.Start(ctx)
|
go purgeWC.Start(ctx)
|
||||||
|
|
||||||
server := httpserver.NewServer(httpserver.ServerConfig{
|
clientServer := httpserver.NewServer(httpserver.ServerConfig{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
Controllers: []httpserver.Controller{recoveryController, promoCodeController},
|
Controllers: []httpserver.Controller{clientRecoveryController, clientPromoCodeController},
|
||||||
|
Hlogger: loggerHlog,
|
||||||
|
JWT: jwtUtil,
|
||||||
|
})
|
||||||
|
|
||||||
|
adminServer := httpserver.NewServer(httpserver.ServerConfig{
|
||||||
|
Logger: logger,
|
||||||
|
Controllers: []httpserver.Controller{adminRecoveryController, adminPromoCodeController},
|
||||||
Hlogger: loggerHlog,
|
Hlogger: loggerHlog,
|
||||||
JWT: jwtUtil,
|
JWT: jwtUtil,
|
||||||
})
|
})
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := server.Start(cfg.HTTPHost + ":" + cfg.HTTPPort); err != nil {
|
if err := clientServer.Start(cfg.HTTPClientHost + ":" + cfg.HTTPClientPort); err != nil {
|
||||||
logger.Error("Server startup error", zap.Error(err))
|
logger.Error("Client server startup error", zap.Error(err))
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
if err := adminServer.Start(cfg.HTTPAdminHost + ":" + cfg.HTTPAdminPort); err != nil {
|
||||||
|
logger.Error("Admin server startup error", zap.Error(err))
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -178,9 +202,11 @@ func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger, build B
|
|||||||
Port: cfg.GrpcPort,
|
Port: cfg.GrpcPort,
|
||||||
})
|
})
|
||||||
|
|
||||||
server.ListRoutes()
|
clientServer.ListRoutes()
|
||||||
|
adminServer.ListRoutes()
|
||||||
|
|
||||||
shutdownGroup.Add(closer.CloserFunc(server.Shutdown))
|
shutdownGroup.Add(closer.CloserFunc(clientServer.Shutdown))
|
||||||
|
shutdownGroup.Add(closer.CloserFunc(adminServer.Shutdown))
|
||||||
shutdownGroup.Add(closer.CloserFunc(grpcServer.Stop))
|
shutdownGroup.Add(closer.CloserFunc(grpcServer.Stop))
|
||||||
shutdownGroup.Add(closer.CloserFunc(mdb.Client().Disconnect))
|
shutdownGroup.Add(closer.CloserFunc(mdb.Client().Disconnect))
|
||||||
shutdownGroup.Add(closer.CloserFunc(recoveryWC.Stop))
|
shutdownGroup.Add(closer.CloserFunc(recoveryWC.Stop))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package promocode
|
package admin_promocode
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"codeword/internal/models"
|
"codeword/internal/models"
|
||||||
@ -174,67 +174,6 @@ func (p *PromoCodeController) GetList(c *fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
|
|
||||||
userID := middleware.ExtractUserID(c)
|
|
||||||
hlogger := log_mw.ExtractLogger(c)
|
|
||||||
fmt.Println("SKER1", userID)
|
|
||||||
if userID == "" {
|
|
||||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "failed to get jwt payload"})
|
|
||||||
}
|
|
||||||
|
|
||||||
var req models.ActivateReq
|
|
||||||
if err := c.BodyParser(&req); err != nil {
|
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.Codeword == "" && req.FastLink == "" {
|
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "codeword or fastlink is required"})
|
|
||||||
}
|
|
||||||
fmt.Println("SKER2", req)
|
|
||||||
|
|
||||||
promocode, err := p.promoCodeService.ActivatePromo(c.Context(), &req, userID)
|
|
||||||
fmt.Println("SKER3", err)
|
|
||||||
if err != nil {
|
|
||||||
p.logger.Error("Failed to activate promocode", zap.Error(err))
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case errors.Is(err, repository.ErrPromoCodeNotFound):
|
|
||||||
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "PromoCode not found"})
|
|
||||||
case errors.Is(err, repository.ErrPromoCodeAlreadyActivated):
|
|
||||||
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "PromoCode already activated"})
|
|
||||||
case errors.Is(err, repository.ErrPromoCodeExpired):
|
|
||||||
hlogger.Emit(models.InfoPromocodeDeadlined{
|
|
||||||
|
|
||||||
CtxID: promocode.ID.String(),
|
|
||||||
})
|
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
|
|
||||||
case errors.Is(err, repository.ErrPromoCodeExhausted):
|
|
||||||
hlogger.Emit(models.InfoPromocodeExhausted{
|
|
||||||
CtxID: promocode.ID.String(),
|
|
||||||
})
|
|
||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "PromoCode exhausted"})
|
|
||||||
default:
|
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.Codeword != "" {
|
|
||||||
hlogger.Emit(models.InfoPromocodeActivated{
|
|
||||||
CtxID: promocode.ID.String(),
|
|
||||||
CtxUserID: userID,
|
|
||||||
CtxCode: req.Codeword,
|
|
||||||
})
|
|
||||||
} else if req.FastLink != "" {
|
|
||||||
hlogger.Emit(models.InfoFastlinkActivated{
|
|
||||||
CtxID: promocode.ID.String(),
|
|
||||||
CtxUserID: userID,
|
|
||||||
CtxPromocodeID: req.FastLink,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Status(fiber.StatusOK).JSON(models.ActivateResp{Greetings: promocode.Greetings})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PromoCodeController) Delete(c *fiber.Ctx) error {
|
func (p *PromoCodeController) Delete(c *fiber.Ctx) error {
|
||||||
userID := middleware.ExtractUserID(c)
|
userID := middleware.ExtractUserID(c)
|
||||||
hlogger := log_mw.ExtractLogger(c)
|
hlogger := log_mw.ExtractLogger(c)
|
@ -1,4 +1,4 @@
|
|||||||
package promocode
|
package admin_promocode
|
||||||
|
|
||||||
import "github.com/gofiber/fiber/v2"
|
import "github.com/gofiber/fiber/v2"
|
||||||
|
|
||||||
@ -6,7 +6,6 @@ func (p *PromoCodeController) Register(router fiber.Router) {
|
|||||||
router.Post("/create", p.CreatePromoCode)
|
router.Post("/create", p.CreatePromoCode)
|
||||||
router.Put("/edit", p.EditPromoCode)
|
router.Put("/edit", p.EditPromoCode)
|
||||||
router.Post("/getList", p.GetList)
|
router.Post("/getList", p.GetList)
|
||||||
router.Post("/activate", p.Activate)
|
|
||||||
router.Delete("/:promocodeID", p.Delete)
|
router.Delete("/:promocodeID", p.Delete)
|
||||||
router.Post("/fastlink", p.CreateFastLink)
|
router.Post("/fastlink", p.CreateFastLink)
|
||||||
router.Post("/stats", p.GetStats)
|
router.Post("/stats", p.GetStats)
|
@ -0,0 +1,50 @@
|
|||||||
|
package admin_recovery
|
||||||
|
|
||||||
|
import (
|
||||||
|
"codeword/internal/services"
|
||||||
|
"fmt"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Deps struct {
|
||||||
|
Logger *zap.Logger
|
||||||
|
Service *services.RecoveryService
|
||||||
|
DefaultURL string
|
||||||
|
RecoveryURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
type RecoveryController struct {
|
||||||
|
logger *zap.Logger
|
||||||
|
service *services.RecoveryService
|
||||||
|
defaultURL string
|
||||||
|
recoveryURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRecoveryController(deps Deps) *RecoveryController {
|
||||||
|
return &RecoveryController{
|
||||||
|
logger: deps.Logger,
|
||||||
|
service: deps.Service,
|
||||||
|
defaultURL: deps.DefaultURL,
|
||||||
|
recoveryURL: deps.RecoveryURL,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RecoveryController) HandleLiveness(c *fiber.Ctx) error {
|
||||||
|
return c.SendStatus(fiber.StatusOK)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RecoveryController) HandlePingDB(c *fiber.Ctx) error {
|
||||||
|
startTime := time.Now()
|
||||||
|
if err := r.service.Ping(c.Context()); err != nil {
|
||||||
|
r.logger.Error("Failed to ping the database", zap.Error(err))
|
||||||
|
return c.Status(fiber.StatusServiceUnavailable).SendString("DB ping failed")
|
||||||
|
}
|
||||||
|
duration := time.Since(startTime)
|
||||||
|
|
||||||
|
durationMillis := duration.Milliseconds()
|
||||||
|
responseMessage := fmt.Sprintf("DB ping success - Time taken: %d ms", durationMillis)
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).SendString(responseMessage)
|
||||||
|
}
|
12
internal/controller/admin/admin_recovery/route.go
Normal file
12
internal/controller/admin/admin_recovery/route.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package admin_recovery
|
||||||
|
|
||||||
|
import "github.com/gofiber/fiber/v2"
|
||||||
|
|
||||||
|
func (r *RecoveryController) Register(router fiber.Router) {
|
||||||
|
router.Get("/liveness", r.HandleLiveness)
|
||||||
|
router.Get("/readiness", r.HandlePingDB)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RecoveryController) Name() string {
|
||||||
|
return ""
|
||||||
|
}
|
@ -0,0 +1,91 @@
|
|||||||
|
package client_promocode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"codeword/internal/models"
|
||||||
|
"codeword/internal/repository"
|
||||||
|
"codeword/internal/services"
|
||||||
|
"codeword/internal/utils/middleware"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Deps struct {
|
||||||
|
Logger *zap.Logger
|
||||||
|
PromoCodeService *services.PromoCodeService
|
||||||
|
}
|
||||||
|
|
||||||
|
type PromoCodeController struct {
|
||||||
|
logger *zap.Logger
|
||||||
|
promoCodeService *services.PromoCodeService
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPromoCodeController(deps Deps) *PromoCodeController {
|
||||||
|
return &PromoCodeController{
|
||||||
|
logger: deps.Logger,
|
||||||
|
promoCodeService: deps.PromoCodeService,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PromoCodeController) Activate(c *fiber.Ctx) error {
|
||||||
|
userID := middleware.ExtractUserID(c)
|
||||||
|
hlogger := log_mw.ExtractLogger(c)
|
||||||
|
fmt.Println("SKER1", userID)
|
||||||
|
if userID == "" {
|
||||||
|
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "failed to get jwt payload"})
|
||||||
|
}
|
||||||
|
|
||||||
|
var req models.ActivateReq
|
||||||
|
if err := c.BodyParser(&req); err != nil {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Codeword == "" && req.FastLink == "" {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "codeword or fastlink is required"})
|
||||||
|
}
|
||||||
|
fmt.Println("SKER2", req)
|
||||||
|
|
||||||
|
promocode, err := p.promoCodeService.ActivatePromo(c.Context(), &req, userID)
|
||||||
|
fmt.Println("SKER3", err)
|
||||||
|
if err != nil {
|
||||||
|
p.logger.Error("Failed to activate promocode", zap.Error(err))
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case errors.Is(err, repository.ErrPromoCodeNotFound):
|
||||||
|
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "PromoCode not found"})
|
||||||
|
case errors.Is(err, repository.ErrPromoCodeAlreadyActivated):
|
||||||
|
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "PromoCode already activated"})
|
||||||
|
case errors.Is(err, repository.ErrPromoCodeExpired):
|
||||||
|
hlogger.Emit(models.InfoPromocodeDeadlined{
|
||||||
|
|
||||||
|
CtxID: promocode.ID.String(),
|
||||||
|
})
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
|
||||||
|
case errors.Is(err, repository.ErrPromoCodeExhausted):
|
||||||
|
hlogger.Emit(models.InfoPromocodeExhausted{
|
||||||
|
CtxID: promocode.ID.String(),
|
||||||
|
})
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "PromoCode exhausted"})
|
||||||
|
default:
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Codeword != "" {
|
||||||
|
hlogger.Emit(models.InfoPromocodeActivated{
|
||||||
|
CtxID: promocode.ID.String(),
|
||||||
|
CtxUserID: userID,
|
||||||
|
CtxCode: req.Codeword,
|
||||||
|
})
|
||||||
|
} else if req.FastLink != "" {
|
||||||
|
hlogger.Emit(models.InfoFastlinkActivated{
|
||||||
|
CtxID: promocode.ID.String(),
|
||||||
|
CtxUserID: userID,
|
||||||
|
CtxPromocodeID: req.FastLink,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Status(fiber.StatusOK).JSON(models.ActivateResp{Greetings: promocode.Greetings})
|
||||||
|
}
|
11
internal/controller/client/client_promocode/route.go
Normal file
11
internal/controller/client/client_promocode/route.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package client_promocode
|
||||||
|
|
||||||
|
import "github.com/gofiber/fiber/v2"
|
||||||
|
|
||||||
|
func (p *PromoCodeController) Register(router fiber.Router) {
|
||||||
|
router.Post("/activate", p.Activate)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PromoCodeController) Name() string {
|
||||||
|
return "promocode"
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package recovery
|
package client_recovery
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"codeword/internal/models"
|
"codeword/internal/models"
|
||||||
@ -6,7 +6,6 @@ import (
|
|||||||
"codeword/internal/services"
|
"codeword/internal/services"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
|
"penahub.gitlab.yandexcloud.net/backend/penahub_common/log_mw"
|
||||||
@ -36,24 +35,6 @@ func NewRecoveryController(deps Deps) *RecoveryController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RecoveryController) HandleLiveness(c *fiber.Ctx) error {
|
|
||||||
return c.SendStatus(fiber.StatusOK)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RecoveryController) HandlePingDB(c *fiber.Ctx) error {
|
|
||||||
startTime := time.Now()
|
|
||||||
if err := r.service.Ping(c.Context()); err != nil {
|
|
||||||
r.logger.Error("Failed to ping the database", zap.Error(err))
|
|
||||||
return c.Status(fiber.StatusServiceUnavailable).SendString("DB ping failed")
|
|
||||||
}
|
|
||||||
duration := time.Since(startTime)
|
|
||||||
|
|
||||||
durationMillis := duration.Milliseconds()
|
|
||||||
responseMessage := fmt.Sprintf("DB ping success - Time taken: %d ms", durationMillis)
|
|
||||||
|
|
||||||
return c.Status(fiber.StatusOK).SendString(responseMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error {
|
func (r *RecoveryController) HandleRecoveryRequest(c *fiber.Ctx) error {
|
||||||
hlogger := log_mw.ExtractLogger(c)
|
hlogger := log_mw.ExtractLogger(c)
|
||||||
var req models.RecoveryRequest
|
var req models.RecoveryRequest
|
@ -1,10 +1,8 @@
|
|||||||
package recovery
|
package client_recovery
|
||||||
|
|
||||||
import "github.com/gofiber/fiber/v2"
|
import "github.com/gofiber/fiber/v2"
|
||||||
|
|
||||||
func (r *RecoveryController) Register(router fiber.Router) {
|
func (r *RecoveryController) Register(router fiber.Router) {
|
||||||
router.Get("/liveness", r.HandleLiveness)
|
|
||||||
router.Get("/readiness", r.HandlePingDB)
|
|
||||||
router.Post("/recover", r.HandleRecoveryRequest)
|
router.Post("/recover", r.HandleRecoveryRequest)
|
||||||
router.Get("/recover/:sign", r.HandleRecoveryLink)
|
router.Get("/recover/:sign", r.HandleRecoveryLink)
|
||||||
}
|
}
|
@ -8,8 +8,10 @@ import (
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AppName string `env:"APP_NAME" envDefault:"codeword"`
|
AppName string `env:"APP_NAME" envDefault:"codeword"`
|
||||||
HTTPHost string `env:"HTTP_HOST" envDefault:"localhost"`
|
HTTPClientHost string `env:"HTTP_CLIENT_HOST" envDefault:"localhost"`
|
||||||
HTTPPort string `env:"HTTP_PORT" envDefault:"3000"`
|
HTTPClientPort string `env:"HTTP_CLIENT_PORT" envDefault:"3000"`
|
||||||
|
HTTPAdminHost string `env:"HTTP_ADMIN_HOST" envDefault:"localhost"`
|
||||||
|
HTTPAdminPort string `env:"HTTP_ADMIN_PORT" envDefault:"3001"`
|
||||||
MongoHost string `env:"MONGO_HOST" envDefault:"127.0.0.1"`
|
MongoHost string `env:"MONGO_HOST" envDefault:"127.0.0.1"`
|
||||||
MongoPort string `env:"MONGO_PORT" envDefault:"27020"`
|
MongoPort string `env:"MONGO_PORT" envDefault:"27020"`
|
||||||
MongoUser string `env:"MONGO_USER" envDefault:"test"`
|
MongoUser string `env:"MONGO_USER" envDefault:"test"`
|
||||||
|
Loading…
Reference in New Issue
Block a user