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/application/constants/botContent.go b/internal/application/constants/botContent.go
index b52de30..c7dccfe 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,28 @@ 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 = "Чтобы посмотреть вакансии, необходимо полностью заполнить профиль."
+ GetVacanciesErrorBotMessage = "При вычислении подходящих вакансий возникли технические шоколадки 😅 Попробуй позже..."
+ UnknownCommandBotMessage = "Ты ввёл невалидное значение или неизвестную команду. Давай попробуем ещё раз..."
)
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/botService/handlers/profile/universalTextHandler.go b/internal/infrastructure/botService/handlers/profile/universalTextHandler.go
index 3c86ee7..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"
@@ -127,7 +126,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 +153,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 +191,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,15 +205,29 @@ 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)
}
- 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
}
// Set new user data
if needUpdateUser {
diff --git a/internal/infrastructure/grpcClient/client.go b/internal/infrastructure/grpcClient/client.go
index b0b7438..056b3bd 100644
--- a/internal/infrastructure/grpcClient/client.go
+++ b/internal/infrastructure/grpcClient/client.go
@@ -3,103 +3,56 @@ package grpcClient
import (
"context"
- pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagemet/pb/golang"
+ 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
}