From 510a5c310602ae0349d7943db5dcc0ab25827127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=93=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 16 Oct 2025 10:24:29 +0300 Subject: [PATCH 1/4] fix: Fixed deps. --- go.mod | 4 +- go.sum | 46 ++++++++++--------- internal/domains/profile/service/entities.go | 2 +- .../domains/profile/service/getVacancies.go | 2 +- .../domains/profile/service/sendUserData.go | 2 +- .../infrastructure/botService/entities.go | 2 +- internal/infrastructure/grpcClient/client.go | 2 +- 7 files changed, 31 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 797133b..63be132 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService go 1.24.0 require ( + gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement v1.0.1 github.com/caarlos0/env/v11 v11.3.1 github.com/gen2brain/heic v0.4.5 github.com/google/uuid v1.6.0 @@ -10,11 +11,11 @@ require ( github.com/lib/pq v1.10.9 github.com/minio/minio-go/v7 v7.0.95 github.com/pdfcpu/pdfcpu v0.11.0 + google.golang.org/grpc v1.76.0 gopkg.in/telebot.v4 v4.0.0-beta.5 ) require ( - gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet v1.0.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/ebitengine/purego v0.8.3 // indirect @@ -42,7 +43,6 @@ require ( golang.org/x/sys v0.37.0 // indirect golang.org/x/text v0.30.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect - google.golang.org/grpc v1.76.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 391f7e8..5ca49d5 100644 --- a/go.sum +++ b/go.sum @@ -56,8 +56,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet v1.0.0 h1:TSp1RRgK8kP2zeisJ6m5w/HKx0z8Olw6Scw/hA6B0To= -gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet v1.0.0/go.mod h1:B8UYYJwP8CyYUu0jleNJE610XDrCXTbcZZDxaPJ2sLE= +gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement v1.0.1 h1:XPzDbAvWpG6vV9tKECh4txyGA4OurajC8l0ou4l+KJc= +gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement v1.0.1/go.mod h1:gUs2cfj4yT3XimzRb4cgDshlzb4HpH84etF63It0CBc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -139,6 +139,10 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= @@ -183,6 +187,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -200,6 +206,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -287,8 +295,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.11 h1:0OwqZRYI2rFrjS4kvkDnqJkKHdHaRnCm68/DY4OxRzU= -github.com/klauspost/cpuid/v2 v2.2.11/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -326,8 +332,6 @@ github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxU github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/minio/crc64nvme v1.0.2 h1:6uO1UxGAD+kwqWWp7mBFsi5gAse66C4NXO8cmcVculg= -github.com/minio/crc64nvme v1.0.2/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/crc64nvme v1.1.1 h1:8dwx/Pz49suywbO+auHCBpCtlW1OfpcLN7wYgVR6wAI= github.com/minio/crc64nvme v1.1.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= @@ -422,8 +426,6 @@ github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tetratelabs/wazero v1.9.0 h1:IcZ56OuxrtaEz8UYNRHBrUa9bYeX9oVY93KspZZBf/I= github.com/tetratelabs/wazero v1.9.0/go.mod h1:TSbcXCfFP0L2FGkRPxHphadXPjo1T6W+CseNNY7EkjM= -github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww= -github.com/tinylib/msgp v1.3.0/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/tinylib/msgp v1.4.0 h1:SYOeDRiydzOw9kSiwdYp9UcBgPFtLU2WDHaJXyHruf8= github.com/tinylib/msgp v1.4.0/go.mod h1:cvjFkb4RiC8qSBOPMGPSzSAx47nAsfhLVTCZZNuHv5o= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= @@ -443,6 +445,18 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= +go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -457,10 +471,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -547,9 +557,6 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -662,9 +669,6 @@ golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -678,9 +682,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= -golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -747,6 +748,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -870,7 +873,6 @@ google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc= google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= diff --git a/internal/domains/profile/service/entities.go b/internal/domains/profile/service/entities.go index e5dae5f..efd11b5 100644 --- a/internal/domains/profile/service/entities.go +++ b/internal/domains/profile/service/entities.go @@ -4,7 +4,7 @@ import ( "context" "io" - pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang" + pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/types" "github.com/minio/minio-go/v7" "google.golang.org/grpc" diff --git a/internal/domains/profile/service/getVacancies.go b/internal/domains/profile/service/getVacancies.go index 7674d01..b57eb25 100644 --- a/internal/domains/profile/service/getVacancies.go +++ b/internal/domains/profile/service/getVacancies.go @@ -5,7 +5,7 @@ import ( "errors" "time" - pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang" + pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants" ) diff --git a/internal/domains/profile/service/sendUserData.go b/internal/domains/profile/service/sendUserData.go index 7d2427d..2ee1065 100644 --- a/internal/domains/profile/service/sendUserData.go +++ b/internal/domains/profile/service/sendUserData.go @@ -5,7 +5,7 @@ import ( "errors" "time" - pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang" + pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/types" ) diff --git a/internal/infrastructure/botService/entities.go b/internal/infrastructure/botService/entities.go index 74d6a35..b688c7d 100644 --- a/internal/infrastructure/botService/entities.go +++ b/internal/infrastructure/botService/entities.go @@ -7,7 +7,7 @@ import ( "io" "time" - pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang" + pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" "github.com/jmoiron/sqlx" "github.com/minio/minio-go/v7" "google.golang.org/grpc" diff --git a/internal/infrastructure/grpcClient/client.go b/internal/infrastructure/grpcClient/client.go index b0b7438..e456a6c 100644 --- a/internal/infrastructure/grpcClient/client.go +++ b/internal/infrastructure/grpcClient/client.go @@ -3,7 +3,7 @@ package grpcClient import ( "context" - pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang" + pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" "google.golang.org/grpc" ) -- 2.45.2 From 7a4e37ea91025757301339b83a377716157bffbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=93=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 16 Oct 2025 10:30:20 +0300 Subject: [PATCH 2/4] fix: Fixed bot messages. --- internal/application/constants/botContent.go | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/internal/application/constants/botContent.go b/internal/application/constants/botContent.go index b52de30..ec72bba 100644 --- a/internal/application/constants/botContent.go +++ b/internal/application/constants/botContent.go @@ -7,7 +7,7 @@ const ( AnswerQuestionsBotButton = "Ответить на вопросы" UploadResumeBotButton = "📎 Загрузить резюме" JobSearchBotButton = "Хочу устроиться на работу" - MarketAnalyticsBotButton = "Хочу понимать что происходит на рынке" + MarketAnalyticsBotButton = "Хочу понимать, что происходит на рынке" SkipBotButton = "Пропустить" ) @@ -27,27 +27,27 @@ const ( // ---------------------------------------- const ( StartBotMessage = "Привет! Я карьерный ассистент Vision Career: помогу с работой, интервью и расскажу новости по рынку, специально для тебя.\nС чего начнём?" - ProfileCompleteBotMessage = "Ты уже заполнил профиль. Ты можешь увидеть, что получилось в " + ShowProfileBotCommand + " или воспользоваться командой " + ResetBotCommand + " чтобы актуализировать свои данные)" - StartProfileCompletionBotMessage = "Окей, помогу. Скину 2–3 релевантные роли уже сегодня и мини-план подготовки, пришли свое резюме" - WaitResumeBotMessage = "Хорошо, жду твоё резюме в формате pdf или docx 📄" + ProfileCompleteBotMessage = "Ты уже заполнил профиль. Ты можешь увидеть, что получилось в " + ShowProfileBotCommand + " или воспользоваться командой " + ResetBotCommand + ", чтобы актуализировать свои данные." + StartProfileCompletionBotMessage = "Окей, помогу. Скину 2–3 релевантные роли уже сегодня и мини-план подготовки. Пришли своё резюме." + WaitResumeBotMessage = "Хорошо, жду твоё резюме в формате PDF или DOCX 📄" UploadedResumeBotMessage = "С резюме примерно понятно, давай вернёмся к вопросам 👀" SkipResumeBotMessage = "Резюме пропустим, давай вернёмся к вопросам 👀" BadResumeBotMessage = "Невалидный файл..." - StartAnswerQuestionsBotMessage = "Уточню формат работы: " + StartAnswerQuestionsBotMessage = "Уточню формат работы:" BadWorkFormatBotMessage = "Невалидное значение..." AcceptTargetRoleBotMessage = "Ещё нюанс: вилку по зарплате примерно в какой зоне смотреть?" AcceptWorkFormatBotMessage = "Принял. Чтобы не распыляться, на какую позицию целим в первую очередь?" - AcceptSalaryRangeBotMessage = "Хорошо! Расскажи и своём опыте работы" - AcceptWorkExperienceBotMessage = "Чтобы более точно настраивать предпочтения пришли резюме." + AcceptSalaryRangeBotMessage = "Хорошо! Расскажи о своём опыте работы." + AcceptWorkExperienceBotMessage = "Чтобы более точно настроить предпочтения, пришли резюме." FinishedBotMessage = "Отлично! Ты будешь видеть вакансии в " + ShowVacanciesBotCommand NoVacanciesBotMessage = "Скоро что-нибудь подыщем для тебя!" - UpdateUserErrorBotMessage = "Произошла ошибка при обновлении данных(" - InvalidWorkExperienceErrorBotMessage = "Описание опыта работы должно быть больше 100 символов" - SecondStartBotMessage = "Привет! Я карьерный ассистент Vision Career: помогу с работой, интервью и расскажу новости по рынку, специально для тебя.\nВоспользуйся командой " + HelpBotCommand + " чтобы ознакомиться с функционалом" - HelpBotMessage = "/start - изначальная команда, с помощью, которой можно начать общение со мной\n/reset - команда, с помощью, которой можно сбросить свой профиль\n/profile - команда, с помощью, которой можно посмотреть свой профиль\n/vacancy - команда, с помощью, которой можно посмотреть вакансии, которые мы нашли специально для тебя\n/help - текущая команда, чтбоы помочь тебе с функционалом" + UpdateUserErrorBotMessage = "Произошла ошибка при обновлении данных." + InvalidWorkExperienceErrorBotMessage = "Описание опыта работы должно быть больше 100 символов." + SecondStartBotMessage = "Привет! Я карьерный ассистент Vision Career: помогу с работой, интервью и расскажу новости по рынку, специально для тебя.\nВоспользуйся командой " + HelpBotCommand + ", чтобы ознакомиться с функционалом." + HelpBotMessage = "/start — изначальная команда, с помощью которой можно начать общение со мной\n/reset — команда, с помощью которой можно сбросить свой профиль\n/profile — команда, с помощью которой можно посмотреть свой профиль\n/vacancy — команда, с помощью которой можно посмотреть вакансии, которые мы нашли специально для тебя\n/help — текущая команда, чтобы помочь тебе с функционалом" SuccessResetBotMessage = "Я успешно сбросил твой профиль. Можешь начать заново, используя команду " + StartBotCommand - ErrorResetBotMessage = "Возникли проблемки, при сбросе твоего профиля. Пожалуйста, попробуй позже..." - CanNotShowProfileBotMessage = "Чтобы посмотреть профиль, необходимо полностью его заполнить..." - CanNotShowVacanciesBotMessage = "Чтобы посмотреть вакансии, необходимо полностью заполнить профиль(" - GetVacanciesError = "При вычислении подходящих вакансий, возникли технические шоколадки)) Попробуй позже..." + ErrorResetBotMessage = "Возникли проблемки при сбросе твоего профиля. Пожалуйста, попробуй позже..." + CanNotShowProfileBotMessage = "Чтобы посмотреть профиль, необходимо полностью его заполнить." + CanNotShowVacanciesBotMessage = "Чтобы посмотреть вакансии, необходимо полностью заполнить профиль." + GetVacanciesError = "При вычислении подходящих вакансий возникли технические шоколадки 😅 Попробуй позже..." ) -- 2.45.2 From d4d0f46b998716a7235a7223d4d713f75e6bebdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=93=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 16 Oct 2025 11:33:10 +0300 Subject: [PATCH 3/4] impr: Improved the logic of the bot's text handlers. --- internal/application/constants/botContent.go | 3 ++- .../handlers/profile/universalTextHandler.go | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/application/constants/botContent.go b/internal/application/constants/botContent.go index ec72bba..c7dccfe 100644 --- a/internal/application/constants/botContent.go +++ b/internal/application/constants/botContent.go @@ -49,5 +49,6 @@ const ( ErrorResetBotMessage = "Возникли проблемки при сбросе твоего профиля. Пожалуйста, попробуй позже..." CanNotShowProfileBotMessage = "Чтобы посмотреть профиль, необходимо полностью его заполнить." CanNotShowVacanciesBotMessage = "Чтобы посмотреть вакансии, необходимо полностью заполнить профиль." - GetVacanciesError = "При вычислении подходящих вакансий возникли технические шоколадки 😅 Попробуй позже..." + GetVacanciesErrorBotMessage = "При вычислении подходящих вакансий возникли технические шоколадки 😅 Попробуй позже..." + UnknownCommandBotMessage = "Ты ввёл невалидное значение или неизвестную команду. Давай попробуем ещё раз..." ) diff --git a/internal/infrastructure/botService/handlers/profile/universalTextHandler.go b/internal/infrastructure/botService/handlers/profile/universalTextHandler.go index 3c86ee7..b7be3e1 100644 --- a/internal/infrastructure/botService/handlers/profile/universalTextHandler.go +++ b/internal/infrastructure/botService/handlers/profile/universalTextHandler.go @@ -127,7 +127,7 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { ) msg = constants.StartAnswerQuestionsBotMessage - } else if user.ActiveStatus == constants.WaitWorkFormatStatus { + } else if user.ActiveStatus == constants.WaitWorkFormatStatus && constants.WorkFormat(val).Valid() { wf := constants.WorkFormat(val) user.WorkFormat = &wf user.ActiveStatus = constants.WaitTargetRoleStatus @@ -154,7 +154,7 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { ) msg = constants.AcceptTargetRoleBotMessage - } else if user.ActiveStatus == constants.WaitSalaryRangeStatus { + } else if user.ActiveStatus == constants.WaitSalaryRangeStatus && constants.SalaryRange(val).Valid() { sr := constants.SalaryRange(val) user.SalaryRange = &sr user.ActiveStatus = constants.WaitWorkExperienceStatus @@ -192,7 +192,7 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { } msg = fmt.Sprintf( - "Резюме: %v\nЗарплатная вилка: %v\nДолжность: %v\nОпыт работы: %v\nФормат работы: %v\n", + "Резюме: %v\nЗарплатная вилка: %v\nДолжность: %v\nОпыт работы: %v\nФормат работы: %v\n", resume, user.SalaryRange, *user.TargetRole, *user.WorkExperience, user.WorkFormat, ) } else if val == constants.ShowVacanciesBotCommand && !utils.CheckProfileCompletion(user) { @@ -206,7 +206,7 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { if err != nil { t.logger.Error(fmt.Sprintf("%v: %v", op, err.Error())) - return ctx.Send(constants.GetVacanciesError) + return ctx.Send(constants.GetVacanciesErrorBotMessage) } else if len(vacancies) == 0 { return ctx.Send(constants.NoVacanciesBotMessage) } @@ -215,6 +215,9 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { mainKeys = &tele.ReplyMarkup{RemoveKeyboard: true} msg = strings.Join(vacancies, "\n") + } else { + needUpdateUser = false + msg = constants.UnknownCommandBotMessage } // Set new user data if needUpdateUser { -- 2.45.2 From de940a6e05fa24c7424fbe34021a43ce7e6cd997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B0=D0=B7=D0=B0=D1=80=20=D0=93=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Fri, 17 Oct 2025 16:38:48 +0300 Subject: [PATCH 4/4] feat: Added logic for work with support API and removed mocks. --- .../handlers/profile/universalTextHandler.go | 20 +++- internal/infrastructure/grpcClient/client.go | 101 +++++------------- 2 files changed, 42 insertions(+), 79 deletions(-) diff --git a/internal/infrastructure/botService/handlers/profile/universalTextHandler.go b/internal/infrastructure/botService/handlers/profile/universalTextHandler.go index b7be3e1..343e0f0 100644 --- a/internal/infrastructure/botService/handlers/profile/universalTextHandler.go +++ b/internal/infrastructure/botService/handlers/profile/universalTextHandler.go @@ -3,7 +3,6 @@ package profileHandler import ( "fmt" "runtime/debug" - "strings" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants" "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/types" @@ -210,11 +209,22 @@ func (t *handler) universalTextHandler(ctx tele.Context) error { } else if len(vacancies) == 0 { return ctx.Send(constants.NoVacanciesBotMessage) } - needUpdateUser = false - // Set menu - mainKeys = &tele.ReplyMarkup{RemoveKeyboard: true} - msg = strings.Join(vacancies, "\n") + for _, vacancy := range vacancies { + _, err = t.bot.Send( + &tele.Chat{ID: user.ID}, + vacancy, + &tele.SendOptions{ + ParseMode: tele.ModeHTML, + }, + ) + + if err != nil { + t.logger.Error(fmt.Sprintf("%v: %v", op, err.Error())) + } + } + + return nil } else { needUpdateUser = false msg = constants.UnknownCommandBotMessage diff --git a/internal/infrastructure/grpcClient/client.go b/internal/infrastructure/grpcClient/client.go index e456a6c..056b3bd 100644 --- a/internal/infrastructure/grpcClient/client.go +++ b/internal/infrastructure/grpcClient/client.go @@ -4,102 +4,55 @@ import ( "context" pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang" + "gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/metadata" ) type grpcClient struct { - apiKey string - // conn *grpc.ClientConn - // vсClient pbVC.VisionCareerApiServiceV1Client + apiKey string + conn *grpc.ClientConn + vсClient pbVC.VisionCareerApiServiceV1Client } func (t *grpcClient) Close() error { - // return t.conn.Close() - return nil + return t.conn.Close() } func (t *grpcClient) GetUserVacancies(ctx context.Context, in *pbVC.GetUserVacanciesRequest, opts ...grpc.CallOption) (*pbVC.GetUserVacanciesResponse, error) { - // // Append api key to Meta-data - // md := metadata.Pairs(constants.APIKey.String(), t.apiKey) - // ctx = metadata.NewOutgoingContext(ctx, md) + // Append api key to Meta-data + md := metadata.Pairs(constants.APIKey.String(), t.apiKey) + ctx = metadata.NewOutgoingContext(ctx, md) - // return t.vсClient.GetUserVacancies(ctx, in, opts...) - return &pbVC.GetUserVacanciesResponse{ - Status: "success", - Items: []string{ - "THIS IS MOCKS", - ` - ЗП: до 500 000 рублей net - Penetration Tester – Red Team, Wildberries & Russ 💜 - Уровень: Middle/Senior - Формат: удаленка или гибрид - 📭 Вместе с масштабным развитием IT направления Wildberries и Russ развивает информационную безопасность. Мы решаем сложные и разнообразные задачи: от повышения защищенности каждого сервиса до развития безопасности в рамках всей нашей инфраструктуры. Сейчас мы в поиске опытного Penetration Tester в Red Team. Команда занимается проведением аудитов безопасности инфраструктуры, продуктов и сервисов в различных форматах (тестирования на проникновение, анализ защищенности, кибер-учения). - - 📝 Ключевые задачи: - • Проведение аудитов в формате тестирования на проникновение (внешняя и внутренняя инфраструктура, социалка) - - • Проведение аудитов в формате анализа защищенности (веб и мобильные приложения) - • Проведение аудитов в формате Red/Purple Teaming - • Поиск и эксплуатация уязвимостей веб и мобильных приложений - • Поиск и эксплуатация уязвимостей и недостатков конфигурации ОС Linux а также специфичных для нее сервисов - • Поиск и эксплуатация уязвимостей OC Windows и недостатков конфигурации Active Directory - • Поиск и эксплуатация уязвимостей и недостатков конфигурации СУБД, систем виртуализации и контейнеризации - • Оформление найденных уязвимостей для отчетов по итогам проектов - 💫 Основные требования: - • Опыт проведения проектов по анализу защищенности веб и мобильных приложений - - • Опыт проведения проектов по тестированию на проникновение (внешняя и внутренняя инфраструктура) - • Опыт поиска и эксплуатации уязвимостей веб и мобильных приложений - • Опыт поиска и эксплуатации уязвимостей ОС Linux - • Опыт поиска и эксплуатации уязвимостей OC Windows и недостатков конфигурации AD - • Опыт поиска и эксплуатации уязвимостей и недостатков конфигурации систем виртуализации и контейнеризации - • Знание любого языка программирования на уровне достаточном для понимания/создания эксплойтов и автоматизации задач по поиску уязвимостей - ❤️ Будет плюсом: - • Образование (бакалавр, магистр) в одном из технических вузов РФ (МИФИ, МГТУ им. Баумана, МГУ) - - • Наличие профильных сертификатов (OSCP, OSWE, OSEP, CRTO) - • Выступления на крупных конференциях и митапах, например PHDays, OffZone, Standoff и других - • Участие в CTF и Bug Bounty - 🔥 Что мы предлагаем: - - • Полная удаленка или гибрид с офисами в Москве и Санкт-Петербурге - • IT-ипотека и оформление в аккредитованную IT-компанию - • Бесплатное питание в офисах, ДМС со стоматологией (после испытательного срока) - • Корпоративное обучение и IT-мероприятия - - 💘 Контакты: @alina_velbik - `, - }, - }, nil + return t.vсClient.GetUserVacancies(ctx, in, opts...) } func (t *grpcClient) UpsertUserData(ctx context.Context, in *pbVC.UpsertUserDataRequest, opts ...grpc.CallOption) (*pbVC.UpsertUserDataResponse, error) { - // // Append api key to Meta-data - // md := metadata.Pairs(constants.APIKey.String(), t.apiKey) - // ctx = metadata.NewOutgoingContext(ctx, md) + // Append api key to Meta-data + md := metadata.Pairs(constants.APIKey.String(), t.apiKey) + ctx = metadata.NewOutgoingContext(ctx, md) - // return t.vсClient.UpsertUserData(ctx, in, opts...) - return &pbVC.UpsertUserDataResponse{ - Status: "success", - }, nil + return t.vсClient.UpsertUserData(ctx, in, opts...) } // Init : Инициализирует общий gRPC клиент func Init(addr, apiKey string) (*grpcClient, error) { // Открытие соединения - // conn, err := grpc.Dial( - // addr, - // grpc.WithTransportCredentials(insecure.NewCredentials()), - // grpc.WithBlock(), - // ) + conn, err := grpc.Dial( + addr, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithBlock(), + ) + + if err != nil { + return nil, err + } - // if err != nil { - // return nil, err - // } // Инициализация gRPC клиентов return &grpcClient{ - apiKey: apiKey, - // conn: conn, - // vсClient: pbVC.NewVisionCareerApiServiceV1Client(conn), + apiKey: apiKey, + conn: conn, + vсClient: pbVC.NewVisionCareerApiServiceV1Client(conn), }, nil } -- 2.45.2