Compare commits

...

27 Commits

Author SHA1 Message Date
Maxime f19ecbb2b4 créer des resevations avec un compte parcourmob_beneficiaries 2024-11-07 18:18:28 +01:00
Maxime 6bceee5b43 élément d'authentifications retiré 2024-11-06 14:55:14 +01:00
Maxime a68bec8fb4 Merge branch 'mongodbModel' of https://git.coopgo.io/sbouaram/solidarity-service into mongodbModel 2024-10-31 16:09:48 +01:00
Maxime 0f5da4b5d9 fix commit 2024-10-31 16:04:16 +01:00
Maxime f82f771bfa fix 2024-10-31 16:04:16 +01:00
Maxime 575a3cc828 config 2024-10-31 16:04:16 +01:00
Maxime 2dee240595 fix 2024-10-31 16:04:16 +01:00
Maxime 1d01133e1a GetAlPassengers 2024-10-31 16:04:16 +01:00
Maxime 5c722cfcb1 fix conflict with fleets bookings 2024-10-31 16:04:15 +01:00
Maxime 4dbe0bd926 fix call grpc 2024-10-31 16:04:15 +01:00
Maxime 089d8e9c28 fix grpc 2024-10-31 16:04:15 +01:00
Maxime 065d1cecfd change Booking in BookingSilvermobi in proto folder 2024-10-31 16:04:15 +01:00
Maxime 935176da52 create collections for passenger, driver, booking 2024-10-31 16:04:15 +01:00
Maxime 860e3624d7 add mongodb.go file with all methodes provide by storage interface 2024-10-31 16:04:15 +01:00
Maxime 87cd476a4f ajout methode d'authentification pour le microservice silvermobi 2024-10-31 11:39:16 +01:00
Maxime 6ac3aa3f46 fix 2024-10-04 18:58:24 +02:00
Maxime 215ff8c264 config 2024-09-30 12:50:45 +02:00
Maxime fe58a2d37d fix 2024-09-30 10:16:13 +02:00
Maxime 7e4b6f4971 GetAlPassengers 2024-09-25 15:16:34 +02:00
Maxime 231477ccb8 fix conflict with fleets bookings 2024-08-02 15:11:52 +02:00
Maxime 900eef52cf fix call grpc 2024-07-31 13:33:11 +02:00
Maxime 4dc39b60d4 retro 2024-07-26 11:25:09 +02:00
Maxime ea9450c23f fix grpc 2024-07-26 11:21:05 +02:00
Maxime 15b04da26f fix err 2024-07-26 10:44:59 +02:00
Maxime 1630105fb6 change Booking in BookingSilvermobi in proto folder 2024-07-26 10:03:43 +02:00
Maxime ac8d9fe1fc create collections for passenger, driver, booking 2024-05-24 14:58:44 +02:00
Maxime b971fdc861 add mongodb.go file with all methodes provide by storage interface 2024-05-24 14:52:34 +02:00
17 changed files with 2448 additions and 1425 deletions

View File

@ -8,8 +8,8 @@ storage:
psql: psql:
host: localhost host: localhost
dbname: coopgo_platform dbname: coopgo_platform
user: postgres user: maxime
password: postgres password: posgres
sslmode: disable sslmode: disable
port: 5432 port: 5432
schema: solidarity_service schema: solidarity_service
@ -20,18 +20,14 @@ storage:
services: services:
grpc: grpc:
ip: 0.0.0.0 ip: 192.168.238.1 #10.73.190.5
enable: true enable: true
port: 8089 port: 8089
solidarity-api: solidarity-api:
enable: true enable: true
address: 0.0.0.0:9999 address: 192.168.238.1:9999 #10.73.190.5:9999
routing: routing:
type: valhalla type: valhalla
valhalla: valhalla:
base_url: https://valhalla.coopgo.io/ base_url: https://valhalla.coopgo.io/

77
go.mod
View File

@ -1,44 +1,75 @@
module solidarity-service module solidarity-service
go 1.20 go 1.21
toolchain go1.23.2
require ( require (
git.coopgo.io/coopgo-platform/geocode v0.0.0-20240919052438-16ad0c51895a
git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26
git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be
github.com/golang/protobuf v1.5.3 github.com/appleboy/gorush v1.18.8
github.com/google/uuid v1.3.1 github.com/golang-jwt/jwt/v4 v4.5.0
github.com/golang/protobuf v1.5.4
github.com/google/uuid v1.6.0
github.com/gorilla/mux v1.8.1
github.com/lib/pq v1.10.9 github.com/lib/pq v1.10.9
github.com/paulmach/orb v0.10.0 github.com/paulmach/orb v0.11.1
github.com/rs/zerolog v1.31.0 github.com/pkg/errors v0.9.1
github.com/spf13/viper v1.17.0 github.com/rs/zerolog v1.32.0
google.golang.org/grpc v1.58.3 github.com/spf13/viper v1.18.2
google.golang.org/protobuf v1.31.0 go.mongodb.org/mongo-driver v1.15.0
google.golang.org/genproto v0.0.0-20240604185151-ef581f913117
google.golang.org/grpc v1.66.2
google.golang.org/protobuf v1.34.2
gopkg.in/mail.v2 v2.3.1
) )
require ( require (
github.com/fsnotify/fsnotify v1.6.0 // indirect cloud.google.com/go/maps v1.11.0 // indirect
github.com/gorilla/mux v1.8.0 // indirect github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect
github.com/klauspost/compress v1.17.7 // indirect
github.com/magiconair/properties v1.8.7 // indirect github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.10.0 // indirect github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.5.1 // indirect github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.6.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect
github.com/twpayne/go-polyline v1.1.1 // indirect github.com/twpayne/go-polyline v1.1.1 // indirect
go.mongodb.org/mongo-driver v1.11.4 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect
go.uber.org/atomic v1.9.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect
go.uber.org/multierr v1.9.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
golang.org/x/net v0.15.0 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect
golang.org/x/sys v0.12.0 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
golang.org/x/text v0.13.0 // indirect go.etcd.io/etcd/client/v3 v3.5.10 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.21.0 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect
golang.org/x/net v0.26.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

567
go.sum
View File

@ -1,153 +1,61 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/maps v1.11.0 h1:+//LeUr5ARVau1wVsxLkLnFtYviq9YFS+fB/mhfAOGQ=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go/maps v1.11.0/go.mod h1:XcSsd8lg4ZhLPCtJ2YHcu/xLVePBzZOlI7GmR2cRCws=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= git.coopgo.io/coopgo-platform/geocode v0.0.0-20240919052438-16ad0c51895a h1:fdh8EewE46YyU+/BophnWgP33GYfSg2cBt3kYrumFV4=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= git.coopgo.io/coopgo-platform/geocode v0.0.0-20240919052438-16ad0c51895a/go.mod h1:v1ZKauCJ989bUkLHmsGdaxEa0S/L2OajERePcRqwMM8=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26 h1:qiYVLLNU29xgT0RRj0Jz0WrjEJnz1Eng1X7l1UW9jGU=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= git.coopgo.io/coopgo-platform/mobility-accounts v0.0.0-20230430115320-f5bb2e7c2c26/go.mod h1:1typNYtO+PQT6KG77vs/PUv0fO60/nbeSGZL2tt1LLg=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be h1:VIzWX8NftKzQX1clunLaMf79Ut1dygcCc/ZLV/iWOaY= git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be h1:VIzWX8NftKzQX1clunLaMf79Ut1dygcCc/ZLV/iWOaY=
git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be/go.mod h1:Nh7o15LlV0OuO9zxvJIs9FlelpeAaLYkXtFdgIkFrgg= git.coopgo.io/coopgo-platform/routing-service v0.0.0-20230403183358-4d30329f06be/go.mod h1:Nh7o15LlV0OuO9zxvJIs9FlelpeAaLYkXtFdgIkFrgg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/appleboy/gorush v1.18.8 h1:pwPjLPEeSc6OrlYrqFOAr6ombH7tKKhJdaaQa2Ul4sA=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/appleboy/gorush v1.18.8/go.mod h1:qoLmAkmDIuMd2c1qPYMo1/eEqQ5CfVaCscRYd0Y+flU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@ -155,398 +63,191 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0=
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE=
github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w= github.com/twpayne/go-polyline v1.1.1 h1:/tSF1BR7rN4HWj4XKqvRUNrCiYVMCvywxTFVofvDV0w=
github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY= github.com/twpayne/go-polyline v1.1.1/go.mod h1:ybd9IWWivW/rlXPXuuckeKUyF3yrIim+iqA7kSl4NFY=
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.mongodb.org/mongo-driver v1.11.4 h1:4ayjakA013OdpGyL2K3ZqylTac/rMjrJOMZ1EHizXas= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
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=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/genproto v0.0.0-20240604185151-ef581f913117 h1:HCZ6DlkKtCDAtD8ForECsY3tKuaR+p4R3grlK80uCCc=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/genproto v0.0.0-20240604185151-ef581f913117/go.mod h1:lesfX/+9iA+3OdqeCpoDddJaNxVB1AB6tD7EfqMmprc=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/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-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

View File

@ -4,12 +4,14 @@ import (
"git.coopgo.io/coopgo-platform/routing-service" "git.coopgo.io/coopgo-platform/routing-service"
"github.com/spf13/viper" "github.com/spf13/viper"
"solidarity-service/storage" "solidarity-service/storage"
) )
type SolidarityServiceHandler struct { type SolidarityServiceHandler struct {
Config *viper.Viper Config *viper.Viper
Routing routing.RoutingService Routing routing.RoutingService
Storage storage.Storage Storage storage.Storage
} }
func NewSolidarityServiceHandler(cfg *viper.Viper, routing routing.RoutingService, storage storage.Storage) (*SolidarityServiceHandler, error) { func NewSolidarityServiceHandler(cfg *viper.Viper, routing routing.RoutingService, storage storage.Storage) (*SolidarityServiceHandler, error) {

View File

@ -2,8 +2,9 @@ package handler
import ( import (
"context" "context"
"github.com/paulmach/orb/geojson"
"solidarity-service/internal" "solidarity-service/internal"
"github.com/paulmach/orb/geojson"
) )
func (s *SolidarityServiceHandler) GetPassenger(ctx context.Context, id string) (passenger internal.Passenger, err error) { func (s *SolidarityServiceHandler) GetPassenger(ctx context.Context, id string) (passenger internal.Passenger, err error) {
@ -14,6 +15,14 @@ func (s *SolidarityServiceHandler) GetPassenger(ctx context.Context, id string)
return passenger, nil return passenger, nil
} }
func (s *SolidarityServiceHandler) GetAllPassengers(ctx context.Context) (passengers []internal.Passenger, err error) {
passengers, err = s.Storage.GetAllPassengers()
if err != nil {
return []internal.Passenger{}, err
}
return passengers, nil
}
func (s *SolidarityServiceHandler) GetDriver(ctx context.Context, id string) (driver internal.Driver, err error) { func (s *SolidarityServiceHandler) GetDriver(ctx context.Context, id string) (driver internal.Driver, err error) {
driver, err = s.Storage.GetDriver(id) driver, err = s.Storage.GetDriver(id)
if err != nil { if err != nil {
@ -37,21 +46,21 @@ func (s *SolidarityServiceHandler) SetPassengerTrip(ctx context.Context, passeng
return nil return nil
} }
func (s *SolidarityServiceHandler) CreateBooking(ctx context.Context, bookingRequest internal.BookingRequest) (passenger internal.Passenger, driver internal.Driver, err error) { func (s *SolidarityServiceHandler) CreateBooking(ctx context.Context, bookingRequest internal.BookingRequest) ( driver internal.Driver, err error) { //passenger internal.Passenger,
bookingRequest.Operator = "internal-grpc" bookingRequest.Operator = "internal-grpc"
err = s.Storage.CreateBooking(bookingRequest) err = s.Storage.CreateBooking(bookingRequest)
if err != nil { if err != nil {
return internal.Passenger{}, internal.Driver{}, err return internal.Driver{}, err //internal.Passenger{},
}
passenger, err = s.Storage.GetPassenger(bookingRequest.Passenger_id)
if err != nil {
return internal.Passenger{}, internal.Driver{}, err
} }
// passenger, err = s.Storage.GetPassenger(bookingRequest.Passenger_id)
// if err != nil {
// return internal.Passenger{}, internal.Driver{}, err
// }
driver, err = s.Storage.GetDriver(bookingRequest.Driver_id) driver, err = s.Storage.GetDriver(bookingRequest.Driver_id)
if err != nil { if err != nil {
return internal.Passenger{}, internal.Driver{}, err return internal.Driver{}, err //internal.Passenger{},
} }
return passenger, driver, nil return driver, nil //passenger,
} }
func (s *SolidarityServiceHandler) UpdateBooking(ctx context.Context, bookingId string, status internal.BookingStatus) (err error) { func (s *SolidarityServiceHandler) UpdateBooking(ctx context.Context, bookingId string, status internal.BookingStatus) (err error) {

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,6 @@ syntax = "proto3";
option go_package = "git.coopgo.io/coopgo-platform/solidarity-service/servers/grpc/proto"; option go_package = "git.coopgo.io/coopgo-platform/solidarity-service/servers/grpc/proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
message Feature { message Feature {
double lat = 1; double lat = 1;
double long = 2; double long = 2;
@ -12,9 +10,9 @@ message Feature {
message DriverJourney { message DriverJourney {
User user = 1; User user = 1;
optional Car car = 2; Car car = 2;
google.protobuf.Timestamp driver_departure_Date = 3; google.protobuf.Timestamp driver_departure_Date = 3;
optional Price price = 4; Price price = 4;
string driver_departure_Address = 5; string driver_departure_Address = 5;
oneof availabilities { oneof availabilities {
RepeatedPunctualAvailabilitySlot repeated_punctual_availabilities = 6; RepeatedPunctualAvailabilitySlot repeated_punctual_availabilities = 6;
@ -33,8 +31,8 @@ message DriverRequest{
Feature driver_address = 1; Feature driver_address = 1;
int32 driver_radius = 2; int32 driver_radius = 2;
User driver = 3; User driver = 3;
optional Preferences preferences = 4; Preferences preferences = 4;
optional Car car = 5; Car car = 5;
} }
message PunctualAvailabilitySlot { message PunctualAvailabilitySlot {
@ -42,6 +40,7 @@ message PunctualAvailabilitySlot {
string startTime = 2; string startTime = 2;
string endTime = 3; string endTime = 3;
} }
message RegularAvailabilitySlot { message RegularAvailabilitySlot {
DayOfWeek dayOfWeek = 1; DayOfWeek dayOfWeek = 1;
string startTime = 2; string startTime = 2;
@ -58,43 +57,51 @@ enum DayOfWeek {
SUN = 7; SUN = 7;
} }
message BookingRequest { message BookingSolidarityRequest {
string id = 1; string id = 1;
string passengerId = 2; string passengerId = 2;
string driverId = 3; string driverId = 3;
BookingStatus status = 4; BookingSolidarityStatus status = 4;
Feature departure_address =5; Feature departure_address =5;
Feature destination_address = 6; Feature destination_address = 6;
google.protobuf.Timestamp pickup_date = 7; google.protobuf.Timestamp pickup_date = 7;
} }
message Booking { message BookingSolidarity {
string id = 1; string id = 1;
User driver = 2; User driver = 2;
User passenger = 3; User passenger = 3;
google.protobuf.Timestamp passengerPickupDate =4; google.protobuf.Timestamp passengerPickupDate =4;
Feature passenger_departure_route = 5; Feature passenger_departure_route = 5;
Feature passenger_destination_route = 6; Feature passenger_destination_route = 6;
BookingStatus status = 7; BookingSolidarityStatus status = 7;
optional int64 duration = 8; int64 duration = 8;
optional int64 distance = 9; int64 distance = 9;
Price price = 10; Price price = 10;
optional Car car = 11; Car car = 11;
google.protobuf.Timestamp pickup_date = 12; google.protobuf.Timestamp pickup_date = 12;
}
message GetAllPassengers {
} }
message GetPassenger {
}
message Car { message Car {
optional string model = 1; string model = 1;
optional string brand = 2; string brand = 2;
} }
message Preferences { message Preferences {
optional bool smoking = 1; bool smoking = 1;
optional bool animals = 2; bool animals = 2;
optional bool music = 3; bool music = 3;
optional bool is_talker = 4; bool is_talker = 4;
optional int64 luggage_size = 5; int64 luggage_size = 5;
} }
@ -105,23 +112,23 @@ enum PriceType {
} }
message Price { message Price {
optional PriceType type = 1; PriceType type = 1;
optional double amount = 2; double amount = 2;
optional string currency = 3; string currency = 3;
} }
message User { message User {
string id = 1; string id = 1;
string alias = 2; string alias = 2;
optional string first_name = 3; string first_name = 3;
optional string last_name = 4; string last_name = 4;
optional int64 grade = 5; int64 grade = 5;
optional string picture = 6; string picture = 6;
optional string gender = 7; string gender = 7;
optional bool verified_identity = 8; bool verified_identity = 8;
} }
enum BookingStatus { enum BookingSolidarityStatus {
INITIATED = 0; INITIATED = 0;
WAITING_DRIVER_CONFIRMATION = 1; WAITING_DRIVER_CONFIRMATION = 1;
WAITING_PASSENGER_CONFIRMATION = 2; WAITING_PASSENGER_CONFIRMATION = 2;

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,28 @@
syntax = "proto3"; syntax = "proto3";
option go_package = "git.coopgo.io/coopgo-platform/solidarity-service/servers/grpc/proto"; option go_package = "git.coopgo.io/coopgo-platform/solidarity-service/servers/grpc/proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
import "solidarity-api-types.proto"; import "solidarity-api-types.proto";
service SolidarityService { service SolidarityService {
rpc SetDriverRegularAvailabilities(DriverRegularAvailabilities) returns (DriverAvailabilitiesResponse) {} rpc SetDriverRegularAvailabilities(DriverRegularAvailabilities) returns (DriverAvailabilitiesResponse) {}
rpc SetDriverPunctualAvailabilities(DriverPunctualAvailabilities) returns (DriverAvailabilitiesResponse) {} rpc SetDriverPunctualAvailabilities(DriverPunctualAvailabilities) returns (DriverAvailabilitiesResponse) {}
rpc CreateBooking(CreateBookingRequest) returns (CreateBookingResponse) {} rpc CreateBookingSolidarity(CreateBookingSolidarityRequest) returns (CreateBookingSolidarityResponse) {}
rpc UpdateBooking(UpdateBookingRequest) returns (UpdateBookingResponse) {} rpc UpdateBookingSolidarity(UpdateBookingSolidarityRequest) returns (UpdateBookingSolidarityResponse) {}
rpc GetBooking(GetBookingRequest) returns (GetBookingResponse) {} rpc GetBookingSolidarity(GetBookingSolidarityRequest) returns (GetBookingSolidarityResponse) {}
rpc GetBookingsByStatus(GetBookingsByStatusRequest) returns (GetBookingsByStatusResponse) {} rpc GetBookingsByStatus(GetBookingsByStatusRequest) returns (GetBookingsByStatusResponse) {}
rpc DriverJourneys(DriverJourneysRequest) returns (DriverJourneysResponse) {} rpc DriverJourneys(DriverJourneysRequest) returns (DriverJourneysResponse) {}
rpc GetAllPassengers(google.protobuf.Empty) returns (GetAllPassengersResponse) {}
rpc GetPassenger(GetPassengerRequest) returns (GetPassengerResponse) {}
rpc SetPassengerTrip(PassengerTripRequest) returns (PassengerTripResponse) {} rpc SetPassengerTrip(PassengerTripRequest) returns (PassengerTripResponse) {}
} }
message PassengerTripRequest{ message PassengerTripRequest{
User passenger = 1; User passenger = 1;
Preferences preferences = 2;
optional Preferences preferences = 2;
} }
message DriverRegularAvailabilities{ message DriverRegularAvailabilities{
DriverRequest driver_request = 1; DriverRequest driver_request = 1;
repeated RegularAvailabilitySlot driver_availabilities = 2; repeated RegularAvailabilitySlot driver_availabilities = 2;
} }
@ -34,43 +34,44 @@ message DriverPunctualAvailabilities{
message PassengerTripResponse { message PassengerTripResponse {
bool success = 1; bool success = 1;
optional string message = 2; string message = 2;
} }
message DriverAvailabilitiesResponse { message DriverAvailabilitiesResponse {
bool success = 1; bool success = 1;
optional string message = 2; string message = 2;
} }
message CreateBookingRequest { message CreateBookingSolidarityRequest {
BookingRequest booking = 1; BookingSolidarityRequest booking = 1;
}
message CreateBookingResponse {
Booking booking = 1;
} }
message UpdateBookingRequest { message CreateBookingSolidarityResponse {
BookingSolidarity booking = 1;
}
message UpdateBookingSolidarityRequest {
string booking_id = 1; string booking_id = 1;
BookingStatus status = 2; BookingSolidarityStatus status = 2;
optional string message = 3; string message = 3;
} }
message UpdateBookingResponse { message UpdateBookingSolidarityResponse {
bool success = 1; bool success = 1;
optional string message = 2; string message = 2;
} }
message GetBookingRequest { message GetBookingSolidarityRequest {
string booking_id = 1; string booking_id = 1;
} }
message GetBookingResponse { message GetBookingSolidarityResponse {
Booking booking = 1; BookingSolidarity booking = 1;
} }
message GetBookingsByStatusRequest{ message GetBookingsByStatusRequest{
BookingStatus status = 1; BookingSolidarityStatus status = 1;
UserType type = 2; UserType type = 2;
string user_id = 3; string user_id = 3;
} }
@ -84,6 +85,18 @@ message DriverJourneysResponse {
repeated DriverJourney driver_journeys = 1; repeated DriverJourney driver_journeys = 1;
} }
message GetBookingsByStatusResponse{ message GetAllPassengersResponse {
repeated Booking booking = 1; repeated User passenger = 1;
}
message GetPassengerRequest {
User passenger = 1;
}
message GetPassengerResponse {
User passenger = 1;
}
message GetBookingsByStatusResponse{
repeated BookingSolidarity booking = 1;
} }

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions: // versions:
// - protoc-gen-go-grpc v1.3.0 // - protoc-gen-go-grpc v1.5.1
// - protoc v3.12.4 // - protoc v3.12.4
// source: solidarity-api.proto // source: solidarity-api.proto
@ -8,6 +8,7 @@ package proto
import ( import (
context "context" context "context"
empty "github.com/golang/protobuf/ptypes/empty"
grpc "google.golang.org/grpc" grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes" codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status" status "google.golang.org/grpc/status"
@ -15,17 +16,19 @@ import (
// This is a compile-time assertion to ensure that this generated file // This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against. // is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later. // Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion7 const _ = grpc.SupportPackageIsVersion9
const ( const (
SolidarityService_SetDriverRegularAvailabilities_FullMethodName = "/SolidarityService/SetDriverRegularAvailabilities" SolidarityService_SetDriverRegularAvailabilities_FullMethodName = "/SolidarityService/SetDriverRegularAvailabilities"
SolidarityService_SetDriverPunctualAvailabilities_FullMethodName = "/SolidarityService/SetDriverPunctualAvailabilities" SolidarityService_SetDriverPunctualAvailabilities_FullMethodName = "/SolidarityService/SetDriverPunctualAvailabilities"
SolidarityService_CreateBooking_FullMethodName = "/SolidarityService/CreateBooking" SolidarityService_CreateBookingSolidarity_FullMethodName = "/SolidarityService/CreateBookingSolidarity"
SolidarityService_UpdateBooking_FullMethodName = "/SolidarityService/UpdateBooking" SolidarityService_UpdateBookingSolidarity_FullMethodName = "/SolidarityService/UpdateBookingSolidarity"
SolidarityService_GetBooking_FullMethodName = "/SolidarityService/GetBooking" SolidarityService_GetBookingSolidarity_FullMethodName = "/SolidarityService/GetBookingSolidarity"
SolidarityService_GetBookingsByStatus_FullMethodName = "/SolidarityService/GetBookingsByStatus" SolidarityService_GetBookingsByStatus_FullMethodName = "/SolidarityService/GetBookingsByStatus"
SolidarityService_DriverJourneys_FullMethodName = "/SolidarityService/DriverJourneys" SolidarityService_DriverJourneys_FullMethodName = "/SolidarityService/DriverJourneys"
SolidarityService_GetAllPassengers_FullMethodName = "/SolidarityService/GetAllPassengers"
SolidarityService_GetPassenger_FullMethodName = "/SolidarityService/GetPassenger"
SolidarityService_SetPassengerTrip_FullMethodName = "/SolidarityService/SetPassengerTrip" SolidarityService_SetPassengerTrip_FullMethodName = "/SolidarityService/SetPassengerTrip"
) )
@ -35,11 +38,13 @@ const (
type SolidarityServiceClient interface { type SolidarityServiceClient interface {
SetDriverRegularAvailabilities(ctx context.Context, in *DriverRegularAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) SetDriverRegularAvailabilities(ctx context.Context, in *DriverRegularAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error)
SetDriverPunctualAvailabilities(ctx context.Context, in *DriverPunctualAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) SetDriverPunctualAvailabilities(ctx context.Context, in *DriverPunctualAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error)
CreateBooking(ctx context.Context, in *CreateBookingRequest, opts ...grpc.CallOption) (*CreateBookingResponse, error) CreateBookingSolidarity(ctx context.Context, in *CreateBookingSolidarityRequest, opts ...grpc.CallOption) (*CreateBookingSolidarityResponse, error)
UpdateBooking(ctx context.Context, in *UpdateBookingRequest, opts ...grpc.CallOption) (*UpdateBookingResponse, error) UpdateBookingSolidarity(ctx context.Context, in *UpdateBookingSolidarityRequest, opts ...grpc.CallOption) (*UpdateBookingSolidarityResponse, error)
GetBooking(ctx context.Context, in *GetBookingRequest, opts ...grpc.CallOption) (*GetBookingResponse, error) GetBookingSolidarity(ctx context.Context, in *GetBookingSolidarityRequest, opts ...grpc.CallOption) (*GetBookingSolidarityResponse, error)
GetBookingsByStatus(ctx context.Context, in *GetBookingsByStatusRequest, opts ...grpc.CallOption) (*GetBookingsByStatusResponse, error) GetBookingsByStatus(ctx context.Context, in *GetBookingsByStatusRequest, opts ...grpc.CallOption) (*GetBookingsByStatusResponse, error)
DriverJourneys(ctx context.Context, in *DriverJourneysRequest, opts ...grpc.CallOption) (*DriverJourneysResponse, error) DriverJourneys(ctx context.Context, in *DriverJourneysRequest, opts ...grpc.CallOption) (*DriverJourneysResponse, error)
GetAllPassengers(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetAllPassengersResponse, error)
GetPassenger(ctx context.Context, in *GetPassengerRequest, opts ...grpc.CallOption) (*GetPassengerResponse, error)
SetPassengerTrip(ctx context.Context, in *PassengerTripRequest, opts ...grpc.CallOption) (*PassengerTripResponse, error) SetPassengerTrip(ctx context.Context, in *PassengerTripRequest, opts ...grpc.CallOption) (*PassengerTripResponse, error)
} }
@ -52,8 +57,9 @@ func NewSolidarityServiceClient(cc grpc.ClientConnInterface) SolidarityServiceCl
} }
func (c *solidarityServiceClient) SetDriverRegularAvailabilities(ctx context.Context, in *DriverRegularAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) { func (c *solidarityServiceClient) SetDriverRegularAvailabilities(ctx context.Context, in *DriverRegularAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DriverAvailabilitiesResponse) out := new(DriverAvailabilitiesResponse)
err := c.cc.Invoke(ctx, SolidarityService_SetDriverRegularAvailabilities_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SolidarityService_SetDriverRegularAvailabilities_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -61,35 +67,39 @@ func (c *solidarityServiceClient) SetDriverRegularAvailabilities(ctx context.Con
} }
func (c *solidarityServiceClient) SetDriverPunctualAvailabilities(ctx context.Context, in *DriverPunctualAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) { func (c *solidarityServiceClient) SetDriverPunctualAvailabilities(ctx context.Context, in *DriverPunctualAvailabilities, opts ...grpc.CallOption) (*DriverAvailabilitiesResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DriverAvailabilitiesResponse) out := new(DriverAvailabilitiesResponse)
err := c.cc.Invoke(ctx, SolidarityService_SetDriverPunctualAvailabilities_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SolidarityService_SetDriverPunctualAvailabilities_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil return out, nil
} }
func (c *solidarityServiceClient) CreateBooking(ctx context.Context, in *CreateBookingRequest, opts ...grpc.CallOption) (*CreateBookingResponse, error) { func (c *solidarityServiceClient) CreateBookingSolidarity(ctx context.Context, in *CreateBookingSolidarityRequest, opts ...grpc.CallOption) (*CreateBookingSolidarityResponse, error) {
out := new(CreateBookingResponse) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
err := c.cc.Invoke(ctx, SolidarityService_CreateBooking_FullMethodName, in, out, opts...) out := new(CreateBookingSolidarityResponse)
err := c.cc.Invoke(ctx, SolidarityService_CreateBookingSolidarity_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil return out, nil
} }
func (c *solidarityServiceClient) UpdateBooking(ctx context.Context, in *UpdateBookingRequest, opts ...grpc.CallOption) (*UpdateBookingResponse, error) { func (c *solidarityServiceClient) UpdateBookingSolidarity(ctx context.Context, in *UpdateBookingSolidarityRequest, opts ...grpc.CallOption) (*UpdateBookingSolidarityResponse, error) {
out := new(UpdateBookingResponse) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
err := c.cc.Invoke(ctx, SolidarityService_UpdateBooking_FullMethodName, in, out, opts...) out := new(UpdateBookingSolidarityResponse)
err := c.cc.Invoke(ctx, SolidarityService_UpdateBookingSolidarity_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return out, nil return out, nil
} }
func (c *solidarityServiceClient) GetBooking(ctx context.Context, in *GetBookingRequest, opts ...grpc.CallOption) (*GetBookingResponse, error) { func (c *solidarityServiceClient) GetBookingSolidarity(ctx context.Context, in *GetBookingSolidarityRequest, opts ...grpc.CallOption) (*GetBookingSolidarityResponse, error) {
out := new(GetBookingResponse) cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
err := c.cc.Invoke(ctx, SolidarityService_GetBooking_FullMethodName, in, out, opts...) out := new(GetBookingSolidarityResponse)
err := c.cc.Invoke(ctx, SolidarityService_GetBookingSolidarity_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -97,8 +107,9 @@ func (c *solidarityServiceClient) GetBooking(ctx context.Context, in *GetBooking
} }
func (c *solidarityServiceClient) GetBookingsByStatus(ctx context.Context, in *GetBookingsByStatusRequest, opts ...grpc.CallOption) (*GetBookingsByStatusResponse, error) { func (c *solidarityServiceClient) GetBookingsByStatus(ctx context.Context, in *GetBookingsByStatusRequest, opts ...grpc.CallOption) (*GetBookingsByStatusResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetBookingsByStatusResponse) out := new(GetBookingsByStatusResponse)
err := c.cc.Invoke(ctx, SolidarityService_GetBookingsByStatus_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SolidarityService_GetBookingsByStatus_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -106,8 +117,29 @@ func (c *solidarityServiceClient) GetBookingsByStatus(ctx context.Context, in *G
} }
func (c *solidarityServiceClient) DriverJourneys(ctx context.Context, in *DriverJourneysRequest, opts ...grpc.CallOption) (*DriverJourneysResponse, error) { func (c *solidarityServiceClient) DriverJourneys(ctx context.Context, in *DriverJourneysRequest, opts ...grpc.CallOption) (*DriverJourneysResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DriverJourneysResponse) out := new(DriverJourneysResponse)
err := c.cc.Invoke(ctx, SolidarityService_DriverJourneys_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SolidarityService_DriverJourneys_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *solidarityServiceClient) GetAllPassengers(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetAllPassengersResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetAllPassengersResponse)
err := c.cc.Invoke(ctx, SolidarityService_GetAllPassengers_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *solidarityServiceClient) GetPassenger(ctx context.Context, in *GetPassengerRequest, opts ...grpc.CallOption) (*GetPassengerResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetPassengerResponse)
err := c.cc.Invoke(ctx, SolidarityService_GetPassenger_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -115,8 +147,9 @@ func (c *solidarityServiceClient) DriverJourneys(ctx context.Context, in *Driver
} }
func (c *solidarityServiceClient) SetPassengerTrip(ctx context.Context, in *PassengerTripRequest, opts ...grpc.CallOption) (*PassengerTripResponse, error) { func (c *solidarityServiceClient) SetPassengerTrip(ctx context.Context, in *PassengerTripRequest, opts ...grpc.CallOption) (*PassengerTripResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(PassengerTripResponse) out := new(PassengerTripResponse)
err := c.cc.Invoke(ctx, SolidarityService_SetPassengerTrip_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SolidarityService_SetPassengerTrip_FullMethodName, in, out, cOpts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -125,22 +158,27 @@ func (c *solidarityServiceClient) SetPassengerTrip(ctx context.Context, in *Pass
// SolidarityServiceServer is the server API for SolidarityService service. // SolidarityServiceServer is the server API for SolidarityService service.
// All implementations must embed UnimplementedSolidarityServiceServer // All implementations must embed UnimplementedSolidarityServiceServer
// for forward compatibility // for forward compatibility.
type SolidarityServiceServer interface { type SolidarityServiceServer interface {
SetDriverRegularAvailabilities(context.Context, *DriverRegularAvailabilities) (*DriverAvailabilitiesResponse, error) SetDriverRegularAvailabilities(context.Context, *DriverRegularAvailabilities) (*DriverAvailabilitiesResponse, error)
SetDriverPunctualAvailabilities(context.Context, *DriverPunctualAvailabilities) (*DriverAvailabilitiesResponse, error) SetDriverPunctualAvailabilities(context.Context, *DriverPunctualAvailabilities) (*DriverAvailabilitiesResponse, error)
CreateBooking(context.Context, *CreateBookingRequest) (*CreateBookingResponse, error) CreateBookingSolidarity(context.Context, *CreateBookingSolidarityRequest) (*CreateBookingSolidarityResponse, error)
UpdateBooking(context.Context, *UpdateBookingRequest) (*UpdateBookingResponse, error) UpdateBookingSolidarity(context.Context, *UpdateBookingSolidarityRequest) (*UpdateBookingSolidarityResponse, error)
GetBooking(context.Context, *GetBookingRequest) (*GetBookingResponse, error) GetBookingSolidarity(context.Context, *GetBookingSolidarityRequest) (*GetBookingSolidarityResponse, error)
GetBookingsByStatus(context.Context, *GetBookingsByStatusRequest) (*GetBookingsByStatusResponse, error) GetBookingsByStatus(context.Context, *GetBookingsByStatusRequest) (*GetBookingsByStatusResponse, error)
DriverJourneys(context.Context, *DriverJourneysRequest) (*DriverJourneysResponse, error) DriverJourneys(context.Context, *DriverJourneysRequest) (*DriverJourneysResponse, error)
GetAllPassengers(context.Context, *empty.Empty) (*GetAllPassengersResponse, error)
GetPassenger(context.Context, *GetPassengerRequest) (*GetPassengerResponse, error)
SetPassengerTrip(context.Context, *PassengerTripRequest) (*PassengerTripResponse, error) SetPassengerTrip(context.Context, *PassengerTripRequest) (*PassengerTripResponse, error)
mustEmbedUnimplementedSolidarityServiceServer() mustEmbedUnimplementedSolidarityServiceServer()
} }
// UnimplementedSolidarityServiceServer must be embedded to have forward compatible implementations. // UnimplementedSolidarityServiceServer must be embedded to have
type UnimplementedSolidarityServiceServer struct { // forward compatible implementations.
} //
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedSolidarityServiceServer struct{}
func (UnimplementedSolidarityServiceServer) SetDriverRegularAvailabilities(context.Context, *DriverRegularAvailabilities) (*DriverAvailabilitiesResponse, error) { func (UnimplementedSolidarityServiceServer) SetDriverRegularAvailabilities(context.Context, *DriverRegularAvailabilities) (*DriverAvailabilitiesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetDriverRegularAvailabilities not implemented") return nil, status.Errorf(codes.Unimplemented, "method SetDriverRegularAvailabilities not implemented")
@ -148,14 +186,14 @@ func (UnimplementedSolidarityServiceServer) SetDriverRegularAvailabilities(conte
func (UnimplementedSolidarityServiceServer) SetDriverPunctualAvailabilities(context.Context, *DriverPunctualAvailabilities) (*DriverAvailabilitiesResponse, error) { func (UnimplementedSolidarityServiceServer) SetDriverPunctualAvailabilities(context.Context, *DriverPunctualAvailabilities) (*DriverAvailabilitiesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetDriverPunctualAvailabilities not implemented") return nil, status.Errorf(codes.Unimplemented, "method SetDriverPunctualAvailabilities not implemented")
} }
func (UnimplementedSolidarityServiceServer) CreateBooking(context.Context, *CreateBookingRequest) (*CreateBookingResponse, error) { func (UnimplementedSolidarityServiceServer) CreateBookingSolidarity(context.Context, *CreateBookingSolidarityRequest) (*CreateBookingSolidarityResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateBooking not implemented") return nil, status.Errorf(codes.Unimplemented, "method CreateBookingSolidarity not implemented")
} }
func (UnimplementedSolidarityServiceServer) UpdateBooking(context.Context, *UpdateBookingRequest) (*UpdateBookingResponse, error) { func (UnimplementedSolidarityServiceServer) UpdateBookingSolidarity(context.Context, *UpdateBookingSolidarityRequest) (*UpdateBookingSolidarityResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateBooking not implemented") return nil, status.Errorf(codes.Unimplemented, "method UpdateBookingSolidarity not implemented")
} }
func (UnimplementedSolidarityServiceServer) GetBooking(context.Context, *GetBookingRequest) (*GetBookingResponse, error) { func (UnimplementedSolidarityServiceServer) GetBookingSolidarity(context.Context, *GetBookingSolidarityRequest) (*GetBookingSolidarityResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetBooking not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetBookingSolidarity not implemented")
} }
func (UnimplementedSolidarityServiceServer) GetBookingsByStatus(context.Context, *GetBookingsByStatusRequest) (*GetBookingsByStatusResponse, error) { func (UnimplementedSolidarityServiceServer) GetBookingsByStatus(context.Context, *GetBookingsByStatusRequest) (*GetBookingsByStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetBookingsByStatus not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetBookingsByStatus not implemented")
@ -163,10 +201,17 @@ func (UnimplementedSolidarityServiceServer) GetBookingsByStatus(context.Context,
func (UnimplementedSolidarityServiceServer) DriverJourneys(context.Context, *DriverJourneysRequest) (*DriverJourneysResponse, error) { func (UnimplementedSolidarityServiceServer) DriverJourneys(context.Context, *DriverJourneysRequest) (*DriverJourneysResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DriverJourneys not implemented") return nil, status.Errorf(codes.Unimplemented, "method DriverJourneys not implemented")
} }
func (UnimplementedSolidarityServiceServer) GetAllPassengers(context.Context, *empty.Empty) (*GetAllPassengersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetAllPassengers not implemented")
}
func (UnimplementedSolidarityServiceServer) GetPassenger(context.Context, *GetPassengerRequest) (*GetPassengerResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetPassenger not implemented")
}
func (UnimplementedSolidarityServiceServer) SetPassengerTrip(context.Context, *PassengerTripRequest) (*PassengerTripResponse, error) { func (UnimplementedSolidarityServiceServer) SetPassengerTrip(context.Context, *PassengerTripRequest) (*PassengerTripResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetPassengerTrip not implemented") return nil, status.Errorf(codes.Unimplemented, "method SetPassengerTrip not implemented")
} }
func (UnimplementedSolidarityServiceServer) mustEmbedUnimplementedSolidarityServiceServer() {} func (UnimplementedSolidarityServiceServer) mustEmbedUnimplementedSolidarityServiceServer() {}
func (UnimplementedSolidarityServiceServer) testEmbeddedByValue() {}
// UnsafeSolidarityServiceServer may be embedded to opt out of forward compatibility for this service. // UnsafeSolidarityServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to SolidarityServiceServer will // Use of this interface is not recommended, as added methods to SolidarityServiceServer will
@ -176,6 +221,13 @@ type UnsafeSolidarityServiceServer interface {
} }
func RegisterSolidarityServiceServer(s grpc.ServiceRegistrar, srv SolidarityServiceServer) { func RegisterSolidarityServiceServer(s grpc.ServiceRegistrar, srv SolidarityServiceServer) {
// If the following call pancis, it indicates UnimplementedSolidarityServiceServer was
// embedded by pointer and is nil. This will cause panics if an
// unimplemented method is ever invoked, so we test this at initialization
// time to prevent it from happening at runtime later due to I/O.
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
t.testEmbeddedByValue()
}
s.RegisterService(&SolidarityService_ServiceDesc, srv) s.RegisterService(&SolidarityService_ServiceDesc, srv)
} }
@ -215,56 +267,56 @@ func _SolidarityService_SetDriverPunctualAvailabilities_Handler(srv interface{},
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _SolidarityService_CreateBooking_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _SolidarityService_CreateBookingSolidarity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateBookingRequest) in := new(CreateBookingSolidarityRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(SolidarityServiceServer).CreateBooking(ctx, in) return srv.(SolidarityServiceServer).CreateBookingSolidarity(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: SolidarityService_CreateBooking_FullMethodName, FullMethod: SolidarityService_CreateBookingSolidarity_FullMethodName,
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SolidarityServiceServer).CreateBooking(ctx, req.(*CreateBookingRequest)) return srv.(SolidarityServiceServer).CreateBookingSolidarity(ctx, req.(*CreateBookingSolidarityRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _SolidarityService_UpdateBooking_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _SolidarityService_UpdateBookingSolidarity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateBookingRequest) in := new(UpdateBookingSolidarityRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(SolidarityServiceServer).UpdateBooking(ctx, in) return srv.(SolidarityServiceServer).UpdateBookingSolidarity(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: SolidarityService_UpdateBooking_FullMethodName, FullMethod: SolidarityService_UpdateBookingSolidarity_FullMethodName,
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SolidarityServiceServer).UpdateBooking(ctx, req.(*UpdateBookingRequest)) return srv.(SolidarityServiceServer).UpdateBookingSolidarity(ctx, req.(*UpdateBookingSolidarityRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _SolidarityService_GetBooking_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _SolidarityService_GetBookingSolidarity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetBookingRequest) in := new(GetBookingSolidarityRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
return nil, err return nil, err
} }
if interceptor == nil { if interceptor == nil {
return srv.(SolidarityServiceServer).GetBooking(ctx, in) return srv.(SolidarityServiceServer).GetBookingSolidarity(ctx, in)
} }
info := &grpc.UnaryServerInfo{ info := &grpc.UnaryServerInfo{
Server: srv, Server: srv,
FullMethod: SolidarityService_GetBooking_FullMethodName, FullMethod: SolidarityService_GetBookingSolidarity_FullMethodName,
} }
handler := func(ctx context.Context, req interface{}) (interface{}, error) { handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SolidarityServiceServer).GetBooking(ctx, req.(*GetBookingRequest)) return srv.(SolidarityServiceServer).GetBookingSolidarity(ctx, req.(*GetBookingSolidarityRequest))
} }
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
@ -305,6 +357,42 @@ func _SolidarityService_DriverJourneys_Handler(srv interface{}, ctx context.Cont
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _SolidarityService_GetAllPassengers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(empty.Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SolidarityServiceServer).GetAllPassengers(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: SolidarityService_GetAllPassengers_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SolidarityServiceServer).GetAllPassengers(ctx, req.(*empty.Empty))
}
return interceptor(ctx, in, info, handler)
}
func _SolidarityService_GetPassenger_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetPassengerRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(SolidarityServiceServer).GetPassenger(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: SolidarityService_GetPassenger_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(SolidarityServiceServer).GetPassenger(ctx, req.(*GetPassengerRequest))
}
return interceptor(ctx, in, info, handler)
}
func _SolidarityService_SetPassengerTrip_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _SolidarityService_SetPassengerTrip_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PassengerTripRequest) in := new(PassengerTripRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -339,16 +427,16 @@ var SolidarityService_ServiceDesc = grpc.ServiceDesc{
Handler: _SolidarityService_SetDriverPunctualAvailabilities_Handler, Handler: _SolidarityService_SetDriverPunctualAvailabilities_Handler,
}, },
{ {
MethodName: "CreateBooking", MethodName: "CreateBookingSolidarity",
Handler: _SolidarityService_CreateBooking_Handler, Handler: _SolidarityService_CreateBookingSolidarity_Handler,
}, },
{ {
MethodName: "UpdateBooking", MethodName: "UpdateBookingSolidarity",
Handler: _SolidarityService_UpdateBooking_Handler, Handler: _SolidarityService_UpdateBookingSolidarity_Handler,
}, },
{ {
MethodName: "GetBooking", MethodName: "GetBookingSolidarity",
Handler: _SolidarityService_GetBooking_Handler, Handler: _SolidarityService_GetBookingSolidarity_Handler,
}, },
{ {
MethodName: "GetBookingsByStatus", MethodName: "GetBookingsByStatus",
@ -358,6 +446,14 @@ var SolidarityService_ServiceDesc = grpc.ServiceDesc{
MethodName: "DriverJourneys", MethodName: "DriverJourneys",
Handler: _SolidarityService_DriverJourneys_Handler, Handler: _SolidarityService_DriverJourneys_Handler,
}, },
{
MethodName: "GetAllPassengers",
Handler: _SolidarityService_GetAllPassengers_Handler,
},
{
MethodName: "GetPassenger",
Handler: _SolidarityService_GetPassenger_Handler,
},
{ {
MethodName: "SetPassengerTrip", MethodName: "SetPassengerTrip",
Handler: _SolidarityService_SetPassengerTrip_Handler, Handler: _SolidarityService_SetPassengerTrip_Handler,

View File

@ -5,23 +5,23 @@ import (
"solidarity-service/servers/grpc/proto" "solidarity-service/servers/grpc/proto"
) )
func ConvertInternalToProtoBookingStatus(internalStatus internal.BookingStatus) proto.BookingStatus { func ConvertInternalToProtoBookingStatus(internalStatus internal.BookingStatus) proto.BookingSolidarityStatus {
switch internalStatus { switch internalStatus {
case internal.BookingStatusINITIATED: case internal.BookingStatusINITIATED:
return proto.BookingStatus_INITIATED return proto.BookingSolidarityStatus_INITIATED
case internal.BookingStatusWAITINGPASSENGERCONFIRMATION: case internal.BookingStatusWAITINGPASSENGERCONFIRMATION:
return proto.BookingStatus_WAITING_PASSENGER_CONFIRMATION return proto.BookingSolidarityStatus_WAITING_PASSENGER_CONFIRMATION
case internal.BookingStatusWAITINGDRIVERCONFIRMATION: case internal.BookingStatusWAITINGDRIVERCONFIRMATION:
return proto.BookingStatus_WAITING_DRIVER_CONFIRMATION return proto.BookingSolidarityStatus_WAITING_DRIVER_CONFIRMATION
case internal.BookingStatusCONFIRMED: case internal.BookingStatusCONFIRMED:
return proto.BookingStatus_CONFIRMED return proto.BookingSolidarityStatus_CONFIRMED
case internal.BookingStatusCANCELLED: case internal.BookingStatusCANCELLED:
return proto.BookingStatus_CANCELLED return proto.BookingSolidarityStatus_CANCELLED
case internal.BookingStatusCOMPLETEDPENDINGVALIDATION: case internal.BookingStatusCOMPLETEDPENDINGVALIDATION:
return proto.BookingStatus_COMPLETED_PENDING_VALIDATION return proto.BookingSolidarityStatus_COMPLETED_PENDING_VALIDATION
case internal.BookingStatusVALIDATED: case internal.BookingStatusVALIDATED:
return proto.BookingStatus_VALIDATED return proto.BookingSolidarityStatus_VALIDATED
default: default:
return proto.BookingStatus_CONFIRMED return proto.BookingSolidarityStatus_CONFIRMED
} }
} }

View File

@ -3,15 +3,18 @@ package grpcserver
import ( import (
"context" "context"
"errors" "errors"
"github.com/golang/protobuf/ptypes/timestamp" "fmt"
"github.com/paulmach/orb"
"github.com/paulmach/orb/geojson"
"github.com/rs/zerolog/log"
"solidarity-service/internal" "solidarity-service/internal"
"solidarity-service/servers/grpc/proto" "solidarity-service/servers/grpc/proto"
"solidarity-service/utils" "solidarity-service/utils"
"strings" "strings"
"sync" "sync"
"github.com/golang/protobuf/ptypes/timestamp"
"github.com/paulmach/orb"
"github.com/paulmach/orb/geojson"
"github.com/rs/zerolog/log"
"google.golang.org/protobuf/types/known/emptypb"
) )
func (s *SolidarityServiceServerImpl) SetDriverRegularAvailabilities(ctx context.Context, req *proto.DriverRegularAvailabilities) (resp *proto.DriverAvailabilitiesResponse, err error) { func (s *SolidarityServiceServerImpl) SetDriverRegularAvailabilities(ctx context.Context, req *proto.DriverRegularAvailabilities) (resp *proto.DriverAvailabilitiesResponse, err error) {
@ -20,6 +23,7 @@ func (s *SolidarityServiceServerImpl) SetDriverRegularAvailabilities(ctx context
Success: false, Success: false,
}, errors.New("missing required fields") }, errors.New("missing required fields")
} }
driver := internal.Driver{ driver := internal.Driver{
Driver_departure_address: &geojson.Feature{ Driver_departure_address: &geojson.Feature{
Type: "Feature", Type: "Feature",
@ -36,38 +40,38 @@ func (s *SolidarityServiceServerImpl) SetDriverRegularAvailabilities(ctx context
AvailabilitiesType: internal.Regular, AvailabilitiesType: internal.Regular,
} }
if req.DriverRequest.Driver.FirstName != nil { if req.DriverRequest.Driver.FirstName != "" {
driver.Driver.FirstName = *req.DriverRequest.Driver.FirstName driver.Driver.FirstName = req.DriverRequest.Driver.FirstName
} }
if req.DriverRequest.Driver.LastName != nil { if req.DriverRequest.Driver.LastName != "" {
driver.Driver.LastName = *req.DriverRequest.Driver.LastName driver.Driver.LastName = req.DriverRequest.Driver.LastName
} }
if req.DriverRequest.Driver.Grade != nil { if req.DriverRequest.Driver.Grade != 0 {
driver.Driver.Grade = *req.DriverRequest.Driver.Grade driver.Driver.Grade = req.DriverRequest.Driver.Grade
} }
if req.DriverRequest.Driver.Picture != nil { if req.DriverRequest.Driver.Picture != "" {
driver.Driver.Picture = *req.DriverRequest.Driver.Picture driver.Driver.Picture = req.DriverRequest.Driver.Picture
} }
if req.DriverRequest.Driver.Gender != nil { if req.DriverRequest.Driver.Gender != "" {
driver.Driver.Gender = *req.DriverRequest.Driver.Gender driver.Driver.Gender = req.DriverRequest.Driver.Gender
} }
if req.DriverRequest.Driver.VerifiedIdentity != nil { if req.DriverRequest.Driver.VerifiedIdentity != false {
driver.Driver.VerifiedIdentity = *req.DriverRequest.Driver.VerifiedIdentity driver.Driver.VerifiedIdentity = req.DriverRequest.Driver.VerifiedIdentity
} }
if req.DriverRequest.Car != nil { if req.DriverRequest.Car != nil {
driver.Car = internal.Car{ driver.Car = internal.Car{
Model: *req.DriverRequest.Car.Model, Model: req.DriverRequest.Car.Model,
Brand: *req.DriverRequest.Car.Brand, Brand: req.DriverRequest.Car.Brand,
} }
} }
if req.DriverRequest.Preferences != nil { if req.DriverRequest.Preferences != nil {
driver.Preferences = internal.Preferences{ driver.Preferences = internal.Preferences{
Smoking: *req.DriverRequest.Preferences.Smoking, Smoking: req.DriverRequest.Preferences.Smoking,
Animals: *req.DriverRequest.Preferences.Animals, Animals: req.DriverRequest.Preferences.Animals,
Music: *req.DriverRequest.Preferences.Music, Music: req.DriverRequest.Preferences.Music,
Is_talker: *req.DriverRequest.Preferences.IsTalker, Is_talker: req.DriverRequest.Preferences.IsTalker,
Luggage_size: *req.DriverRequest.Preferences.LuggageSize, Luggage_size: req.DriverRequest.Preferences.LuggageSize,
} }
} }
for _, v := range req.DriverAvailabilities { for _, v := range req.DriverAvailabilities {
@ -111,38 +115,38 @@ func (s *SolidarityServiceServerImpl) SetDriverPunctualAvailabilities(ctx contex
AvailabilitiesType: internal.Punctual, AvailabilitiesType: internal.Punctual,
} }
if req.DriverRequest.Driver.FirstName != nil { if req.DriverRequest.Driver.FirstName != "" {
driver.Driver.FirstName = *req.DriverRequest.Driver.FirstName driver.Driver.FirstName = req.DriverRequest.Driver.FirstName
} }
if req.DriverRequest.Driver.LastName != nil { if req.DriverRequest.Driver.LastName != "" {
driver.Driver.LastName = *req.DriverRequest.Driver.LastName driver.Driver.LastName = req.DriverRequest.Driver.LastName
} }
if req.DriverRequest.Driver.Grade != nil { if req.DriverRequest.Driver.Grade != 0 {
driver.Driver.Grade = *req.DriverRequest.Driver.Grade driver.Driver.Grade = req.DriverRequest.Driver.Grade
} }
if req.DriverRequest.Driver.Picture != nil { if req.DriverRequest.Driver.Picture != "" {
driver.Driver.Picture = *req.DriverRequest.Driver.Picture driver.Driver.Picture = req.DriverRequest.Driver.Picture
} }
if req.DriverRequest.Driver.Gender != nil { if req.DriverRequest.Driver.Gender != ""{
driver.Driver.Gender = *req.DriverRequest.Driver.Gender driver.Driver.Gender = req.DriverRequest.Driver.Gender
} }
if req.DriverRequest.Driver.VerifiedIdentity != nil { if req.DriverRequest.Driver.VerifiedIdentity != false {
driver.Driver.VerifiedIdentity = *req.DriverRequest.Driver.VerifiedIdentity driver.Driver.VerifiedIdentity = req.DriverRequest.Driver.VerifiedIdentity
} }
if req.DriverRequest.Car != nil { if req.DriverRequest.Car != nil {
driver.Car = internal.Car{ driver.Car = internal.Car{
Model: *req.DriverRequest.Car.Model, Model: req.DriverRequest.Car.Model,
Brand: *req.DriverRequest.Car.Brand, Brand: req.DriverRequest.Car.Brand,
} }
} }
if req.DriverRequest.Preferences != nil { if req.DriverRequest.Preferences != nil {
driver.Preferences = internal.Preferences{ driver.Preferences = internal.Preferences{
Smoking: *req.DriverRequest.Preferences.Smoking, Smoking: req.DriverRequest.Preferences.Smoking,
Animals: *req.DriverRequest.Preferences.Animals, Animals: req.DriverRequest.Preferences.Animals,
Music: *req.DriverRequest.Preferences.Music, Music: req.DriverRequest.Preferences.Music,
Is_talker: *req.DriverRequest.Preferences.IsTalker, Is_talker: req.DriverRequest.Preferences.IsTalker,
Luggage_size: *req.DriverRequest.Preferences.LuggageSize, Luggage_size: req.DriverRequest.Preferences.LuggageSize,
} }
} }
for _, v := range req.DriverAvailabilities { for _, v := range req.DriverAvailabilities {
@ -164,10 +168,62 @@ func (s *SolidarityServiceServerImpl) SetDriverPunctualAvailabilities(ctx contex
}, nil }, nil
} }
func (s *SolidarityServiceServerImpl) CreateBooking(ctx context.Context, req *proto.CreateBookingRequest) (resp *proto.CreateBookingResponse, err error) { func (s *SolidarityServiceServerImpl) GetAllPassengers( ctx context.Context, _ *emptypb.Empty) (resp *proto.GetAllPassengersResponse, err error) {
if req.Booking.DriverId == "" || req.Booking.PassengerId == "" || req.Booking.Id == "" || req.Booking.Status.String() == "" || req.Booking.DepartureAddress == nil || req.Booking.DestinationAddress == nil || req.Booking.PickupDate.Seconds == 0 { passengers, err := s.Handler.GetAllPassengers(context.Background())
return nil, errors.New("missing required fields") resp = &proto.GetAllPassengersResponse{
Passenger: []*proto.User{},
} }
response := []*proto.User{}
for _, v := range passengers {
temp := &proto.User{
Id: v.Passenger.ID,
Alias: v.Passenger.Alias,
FirstName: v.Passenger.FirstName,
LastName: v.Passenger.LastName,
Grade: v.Passenger.Grade,
Picture: v.Passenger.Picture,
Gender: v.Passenger.Gender,
VerifiedIdentity: v.Passenger.VerifiedIdentity,
}
response = append(response, temp)
}
resp.Passenger = response
return resp, nil
}
func (s *SolidarityServiceServerImpl) GetPassenger(ctx context.Context, req *proto.GetPassengerRequest) (resp *proto.GetPassengerResponse, er error){
if req.Passenger.Id == "" {
return nil, errors.New("missing required DriverId")
}
p, err := s.Handler.GetPassenger(context.Background(), req.Passenger.Id)
resp = &proto.GetPassengerResponse{
Passenger: &proto.User{
Id: p.Passenger.ID,
Alias: p.Passenger.Alias,
FirstName: p.Passenger.FirstName,
LastName: p.Passenger.LastName,
Grade: p.Passenger.Grade,
Picture: p.Passenger.Picture,
Gender: p.Passenger.Gender,
VerifiedIdentity: p.Passenger.VerifiedIdentity,
},
}
if err != nil {
fmt.Println("err getpassenger : ", err)
}else{
return resp, nil
}
return
}
func (s *SolidarityServiceServerImpl) CreateBookingSolidarity(ctx context.Context, req *proto.CreateBookingSolidarityRequest) (resp *proto.CreateBookingSolidarityResponse, err error) {
if req.Booking.DriverId == "" || req.Booking.DepartureAddress == nil || req.Booking.DestinationAddress == nil || req.Booking.PassengerId == "" || req.Booking.Id == "" || req.Booking.Status.String() == "" ||req.Booking.PickupDate.Seconds == 0 {
return nil, errors.New("missing required elements")
}
bookingRequest := internal.BookingRequest{ bookingRequest := internal.BookingRequest{
ID: req.Booking.Id, ID: req.Booking.Id,
Passenger_id: req.Booking.PassengerId, Passenger_id: req.Booking.PassengerId,
@ -189,7 +245,7 @@ func (s *SolidarityServiceServerImpl) CreateBooking(ctx context.Context, req *pr
}, },
Pickup_date: req.Booking.PickupDate.Seconds, Pickup_date: req.Booking.PickupDate.Seconds,
} }
passenger, driver, err := s.Handler.CreateBooking(context.Background(), bookingRequest) driver, err := s.Handler.CreateBooking(context.Background(), bookingRequest) //passenger,
if err != nil { if err != nil {
if strings.Contains(err.Error(), utils.SQL_DUPLICATE) { if strings.Contains(err.Error(), utils.SQL_DUPLICATE) {
err = errors.New("ID is already used") err = errors.New("ID is already used")
@ -202,31 +258,24 @@ func (s *SolidarityServiceServerImpl) CreateBooking(ctx context.Context, req *pr
} }
distance := s.Handler.CalculateDistanceBetweenFeatures(bookingRequest.Departure_address, bookingRequest.Destination_address) distance := s.Handler.CalculateDistanceBetweenFeatures(bookingRequest.Departure_address, bookingRequest.Destination_address)
priceType := proto.PriceType_FREE priceType := proto.PriceType_FREE
resp = &proto.CreateBookingResponse{ resp = &proto.CreateBookingSolidarityResponse{
Booking: &proto.Booking{}, Booking: &proto.BookingSolidarity{},
} }
resp.Booking = &proto.Booking{ resp.Booking = &proto.BookingSolidarity{
Id: bookingRequest.ID, Id: bookingRequest.ID,
Driver: &proto.User{ Driver: &proto.User{
Id: driver.Driver.ID, Id: driver.Driver.ID,
Alias: driver.Driver.Alias, Alias: driver.Driver.Alias,
FirstName: &driver.Driver.FirstName, FirstName: driver.Driver.FirstName,
LastName: &driver.Driver.LastName, LastName: driver.Driver.LastName,
Grade: &driver.Driver.Grade, Grade: driver.Driver.Grade,
Picture: &driver.Driver.Picture, Picture: driver.Driver.Picture,
Gender: &driver.Driver.Gender, Gender: driver.Driver.Gender,
VerifiedIdentity: &driver.Driver.VerifiedIdentity, VerifiedIdentity: driver.Driver.VerifiedIdentity,
}, },
Passenger: &proto.User{ Passenger: &proto.User{
Id: passenger.Passenger.ID, Id: req.Booking.PassengerId,
Alias: passenger.Passenger.Alias, },
FirstName: &passenger.Passenger.FirstName,
LastName: &passenger.Passenger.LastName,
Grade: &passenger.Passenger.Grade,
Picture: &passenger.Passenger.Picture,
Gender: &passenger.Passenger.Gender,
VerifiedIdentity: &passenger.Passenger.VerifiedIdentity,
},
PassengerPickupDate: &timestamp.Timestamp{ PassengerPickupDate: &timestamp.Timestamp{
Seconds: bookingRequest.Pickup_date, Seconds: bookingRequest.Pickup_date,
}, },
@ -241,22 +290,22 @@ func (s *SolidarityServiceServerImpl) CreateBooking(ctx context.Context, req *pr
Address: bookingRequest.Destination_address.Properties.MustString("name"), Address: bookingRequest.Destination_address.Properties.MustString("name"),
}, },
Status: ConvertInternalToProtoBookingStatus(bookingRequest.Status), Status: ConvertInternalToProtoBookingStatus(bookingRequest.Status),
Duration: &duration, Duration: duration,
Distance: &distance, Distance: distance,
Price: &proto.Price{ Price: &proto.Price{
Type: &priceType, Type: priceType,
}, },
Car: &proto.Car{ Car: &proto.Car{
Model: &driver.Car.Model, Model: driver.Car.Model,
Brand: &driver.Car.Brand, Brand: driver.Car.Brand,
}, },
} }
return resp, nil return resp, nil
} }
func (s *SolidarityServiceServerImpl) UpdateBooking(ctx context.Context, req *proto.UpdateBookingRequest) (resp *proto.UpdateBookingResponse, err error) { func (s *SolidarityServiceServerImpl) UpdateBookingSolidarity(ctx context.Context, req *proto.UpdateBookingSolidarityRequest) (resp *proto.UpdateBookingSolidarityResponse, err error) {
if req.BookingId == "" || req.Status.String() == "" { if req.BookingId == "" || req.Status.String() == "" {
return &proto.UpdateBookingResponse{ return &proto.UpdateBookingSolidarityResponse{
Success: false, Success: false,
}, errors.New("missing required fields") }, errors.New("missing required fields")
} }
@ -266,16 +315,16 @@ func (s *SolidarityServiceServerImpl) UpdateBooking(ctx context.Context, req *pr
if strings.Contains(err.Error(), utils.SQL_NO_ROWS) { if strings.Contains(err.Error(), utils.SQL_NO_ROWS) {
err = errors.New("invalid ID") err = errors.New("invalid ID")
} }
return &proto.UpdateBookingResponse{ return &proto.UpdateBookingSolidarityResponse{
Success: false, Success: false,
}, err }, err
} }
return &proto.UpdateBookingResponse{ return &proto.UpdateBookingSolidarityResponse{
Success: true, Success: true,
}, nil }, nil
} }
func (s *SolidarityServiceServerImpl) GetBooking(ctx context.Context, req *proto.GetBookingRequest) (resp *proto.GetBookingResponse, err error) { func (s *SolidarityServiceServerImpl) GetBookingSolidarity(ctx context.Context, req *proto.GetBookingSolidarityRequest) (resp *proto.GetBookingSolidarityResponse, err error) {
if req.BookingId == "" { if req.BookingId == "" {
return nil, errors.New("empty booking ID") return nil, errors.New("empty booking ID")
} }
@ -286,8 +335,8 @@ func (s *SolidarityServiceServerImpl) GetBooking(ctx context.Context, req *proto
} }
return nil, err return nil, err
} }
resp = &proto.GetBookingResponse{ resp = &proto.GetBookingSolidarityResponse{
Booking: &proto.Booking{}, Booking: &proto.BookingSolidarity{},
} }
priceType := proto.PriceType_FREE priceType := proto.PriceType_FREE
driver, err := s.Handler.GetDriver(context.Background(), booking.Driver.ID) driver, err := s.Handler.GetDriver(context.Background(), booking.Driver.ID)
@ -296,27 +345,20 @@ func (s *SolidarityServiceServerImpl) GetBooking(ctx context.Context, req *proto
} }
car := driver.Car car := driver.Car
distance := int64(booking.Distance) distance := int64(booking.Distance)
resp.Booking = &proto.Booking{ resp.Booking = &proto.BookingSolidarity{
Id: booking.ID, Id: booking.ID,
Driver: &proto.User{ Driver: &proto.User{
Id: booking.Driver.ID, Id: booking.Driver.ID,
Alias: booking.Driver.Alias, Alias: booking.Driver.Alias,
FirstName: &booking.Driver.FirstName, FirstName: booking.Driver.FirstName,
LastName: &booking.Driver.LastName, LastName: booking.Driver.LastName,
Grade: &booking.Driver.Grade, Grade: booking.Driver.Grade,
Picture: &booking.Driver.Picture, Picture: booking.Driver.Picture,
Gender: &booking.Driver.Gender, Gender: booking.Driver.Gender,
VerifiedIdentity: &booking.Driver.VerifiedIdentity, VerifiedIdentity: booking.Driver.VerifiedIdentity,
}, },
Passenger: &proto.User{ Passenger: &proto.User{
Id: booking.Passenger.ID, Id: booking.Passenger.ID,
Alias: booking.Passenger.Alias,
FirstName: &booking.Passenger.FirstName,
LastName: &booking.Passenger.LastName,
Grade: &booking.Passenger.Grade,
Picture: &booking.Passenger.Picture,
Gender: &booking.Passenger.Gender,
VerifiedIdentity: &booking.Passenger.VerifiedIdentity,
}, },
PassengerPickupDate: &timestamp.Timestamp{ PassengerPickupDate: &timestamp.Timestamp{
Seconds: booking.Pickup_date, Seconds: booking.Pickup_date,
@ -332,14 +374,14 @@ func (s *SolidarityServiceServerImpl) GetBooking(ctx context.Context, req *proto
Address: booking.PassengerDropAddress.Properties.MustString("name"), Address: booking.PassengerDropAddress.Properties.MustString("name"),
}, },
Status: ConvertInternalToProtoBookingStatus(booking.Status), Status: ConvertInternalToProtoBookingStatus(booking.Status),
Duration: &booking.Duration, Duration: booking.Duration,
Distance: &distance, Distance: distance,
Car: &proto.Car{ Car: &proto.Car{
Model: &car.Model, Model: car.Model,
Brand: &car.Brand, Brand: car.Brand,
}, },
Price: &proto.Price{ Price: &proto.Price{
Type: &priceType, Type: priceType,
}, },
} }
return resp, nil return resp, nil
@ -359,7 +401,7 @@ func (s *SolidarityServiceServerImpl) GetBookingsByStatus(ctx context.Context, r
} }
// Use a goroutine to concurrently convert bookings to proto // Use a goroutine to concurrently convert bookings to proto
respChan := make(chan []*proto.Booking, 1) respChan := make(chan []*proto.BookingSolidarity, 1)
go func() { go func() {
respChan <- convertInternalBookingsToProto(s, bookings, 50) respChan <- convertInternalBookingsToProto(s, bookings, 50)
}() }()
@ -379,8 +421,8 @@ func (s *SolidarityServiceServerImpl) GetBookingsByStatus(ctx context.Context, r
} }
} }
func convertInternalBookingsToProto(s *SolidarityServiceServerImpl, bookings []internal.Booking, maxGoroutines int) []*proto.Booking { func convertInternalBookingsToProto(s *SolidarityServiceServerImpl, bookings []internal.Booking, maxGoroutines int) []*proto.BookingSolidarity {
var responses []*proto.Booking var responses []*proto.BookingSolidarity
var wg sync.WaitGroup var wg sync.WaitGroup
var mu sync.Mutex var mu sync.Mutex
semaphore := make(chan struct{}, maxGoroutines) semaphore := make(chan struct{}, maxGoroutines)
@ -426,7 +468,7 @@ func convertInternalBookingsToProto(s *SolidarityServiceServerImpl, bookings []i
priceType := proto.PriceType_FREE priceType := proto.PriceType_FREE
distance := int64(booking.Distance) distance := int64(booking.Distance)
protoBooking := &proto.Booking{ protoBooking := &proto.BookingSolidarity{
Id: booking.ID, Id: booking.ID,
Status: ConvertInternalToProtoBookingStatus(booking.Status), Status: ConvertInternalToProtoBookingStatus(booking.Status),
Driver: convertInternalUserToProtoUser(driver.Driver), Driver: convertInternalUserToProtoUser(driver.Driver),
@ -436,14 +478,14 @@ func convertInternalBookingsToProto(s *SolidarityServiceServerImpl, bookings []i
}, },
PassengerDepartureRoute: convertInternalFeatureToProtoFeature(booking.PassengerPickupAddress), PassengerDepartureRoute: convertInternalFeatureToProtoFeature(booking.PassengerPickupAddress),
PassengerDestinationRoute: convertInternalFeatureToProtoFeature(booking.PassengerDropAddress), PassengerDestinationRoute: convertInternalFeatureToProtoFeature(booking.PassengerDropAddress),
Duration: &booking.Duration, Duration: booking.Duration,
Distance: &distance, Distance: distance,
Car: &proto.Car{ Car: &proto.Car{
Model: &car.Model, Model: car.Model,
Brand: &car.Brand, Brand: car.Brand,
}, },
Price: &proto.Price{ Price: &proto.Price{
Type: &priceType, Type: priceType,
}, },
} }
@ -466,12 +508,12 @@ func convertInternalUserToProtoUser(user internal.User) *proto.User {
return &proto.User{ return &proto.User{
Id: user.ID, Id: user.ID,
Alias: user.Alias, Alias: user.Alias,
FirstName: &user.FirstName, FirstName: user.FirstName,
LastName: &user.LastName, LastName: user.LastName,
Grade: &user.Grade, Grade: user.Grade,
Picture: &user.Picture, Picture: user.Picture,
Gender: &user.Gender, Gender: user.Gender,
VerifiedIdentity: &user.VerifiedIdentity, VerifiedIdentity: user.VerifiedIdentity,
} }
} }
@ -544,22 +586,22 @@ func (s *SolidarityServiceServerImpl) DriverJourneys(ctx context.Context, req *p
User: &proto.User{ User: &proto.User{
Id: v.Driver.ID, Id: v.Driver.ID,
Alias: v.Driver.Alias, Alias: v.Driver.Alias,
FirstName: &v.Driver.FirstName, FirstName: v.Driver.FirstName,
LastName: &v.Driver.LastName, LastName: v.Driver.LastName,
Grade: &v.Driver.Grade, Grade: v.Driver.Grade,
Picture: &v.Driver.Picture, Picture: v.Driver.Picture,
Gender: &v.Driver.Gender, Gender: v.Driver.Gender,
VerifiedIdentity: &v.Driver.VerifiedIdentity, VerifiedIdentity: v.Driver.VerifiedIdentity,
}, },
Car: &proto.Car{ Car: &proto.Car{
Model: &v.Car.Model, Model: v.Car.Model,
Brand: &v.Car.Brand, Brand: v.Car.Brand,
}, },
DriverDeparture_Date: &timestamp.Timestamp{ DriverDeparture_Date: &timestamp.Timestamp{
Seconds: req.DepartureDate.Seconds, Seconds: req.DepartureDate.Seconds,
}, },
Price: &proto.Price{ Price: &proto.Price{
Type: &priceType, Type: priceType,
}, },
DriverDeparture_Address: v.Driver_departure_address.Properties.MustString("name"), DriverDeparture_Address: v.Driver_departure_address.Properties.MustString("name"),
} }
@ -582,31 +624,31 @@ func (s *SolidarityServiceServerImpl) SetPassengerTrip(ctx context.Context, req
passenger := internal.Passenger{} passenger := internal.Passenger{}
passenger.Passenger.ID = req.Passenger.Id passenger.Passenger.ID = req.Passenger.Id
passenger.Passenger.Alias = req.Passenger.Alias passenger.Passenger.Alias = req.Passenger.Alias
if req.Passenger.FirstName != nil { if req.Passenger.FirstName != "" {
passenger.Passenger.FirstName = *req.Passenger.FirstName passenger.Passenger.FirstName = req.Passenger.FirstName
} }
if req.Passenger.LastName != nil { if req.Passenger.LastName != "" {
passenger.Passenger.LastName = *req.Passenger.LastName passenger.Passenger.LastName = req.Passenger.LastName
} }
if req.Passenger.Grade != nil { if req.Passenger.Grade != 0 {
passenger.Passenger.Grade = *req.Passenger.Grade passenger.Passenger.Grade = req.Passenger.Grade
} }
if req.Passenger.Picture != nil { if req.Passenger.Picture != "" {
passenger.Passenger.Picture = *req.Passenger.Picture passenger.Passenger.Picture = req.Passenger.Picture
} }
if req.Passenger.Gender != nil { if req.Passenger.Gender != "" {
passenger.Passenger.Gender = *req.Passenger.Gender passenger.Passenger.Gender = req.Passenger.Gender
} }
if req.Passenger.VerifiedIdentity != nil { if req.Passenger.VerifiedIdentity != false {
passenger.Passenger.VerifiedIdentity = *req.Passenger.VerifiedIdentity passenger.Passenger.VerifiedIdentity = req.Passenger.VerifiedIdentity
} }
if req.Preferences != nil { if req.Preferences != nil {
passenger.Preferences = internal.Preferences{ passenger.Preferences = internal.Preferences{
Smoking: *req.Preferences.Smoking, Smoking: req.Preferences.Smoking,
Animals: *req.Preferences.Animals, Animals: req.Preferences.Animals,
Music: *req.Preferences.Music, Music: req.Preferences.Music,
Is_talker: *req.Preferences.IsTalker, Is_talker: req.Preferences.IsTalker,
Luggage_size: *req.Preferences.LuggageSize, Luggage_size: req.Preferences.LuggageSize,
} }
} }

BIN
solidarity-service Executable file

Binary file not shown.

789
storage/mongodb.go Normal file
View File

@ -0,0 +1,789 @@
package storage
import (
"github.com/paulmach/orb"
"github.com/paulmach/orb/geojson"
"go.mongodb.org/mongo-driver/mongo"
"github.com/spf13/viper"
"go.mongodb.org/mongo-driver/mongo/options"
"solidarity-service/utils"
"context"
"github.com/google/uuid"
"encoding/json"
"errors"
"fmt"
_ "github.com/lib/pq"
"github.com/rs/zerolog/log"
"strings"
"sync"
"time"
"go.mongodb.org/mongo-driver/bson"
"solidarity-service/internal"
)
type MongoDBStorage struct {
*mongo.Client
DbName string
Collections map[string]string
}
func NewMongoDBStorage(cfg *viper.Viper) (MongoDBStorage, error) {
var (
mongodb_host = cfg.GetString("storage.db.mongodb.host")
mongodb_port = cfg.GetString("storage.db.mongodb.port")
mongodb_dbname = cfg.GetString("storage.db.mongodb.db_name")
mongodb_groups = cfg.GetString("storage.db.mongodb.collections.groups")
////////////////////////code
mongodb_groups_members = cfg.GetString("storage.db.mongodb.collections.groups_member")
)
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://" + mongodb_host + ":" + mongodb_port))
if err != nil {
return MongoDBStorage{}, err
}
err = client.Connect(context.TODO())
if err != nil {
return MongoDBStorage{}, err
}
storage := MongoDBStorage{
Client: client,
DbName: mongodb_dbname,
Collections: map[string]string{
"groups": mongodb_groups,
/////////////////////////////code
"groups_member": mongodb_groups_members,
},
}
//TODO Indexes
return storage, err
}
func (s MongoDBStorage) CreatePassenger(passenger internal.Passenger) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["passengers"])
_, err = uuid.Parse(passenger.Passenger.ID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage CreatePassenger invalid ID")
return err
}
if passenger.Passenger.Alias == "" || passenger.Passenger.Operator == "" {
errMsg := "MongoDB Storage CreatePassenger empty alias or operator FQDN."
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
// preferencesJSON, err := json.Marshal(passenger.Preferences)
if err != nil {
errMsg := "MongoDB Storage CreatePassenger Error encoding Preferences to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
if _, err := collection.InsertOne(context.TODO(), passenger); err != nil {
return err
}
// if err != nil {
// if strings.Contains(err.Error(), utils.SQL_DUPLICATE) {
// err = s.UpdatePassenger(passenger)
// if err != nil {
// return err
// }
// return nil
// }
// errMsg := "Postgresql Storage CreatePassenger Error inserting data into the database"
// log.Error().Err(err).Msg(errMsg)
// return errors.New(errMsg + err.Error())
// }
return nil
}
func (s MongoDBStorage) UpdatePassenger(passenger internal.Passenger) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["passengers"])
_, err = uuid.Parse(passenger.Passenger.ID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage UpdatePassenger invalid ID")
return err
}
if passenger.Passenger.Alias == "" || passenger.Passenger.Operator == "" {
errMsg := "MongoDB Storage UpdatePassenger empty alias or operator FQDN."
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
// preferencesJSON, err := json.Marshal(passenger.Preferences)
if err != nil {
errMsg := "MongoDB Storage UpdatePassenger Error encoding Preferences to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
if _, err := collection.ReplaceOne(context.TODO(), bson.M{"_id": passenger.Passenger.ID}, passenger); err != nil {
fmt.Println(err)
return err
}
if err != nil {
errMsg := "MongoDB Storage UpdatePassenger Error updating data in the database"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
return nil
}
func (s MongoDBStorage) GetPassenger(passengerID string) (passenger internal.Passenger, err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["passengers"])
var preferencesJSON []byte
_ , err = uuid.Parse(passenger.Passenger.ID)
if len(passengerID) == 0 {
return passenger, errors.New("no group id provided")
} else {
_, err = collection.Find(context.TODO(), bson.M{"_id": bson.M{"$in": passengerID}})
if err != nil {
return passenger, err
}
}
if err != nil {
errMsg := "MongoDB Storage GetPassenger Error querying data from the database"
log.Error().Err(err).Msg(errMsg)
return passenger, errors.New(errMsg + err.Error())
}
err = json.Unmarshal(preferencesJSON, &passenger.Preferences)
if err != nil {
errMsg := "MongoDB Storage GetPassenger Error decoding Preferences from JSON"
log.Error().Err(err).Msg(errMsg)
return passenger, errors.New(errMsg + err.Error())
}
return passenger, nil
}
func (s MongoDBStorage) CreateDriver(driver internal.Driver) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["drivers"])
//var availabilities []byte
_, err = uuid.Parse(driver.Driver.ID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage CreateDriver invalid ID")
return err
}
//departureJSON, err := json.Marshal(driver.Driver_departure_address)
if err != nil {
errMsg := "MongoDB Storage CreateDriver Error encoding departure Feature to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
//preferencesJSON, err := json.Marshal(driver.Preferences)
if err != nil {
errMsg := "MongoDB Storage CreateDriver Error encoding Preferences to JSON"
log.Error().Err(err).Msg(errMsg + err.Error())
return errors.New(errMsg)
}
//carJSON, err := json.Marshal(driver.Car)
if err != nil {
errMsg := "MongoDB Storage CreateDriver Error encoding Car to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
if driver.Driver.Alias == "" || driver.Driver.Operator == "" {
errMsg := "MongoDB Storage CreateDriver empty alias or operator FQDN."
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
if driver.AvailabilitiesType != internal.Punctual && driver.AvailabilitiesType != internal.Regular {
errMsg := "MongoDB Storage CreateDriver invalid Availabilities Type"
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
if driver.Radius == 0 {
errMsg := "MongoDB Storage CreateDriver Radius has to be defined"
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
switch driver.AvailabilitiesType {
case internal.Punctual:
//availabilities, err = json.Marshal(driver.PunctualAvailabilities)
if err != nil {
errMsg := "MongoDB Storage CreateDriver error converting Punctual availabilities"
log.Error().Msg(errMsg)
return errors.New(errMsg + err.Error())
}
case internal.Regular:
//availabilities, err = json.Marshal(driver.RegularAvailabilities)
if err != nil {
errMsg := "MongoDB Storage CreateDriver error converting Regular availabilities"
log.Error().Msg(errMsg)
return errors.New(errMsg + err.Error())
}
}
if _, err := collection.InsertOne(context.TODO(), driver); err != nil {
return err
}
// if err != nil {
// if strings.Contains(err.Error(), utils.SQL_DUPLICATE) {
// err = s.UpdateDriver(driver)
// if err != nil {
// return err
// }
// return nil
// }
// errMsg := "MongoDB Storage CreateDriver Error inserting data into the database"
// log.Error().Err(err).Msg(errMsg)
// return errors.New(errMsg + err.Error())
// }
return nil
}
func (s MongoDBStorage) UpdateDriver(driver internal.Driver) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["drivers"])
//var availabilities []byte
_, err = uuid.Parse(driver.Driver.ID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage UpdateDriver invalid ID")
return err
}
//departureJSON, err := json.Marshal(driver.Driver_departure_address)
if err != nil {
errMsg := "MongoDB Storage UpdateDriver Error encoding departure Feature to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
//preferencesJSON, err := json.Marshal(driver.Preferences)
if err != nil {
errMsg := "MongoDB Storage UpdateDriver Error encoding Preferences to JSON"
log.Error().Err(err).Msg(errMsg + err.Error())
return errors.New(errMsg)
}
//carJSON, err := json.Marshal(driver.Car)
if err != nil {
errMsg := "MongoDB Storage UpdateDriver Error encoding Car to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
if driver.Driver.Alias == "" || driver.Driver.Operator == "" {
errMsg := "MongoDB Storage UpdateDriver empty alias or operator FQDN."
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
if driver.AvailabilitiesType != internal.Punctual && driver.AvailabilitiesType != internal.Regular {
errMsg := "MongoDB Storage UpdateDriver invalid Availabilities Type"
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
if driver.Radius == 0 {
errMsg := "MongoDB Storage UpdateDriver Radius has to be defined"
log.Error().Msg(errMsg)
return errors.New(errMsg)
}
// switch driver.AvailabilitiesType {
// case internal.Punctual:
// availabilities, err = json.Marshal(driver.PunctualAvailabilities)
// if err != nil {
// errMsg := "MongoDB Storage UpdateDriver error converting Punctual availabilities"
// log.Error().Msg(errMsg)
// return errors.New(errMsg + err.Error())
// }
// case internal.Regular:
// availabilities, err = json.Marshal(driver.RegularAvailabilities)
// if err != nil {
// errMsg := "MongoDB Storage UpdateDriver error converting Regular availabilities"
// log.Error().Msg(errMsg)
// return errors.New(errMsg + err.Error())
// }
// }
if _, err := collection.ReplaceOne(context.TODO(), bson.M{"_id": driver.Driver.ID}, driver); err != nil {
fmt.Println(err)
return err
}
if err != nil {
errMsg := "MongoDB Storage UpdateDriver Error updating data in the database"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
return nil
}
func (s MongoDBStorage) GetDriver(driverID string) ( *internal.Driver, error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["drivers"])
// var preferencesJSON []byte
// var departureAddress []byte
// var availabilitiesJSON []byte
// var carJSON []byte
driver := &internal.Driver{}
if err := collection.FindOne(context.TODO(), bson.M{"_id": driverID}).Decode(driver); err != nil {
return nil, err
}
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error querying data from the database"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// err = json.Unmarshal(preferencesJSON, &driver.Preferences)
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error decoding Preferences from JSON"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// err = json.Unmarshal(carJSON, &driver.Car)
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error decoding Car from JSON"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// driver.Driver_departure_address, err = geojson.UnmarshalFeature(departureAddress)
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error decoding Driver departure route into GeoJSON"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// switch driver.AvailabilitiesType {
// case Regular:
// err = json.Unmarshal(availabilitiesJSON, &driver.RegularAvailabilities)
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error decoding Regular Availabilities from JSON"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// case Punctual:
// err = json.Unmarshal(availabilitiesJSON, &driver.PunctualAvailabilities)
// if err != nil {
// errMsg := "MongoDB Storage GetDriver Error decoding Punctual Availabilities from JSON"
// log.Error().Err(err).Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
// default:
// errMsg := "MongoDB Storage GetDriver Invalid Availabilities Type"
// log.Error().Msg(errMsg)
// return driver, errors.New(errMsg + err.Error())
// }
return driver, nil
}
func (s MongoDBStorage) CreateBooking(booking internal.BookingRequest) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["bookings"])
_, err = uuid.Parse(booking.Driver_id)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage CreateBooking invalid Driver ID")
return err
}
_, err = uuid.Parse(booking.Passenger_id)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage CreateBooking invalid Passenger ID")
return err
}
_, err = uuid.Parse(booking.ID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage CreateBooking invalid Booking ID")
return err
}
if booking.Operator == "" {
log.Error().Err(err).Msg("MongoDB Storage CreateBooking empty operator")
return err
}
//departureJSON, err := json.Marshal(booking.Departure_address)
if err != nil {
errMsg := "MongoDB Storage CreateBooking Error encoding departure Feature to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
//destinationJSON, err := json.Marshal(booking.Destination_address)
if err != nil {
errMsg := "MongoDB Storage CreateBooking Error converting destination Feature to JSON"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
if booking.Pickup_date == 0 {
errMsg := "MongoDB Storage CreateBooking empty UNIX pickup Date timestamp"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg)
}
booking.Distance = utils.Haversine(booking.Departure_address.Point().Lat(), booking.Departure_address.Point().Lon(),
booking.Destination_address.Point().Lat(), booking.Destination_address.Point().Lon())
booking.Duration, _ = utils.CalculateDurationBetweenFeatures(booking.Departure_address, booking.Destination_address)
if _, err := collection.InsertOne(context.TODO(), booking); err != nil {
return err
}
if err != nil {
errMsg := "MongoDB Storage CreateBooking Error inserting data into the database"
log.Error().Err(err).Msg(errMsg)
return errors.New(errMsg + err.Error())
}
return nil
}
func (s MongoDBStorage) GetBooking(bookingID string) (*internal.Booking, error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["bookings"])
//var departureAddress []byte
//var destinationAddress []byte
booking := &internal.Booking{}
if err := collection.FindOne(context.TODO(), bson.M{"_id": bookingID}).Decode(booking); err != nil {
return nil, err
}
// if err != nil {
// errMsg := "MongoDB Storage GetBooking Error getting booking"
// log.Error().Err(err).Msg(errMsg)
// return internal.Booking{}, errors.New(errMsg + err.Error())
// }
// booking.PassengerPickupAddress, err = geojson.UnmarshalFeature(departureAddress)
// if err != nil {
// errMsg := "MongoDB Storage GetBooking Error decoding Driver departure route into GeoJSON"
// log.Error().Err(err).Msg(errMsg)
// return internal.Booking{}, errors.New(errMsg + err.Error())
// }
// booking.PassengerDropAddress, err = geojson.UnmarshalFeature(destinationAddress)
// if err != nil {
// errMsg := "MongoDB Storage GetBooking Error decoding Driver destination route into GeoJSON"
// log.Error().Err(err).Msg(errMsg)
// return internal.Booking{}, errors.New(errMsg + err.Error())
// }
passenger, err := s.GetPassenger(booking.Passenger.ID)
if err != nil {
errMsg := "MongoDB Storage GetBooking Error getting passenger"
log.Error().Err(err).Msg(errMsg)
return booking, errors.New(errMsg + err.Error())
}
booking.Passenger = passenger.Passenger
driver, err := s.GetDriver(booking.Driver.ID)
if err != nil {
errMsg := "MongoDB Storage GetBooking Error getting driver"
log.Error().Err(err).Msg(errMsg)
return booking, errors.New(errMsg + err.Error())
}
booking.Driver = driver.Driver
return booking, nil
}
func (s MongoDBStorage) UpdateBookingStatus(bookingStatusID string, status internal.BookingStatus) (err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["bookings"])
_, err = uuid.Parse(bookingStatusID)
if err != nil {
log.Error().Err(err).Msg("MongoDB Storage UpdateBookingStatus invalid Booking ID")
return err
}
_, err = s.GetBooking(bookingStatusID)
if err != nil {
return errors.New(err.Error())
}
if _, err := collection.ReplaceOne(context.TODO(), bson.M{"_id": bookingStatusID}, status); err != nil {
fmt.Println(err)
return err
}
return nil
}
func (s MongoDBStorage) FilterUserBookingsByStatus(userType string, status internal.BookingStatus, userID string) (bookings []internal.Booking, err error) {
collection := s.Client.Database(s.DbName).Collection(s.Collections["bookings"])
if err != nil {
return nil, errors.New("invalid UUID")
}
if userType != "driver" && userType != "passenger" {
return nil, errors.New("invalid user type")
}
var cur *mongo.Cursor
findOptions := options.Find()
if len(userID) == 0 {
return bookings, errors.New("no group id provided")
} else {
cur, err = collection.Find(context.TODO(), bson.M{"_id": bson.M{"$in": userID}}, findOptions)
if err != nil {
return bookings, err
}
}
for cur.Next(context.TODO()) {
var group internal.Booking
var elem bson.M
if err := cur.Decode(&elem); err != nil {
return bookings, err
}
bsonBytes, _ := bson.Marshal(elem)
bson.Unmarshal(bsonBytes, &group)
bookings = append(bookings, group)
}
var wg sync.WaitGroup
//var mu sync.Mutex
// for rows.Next() {
// var departureAddress []byte
// var destinationAddress []byte
// var booking internal.Booking
// if err := rows.Scan(&booking.ID, &booking.Passenger.ID, &booking.Driver.ID, &booking.Status, &departureAddress, &destinationAddress, &booking.Pickup_date, &booking.Duration, &booking.Distance); err != nil {
// return nil, err
// }
// wg.Add(1)
// go func(booking internal.Booking, departureAddress, destinationAddress []byte) {
// defer wg.Done()
// // Common logic for both "driver" and "passenger" cases
// booking, err := s.populateBookingDetails(booking, departureAddress, destinationAddress)
// if err != nil {
// mu.Lock()
// err = fmt.Errorf("Error populating booking details: %w", err)
// mu.Unlock()
// return
// }
// mu.Lock()
// bookings = append(bookings, booking)
// mu.Unlock()
// }(booking, departureAddress, destinationAddress)
// }
// Wait for all goroutines to finish
wg.Wait()
// if err := rows.Err(); err != nil {
// return nil, err
// }
return bookings, nil
}
func (s MongoDBStorage) populateBookingDetails(booking internal.Booking, departureAddress, destinationAddress []byte) (internal.Booking, error) {
var wg sync.WaitGroup
var mu sync.Mutex
errCh := make(chan error, 4) // Buffered channel to handle potential errors
// Concurrently fetch passenger information
wg.Add(1)
go func() {
defer wg.Done()
passenger, err := s.GetPassenger(booking.Passenger.ID)
if err != nil {
errCh <- fmt.Errorf("MongoDB Storage GetBooking Error getting passenger: %w", err)
return
}
mu.Lock()
booking.Passenger = passenger.Passenger
mu.Unlock()
}()
// Concurrently fetch driver information
wg.Add(1)
go func() {
defer wg.Done()
driver, err := s.GetDriver(booking.Driver.ID)
if err != nil {
errCh <- fmt.Errorf("MongoDB Storage GetBooking Error getting driver: %w", err)
return
}
mu.Lock()
booking.Driver = driver.Driver
mu.Unlock()
}()
// Concurrently decode departureAddress into GeoJSON
wg.Add(1)
go func() {
defer wg.Done()
decodedDepartureAddress, err := geojson.UnmarshalFeature(departureAddress)
if err != nil {
errCh <- fmt.Errorf("MongoDB Storage FilterBookingsByStatus Error decoding Driver departure route into GeoJSON: %w", err)
return
}
mu.Lock()
booking.PassengerPickupAddress = decodedDepartureAddress
mu.Unlock()
}()
// Concurrently decode destinationAddress into GeoJSON
wg.Add(1)
go func() {
defer wg.Done()
decodedDestinationAddress, err := geojson.UnmarshalFeature(destinationAddress)
if err != nil {
errCh <- fmt.Errorf("MongoDB Storage FilterBookingsByStatus Error decoding Driver destination route into GeoJSON: %w", err)
return
}
mu.Lock()
booking.PassengerDropAddress = decodedDestinationAddress
mu.Unlock()
}()
// Close the error channel after all goroutines are done
go func() {
wg.Wait()
close(errCh)
}()
// Check for errors using a select statement
for err := range errCh {
return internal.Booking{}, err // Return the first error encountered
}
return booking, nil
}
func (s MongoDBStorage) GetAllDrivers( date int64) (drivers []internal.Driver, err error) {
// rows := s.Client.Database(s.DbName).Collection(s.Collections["drivers"])
if err != nil {
return nil, err
}
// defer rows.Close()
//for rows.Next(ctx) {
var driver internal.Driver
var departureRoute []byte
var preferencesJSON []byte
var availabilitiesJSON []byte
var carJSON []byte
// if err := rows.Scan(
// &driver.Driver.ID,
// &departureRoute,
// &driver.Radius,
// &driver.Driver.LastName,
// &driver.Driver.FirstName,
// &driver.Driver.Grade,
// &driver.Driver.Alias,
// &driver.Driver.Picture,
// &driver.Driver.VerifiedIdentity,
// &preferencesJSON,
// &driver.AvailabilitiesType,
// &availabilitiesJSON,
// &driver.Driver.Operator,
// &carJSON,
// ); err != nil {
// return nil, err
// }
if err := json.Unmarshal(departureRoute, &driver.Driver_departure_address); err != nil {
return nil, err
}
if err := json.Unmarshal(preferencesJSON, &driver.Preferences); err != nil {
return nil, err
}
if err := json.Unmarshal(carJSON, &driver.Car); err != nil {
return nil, err
}
// Filter drivers based on date and time matching punctual or regular availabilities.
if driver.AvailabilitiesType == internal.Punctual {
if err := json.Unmarshal(availabilitiesJSON, &driver.PunctualAvailabilities); err != nil {
return nil, err
}
year, month, day := time.Unix(date, 0).Date()
dateHour := time.Unix(date, 0).UTC().Local()
dateHour_string := dateHour.Format("3:04 PM")
for _, avail := range driver.PunctualAvailabilities {
availyear, availmonth, availday := time.Unix(avail.Date, 0).Date()
if availyear == year && availmonth == month && availday == day {
startTime, err := time.Parse("3:04 PM", avail.StartTime)
if err != nil {
return nil, err
}
endTime, err := time.Parse("3:04 PM", avail.EndTime)
if err != nil {
return nil, err
}
// Convert DateHour_string to time.Time
dateHourTime, err := time.Parse("3:04 PM", dateHour_string)
if err != nil {
return nil, err
}
if dateHourTime.After(startTime) || dateHourTime.Equal(startTime) {
if dateHourTime.Before(endTime) || dateHourTime.Equal(endTime) {
drivers = append(drivers, driver)
}
}
}
// Check if the date and time match the punctual driver's availability.
}
} else if driver.AvailabilitiesType == internal.Regular {
if err := json.Unmarshal(availabilitiesJSON, &driver.RegularAvailabilities); err != nil {
return nil, err
}
dayOfWeek := strings.ToLower(time.Unix(date, 0).Local().Format("Mon"))
dateHour := time.Unix(date, 0).UTC().Local()
dateHour_string := dateHour.Format("3:04 PM")
for _, avail := range driver.RegularAvailabilities {
// Check if the day and time match the regular driver's availability.
if strings.ToLower(avail.DayOfWeek) == dayOfWeek {
startTime, err := time.Parse("3:04 PM", avail.StartTime)
if err != nil {
return nil, err
}
endTime, err := time.Parse("3:04 PM", avail.EndTime)
if err != nil {
return nil, err
}
// Convert DateHour_string to time.Time
dateHourTime, err := time.Parse("3:04 PM", dateHour_string)
if err != nil {
return nil, err
}
if dateHourTime.After(startTime) || dateHourTime.Equal(startTime) {
if dateHourTime.Before(endTime) || dateHourTime.Equal(endTime) {
drivers = append(drivers, driver)
}
}
}
}
}
//}
// if err := rows.Err(); err != nil {
// return nil, err
// }
return drivers, nil
}
func (s MongoDBStorage) DriverJourneys(departure_route *geojson.Feature, departure_date int64) (drivers []internal.Driver, err error) {
allDrivers, err := s.GetAllDrivers(departure_date)
if err != nil {
return nil, err
}
for _, driver := range allDrivers {
// Check if the departure route is the same as the driver's departure route.
if departure_route.Point().Y() == driver.Driver_departure_address.Point().Y() && departure_route.Point().X() == driver.Driver_departure_address.Point().X() {
drivers = append(drivers, driver)
} else {
// Calculate the distance between the departure point and the driver's departure route.
coords1 := departure_route.Geometry.(orb.Point)
coords2 := driver.Driver_departure_address.Geometry.(orb.Point)
distance := utils.Haversine(coords1[1], coords1[0], coords2[1], coords2[0])
if int64(distance) <= int64(driver.Radius) {
drivers = append(drivers, driver)
}
}
}
return drivers, nil
}

View File

@ -179,6 +179,53 @@ func (s PostgresqlStorage) GetPassenger(passengerID string) (passenger internal.
return passenger, nil return passenger, nil
} }
func (s PostgresqlStorage) GetAllPassengers() (passengers []internal.Passenger, err error) {
var preferencesJSON []byte
rows, err := s.DbConnection.Query(fmt.Sprintf("SELECT alias, last_name, first_name, grade, picture, verified_identity, operator, preferences, passenger_id FROM %s ", s.Tables["passengers"]))
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var passenger internal.Passenger
if err := rows.Scan(
&passenger.Passenger.Alias,
&passenger.Passenger.LastName,
&passenger.Passenger.FirstName,
&passenger.Passenger.Grade,
&passenger.Passenger.Picture,
&passenger.Passenger.VerifiedIdentity,
&passenger.Passenger.Operator,
&preferencesJSON,
&passenger.Passenger.ID,
); err != nil {
return nil, err
}
passengers = append(passengers, passenger)
}
if err != nil {
errMsg := "Postgresql Storage GetPassenger Error querying data from the database"
log.Error().Err(err).Msg(errMsg)
return passengers, errors.New(errMsg + err.Error())
}
for i := range passengers {
err = json.Unmarshal(preferencesJSON, &passengers[i].Preferences)
if err != nil {
errMsg := "Postgresql Storage GetPassenger Error decoding Preferences from JSON"
log.Error().Err(err).Msg(errMsg)
return passengers, errors.New(errMsg + err.Error())
}
}
return passengers, nil
}
func (s PostgresqlStorage) CreateDriver(driver internal.Driver) (err error) { func (s PostgresqlStorage) CreateDriver(driver internal.Driver) (err error) {
var availabilities []byte var availabilities []byte
_, err = uuid.Parse(driver.Driver.ID) _, err = uuid.Parse(driver.Driver.ID)
@ -528,13 +575,13 @@ func (s PostgresqlStorage) GetBooking(id string) (booking internal.Booking, err
log.Error().Err(err).Msg(errMsg) log.Error().Err(err).Msg(errMsg)
return internal.Booking{}, errors.New(errMsg + err.Error()) return internal.Booking{}, errors.New(errMsg + err.Error())
} }
passenger, err := s.GetPassenger(booking.Passenger.ID) // passenger, err := s.GetPassenger(booking.Passenger.ID)
if err != nil { // if err != nil {
errMsg := "Postgresql Storage GetBooking Error getting passenger" // errMsg := "Postgresql Storage GetBooking Error getting passenger"
log.Error().Err(err).Msg(errMsg) // log.Error().Err(err).Msg(errMsg)
return booking, errors.New(errMsg + err.Error()) // return booking, errors.New(errMsg + err.Error())
} // }
booking.Passenger = passenger.Passenger // booking.Passenger = passenger.Passenger
driver, err := s.GetDriver(booking.Driver.ID) driver, err := s.GetDriver(booking.Driver.ID)
if err != nil { if err != nil {
errMsg := "Postgresql Storage GetBooking Error getting driver" errMsg := "Postgresql Storage GetBooking Error getting driver"
@ -630,20 +677,20 @@ func (s PostgresqlStorage) populateBookingDetails(booking internal.Booking, depa
errCh := make(chan error, 4) // Buffered channel to handle potential errors errCh := make(chan error, 4) // Buffered channel to handle potential errors
// Concurrently fetch passenger information // Concurrently fetch passenger information
wg.Add(1) // wg.Add(1)
go func() { // go func() {
defer wg.Done() // defer wg.Done()
passenger, err := s.GetPassenger(booking.Passenger.ID) // passenger, err := s.GetPassenger(booking.Passenger.ID)
if err != nil { // if err != nil {
errCh <- fmt.Errorf("Postgresql Storage GetBooking Error getting passenger: %w", err) // errCh <- fmt.Errorf("Postgresql Storage GetBooking Error getting passenger: %w", err)
return // return
} // }
mu.Lock() // mu.Lock()
booking.Passenger = passenger.Passenger // booking.Passenger = passenger.Passenger
mu.Unlock() // mu.Unlock()
}() // }()
// Concurrently fetch driver information // Concurrently fetch driver information
wg.Add(1) wg.Add(1)

View File

@ -161,7 +161,7 @@ table "bookings" {
ref_columns = [table.passengers.column.passenger_id] ref_columns = [table.passengers.column.passenger_id]
} }
} }
enum "booking_status" { enum "bookingstatus" {
schema = schema.solidarity_service schema = schema.solidarity_service
values = ["INITIATED", "WAITING_PASSENGER_CONFIRMATION", "WAITING_DRIVER_CONFIRMATION", "CONFIRMED", "CANCELLED", "COMPLETED_PENDING_VALIDATION", "VALIDATED"] values = ["INITIATED", "WAITING_PASSENGER_CONFIRMATION", "WAITING_DRIVER_CONFIRMATION", "CONFIRMED", "CANCELLED", "COMPLETED_PENDING_VALIDATION", "VALIDATED"]
} }

View File

@ -10,6 +10,7 @@ import (
type Storage interface { type Storage interface {
CreatePassenger(passenger internal.Passenger) (err error) CreatePassenger(passenger internal.Passenger) (err error)
GetPassenger(passengerID string) (passenger internal.Passenger, err error) GetPassenger(passengerID string) (passenger internal.Passenger, err error)
GetAllPassengers() (passengers []internal.Passenger, err error)
CreateDriver(driver internal.Driver) (err error) CreateDriver(driver internal.Driver) (err error)
GetDriver(driverID string) (driver internal.Driver, err error) GetDriver(driverID string) (driver internal.Driver, err error)
GetBooking(id string) (booking internal.Booking, err error) GetBooking(id string) (booking internal.Booking, err error)
@ -18,7 +19,7 @@ type Storage interface {
FilterUserBookingsByStatus(user_type string, status internal.BookingStatus, user_id string) (bookings []internal.Booking, err error) FilterUserBookingsByStatus(user_type string, status internal.BookingStatus, user_id string) (bookings []internal.Booking, err error)
DriverJourneys(departure_route *geojson.Feature, departure_date int64) (drivers []internal.Driver, err error) DriverJourneys(departure_route *geojson.Feature, departure_date int64) (drivers []internal.Driver, err error)
GetAllDrivers(date int64) (drivers []internal.Driver, err error) GetAllDrivers(date int64) (drivers []internal.Driver, err error)
} }
func NewStorage(cfg *viper.Viper) (Storage, error) { func NewStorage(cfg *viper.Viper) (Storage, error) {
var ( var (