新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

Commit 3ff2ad03 authored by kunkkawu's avatar kunkkawu

feat: add rpc code --story=1016306

No related merge requests found
......@@ -22,6 +22,8 @@ Log:
KeepDays: 180
# 按天切割日志
Rotation: daily
# 日志时间格式
TimeFormat: "2006-01-02 15:04:05"
# 监控,默认都是开启,主要调整端口和监控访问路由
DevServer:
......@@ -40,9 +42,13 @@ GrpcConf:
MaxRecvMsgSize: 20971520
MaxSendMsgSize: 20971520
MysqlDNS: root:@tcp(localhost:3306)/registration-service
# 数据库连接限流速率
TestDBConnRate: 10
MysqlDNS: root:@tcp(localhost:3306)/registration-service?parseTime=true
# redis 缓存配置,主要指定访问地址,其他配置项默认即可
Cache:
- Host: 127.0.0.1:16379
- Host: 127.0.0.1:16379
\ No newline at end of file
- Host: 127.0.0.1:16379
module registration-service
go 1.20
go 1.21
require (
github.com/stretchr/testify v1.8.4
github.com/zeromicro/go-zero v1.6.1
google.golang.org/grpc v1.60.0
google.golang.org/protobuf v1.32.0
......@@ -48,6 +49,7 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/openzipkin/zipkin-go v0.4.2 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.17.0 // indirect
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
github.com/prometheus/common v0.44.0 // indirect
......
github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 h1:uvdUDbHQHO85qeSydJtItA4T55Pw6BtAejd0APRJOCE=
github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
github.com/alicebob/miniredis/v2 v2.31.0 h1:ObEFUNlJwoIiyjxdrYF0QIDE7qXcLc7D3WpSH4c22PU=
github.com/alicebob/miniredis/v2 v2.31.0/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg=
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
......@@ -22,6 +25,7 @@ github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
......@@ -41,6 +45,7 @@ github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
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=
......@@ -60,11 +65,13 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
......@@ -77,6 +84,7 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
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.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
......@@ -98,17 +106,23 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM=
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY=
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
......@@ -118,9 +132,11 @@ github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO
github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
......@@ -136,6 +152,7 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
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=
github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE=
github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
github.com/zeromicro/go-zero v1.6.1 h1:E8fRkMPiYODk8+jUIrxQQIEG+MTgWfXKiH7sjc9l6Vs=
github.com/zeromicro/go-zero v1.6.1/go.mod h1:slLvzqPP/H/h9ABq9ykNOuX6pYLjA8Uy3Rb8adkXTGw=
go.etcd.io/etcd/api/v3 v3.5.11 h1:B54KwXbWDHyD3XYAwprxNzTe7vlhR69LuBgZnMVvS7E=
......@@ -171,6 +188,7 @@ go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0
go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
......@@ -232,6 +250,7 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM=
golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
......@@ -254,9 +273,11 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/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=
......
......@@ -22,18 +22,32 @@ const (
// Success 服务端返回码,200 表示成功,非 200 表示失败
Success RespCode = 200
// ErrUserLogin 【业务层错误码:21000 - 21999】
ErrUserLogin RespCode = iota + 20000
// ErrParams 【业务层错误码:21000 - 21999】
ErrParams RespCode = iota + 20000
ErrInvalidDBConnType
ErrEmptyCreator
ErrEmptyDBConnId
ErrDBConnectFailed
ErrLimiter
// ErrDB 【数据库层错误码范围:22000 - 22999】
ErrDB RespCode = iota + 10000
ErrRecordNotFound
)
// 返回码对应具体的信息
var errMsg = map[RespCode]string{
Success: "success",
ErrDB: "db error",
ErrUserLogin: "user failed to login",
Success: "success",
ErrParams: "params error",
ErrInvalidDBConnType: "invalid db connection type",
ErrEmptyCreator: "creator is empty",
ErrEmptyDBConnId: "db conn id is empty",
ErrDBConnectFailed: "db connect failed",
ErrLimiter: "operation is too frequency",
ErrDB: "db error",
ErrRecordNotFound: "record not found",
}
func (rc RespCode) String() string {
......
......@@ -16,4 +16,5 @@ type GrpcConf struct {
KeyFile string
MaxRecvMsgSize int
MaxSendMsgSize int
TestDBConnRate int
}
package logic
import (
"context"
"github.com/zeromicro/go-zero/core/logc"
"github.com/zeromicro/go-zero/core/logx"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"registration-service/internal/utils"
"time"
)
type CreateDBConnLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewCreateDBConnLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateDBConnLogic {
return &CreateDBConnLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// CreateDBConn
// 4. 创建数据源连接接口
func (l *CreateDBConnLogic) CreateDBConn(in *registration.CreateDBConnReq) (*registration.CreateDBConnResp, error) {
// 检查参数
if errCode := l.checkParams(in); errCode != 0 {
// 记录日志
logc.Errorf(l.ctx, "requestId: [%s], check params error: %s", in.RequestId, errCode.String())
return &registration.CreateDBConnResp{
Code: int32(errCode),
Msg: errCode.String(),
}, nil
}
dbConn := &model.AssetDbConn{
Type: in.Type,
ConnName: in.ConnName,
Host: in.Host,
Port: in.Port,
Username: in.Username,
Password: in.Password,
DbName: in.DbName,
TlsCert: in.TlsCert,
Creator: in.Creator,
CreatedAt: time.Now(),
}
if err := l.svcCtx.GDB.WithContext(l.ctx).Create(dbConn).Error; err != nil {
// 记录日志
l.Logger.Errorf("requestId: [%s],db error: %s", in.RequestId, err.Error())
return &registration.CreateDBConnResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
}, nil
}
return &registration.CreateDBConnResp{
Code: int32(code.Success),
}, nil
}
// checkParams 检查参数
func (l *CreateDBConnLogic) checkParams(in *registration.CreateDBConnReq) code.RespCode {
if !utils.InSlice(int(in.Type), model.DBConnType) {
return code.ErrInvalidDBConnType
}
if in.Host == "" || in.Port == 0 || in.DbName == "" || in.Username == "" || in.Password == "" {
return code.ErrParams
}
if in.Creator == "" {
return code.ErrEmptyCreator
}
return 0
}
package logic
import (
"context"
"github.com/zeromicro/go-zero/core/logx"
"gorm.io/gorm"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"registration-service/internal/utils"
)
type DeleteDBConnLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewDeleteDBConnLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteDBConnLogic {
return &DeleteDBConnLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// DeleteDBConn
// 4. 数据源连接删除接口
func (l *DeleteDBConnLogic) DeleteDBConn(in *registration.DeleteDBConnReq) (*registration.DeleteDBConnResp, error) {
// 1. 参数检查
if in.DbConnId == 0 {
// 记录日志
l.Logger.Errorf("requestId: [%s], check params error: %s", in.RequestId, code.ErrEmptyDBConnId.String())
return &registration.DeleteDBConnResp{
Code: int32(code.ErrEmptyDBConnId),
Msg: code.ErrEmptyDBConnId.String(),
}, nil
}
// 2. 判断记录是否存在
err := l.svcCtx.GDB.WithContext(l.ctx).Where("id = ? and is_deleted = ?",
in.DbConnId, model.NotDeleted).First(&model.AssetDbConn{}).Error
if err == gorm.ErrRecordNotFound {
// 记录日志
l.Logger.Errorf("requestId: [%s], record not found")
return &registration.DeleteDBConnResp{
Code: int32(code.ErrRecordNotFound),
Msg: code.ErrRecordNotFound.String(),
}, nil
} else if err != nil {
// 记录日志
l.Logger.Errorf("requestId: [%s], db error: %s", in.RequestId, err.Error())
return &registration.DeleteDBConnResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
}, nil
}
// 3. 更新状态
updateModel := &model.AssetDbConn{
IsDeleted: model.IsDeleted,
DeletedAt: utils.Now(),
}
if err = l.svcCtx.GDB.WithContext(l.ctx).Where("id = ?", in.DbConnId).Updates(updateModel).Error; err != nil {
// 记录日志
l.Logger.Errorf("requestId: [%s], db error: %s", in.RequestId, err.Error())
return &registration.DeleteDBConnResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
}, nil
}
return &registration.DeleteDBConnResp{
Code: int32(code.Success),
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetAssetTypeListLogic - 自动生成
type GetAssetTypeListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetAssetTypeListLogic - 自动生成
func NewGetAssetTypeListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAssetTypeListLogic {
return &GetAssetTypeListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var assetTypeList = []*registration.AssetTypeItem{
{Id: 1, Name: "数据集"},
{Id: 2, Name: "API"},
}
// GetAssetTypeList
// 4. 资产类型查询接口
func (l *GetAssetTypeListLogic) GetAssetTypeList(in *registration.GetAssetTypeListReq) (*registration.GetAssetTypeListResp, error) {
return &registration.GetAssetTypeListResp{
Code: int32(code.Success),
Data: assetTypeList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetDataFormatListLogic - 自动生成
type GetDataFormatListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetDataFormatListLogic - 自动生成
func NewGetDataFormatListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataFormatListLogic {
return &GetDataFormatListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var dataFormatList = []*registration.DataFormatItem{
{Id: 1, Name: "数据表"},
{Id: 2, Name: "Excel"},
{Id: 3, Name: "XML"},
{Id: 4, Name: "CSV"},
{Id: 5, Name: "JSON"},
}
// GetDataFormatList
// 5. 数据存储格式查询接口
func (l *GetDataFormatListLogic) GetDataFormatList(in *registration.GetDataFormatListReq) (*registration.GetDataFormatListResp, error) {
return &registration.GetDataFormatListResp{
Code: int32(code.Success),
Data: dataFormatList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetDataScaleUnitListLogic -
type GetDataScaleUnitListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetDataScaleUnitListLogic -
func NewGetDataScaleUnitListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataScaleUnitListLogic {
return &GetDataScaleUnitListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var unitList = []*registration.DataScaleUnitItem{
{Id: 1, Name: "条"},
{Id: 2, Name: "M"},
{Id: 3, Name: "G"},
}
// GetDataScaleUnitList
// 7. 数据规模单位查询接口
func (l *GetDataScaleUnitListLogic) GetDataScaleUnitList(in *registration.GetDataScaleUnitListReq) (*registration.GetDataScaleUnitListResp, error) {
return &registration.GetDataScaleUnitListResp{
Code: int32(code.Success),
Data: unitList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
type GetDataSetInfoLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetDataSetInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataSetInfoLogic {
return &GetDataSetInfoLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// ============== 隐私计算 ============== //
func (l *GetDataSetInfoLogic) GetDataSetInfo(in *registration.GetDataSetInfoReq) (*registration.GetDataSetInfoResp, error) {
// todo: add your logic here and delete this line
return &registration.GetDataSetInfoResp{}, nil
}
package logic
import (
"context"
"gorm.io/gorm"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
type GetDBConnInfoLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetDBConnInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDBConnInfoLogic {
return &GetDBConnInfoLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// GetDBConnInfo
// 3. 数据源连接详情查询接口
func (l *GetDBConnInfoLogic) GetDBConnInfo(in *registration.GetDBConnInfoReq) (*registration.GetDBConnInfoResp, error) {
// 1. 参数判断
if in.DbConnId == 0 {
l.Logger.Errorf("requestId: [%s], check params error: %s", in.RequestId, code.ErrEmptyDBConnId.String())
return &registration.GetDBConnInfoResp{
Code: int32(code.ErrEmptyDBConnId),
Msg: code.ErrEmptyDBConnId.String(),
}, nil
}
dbConnInfo := &model.AssetDbConn{}
err := l.svcCtx.GDB.WithContext(l.ctx).Where("id = ? and is_deleted = ?",
in.DbConnId, model.NotDeleted).First(dbConnInfo).Error
if err == gorm.ErrRecordNotFound {
l.Logger.Errorf("requestId: [%s], record not found")
return &registration.GetDBConnInfoResp{
Code: int32(code.ErrRecordNotFound),
Msg: code.ErrRecordNotFound.String(),
}, nil
} else if err != nil {
l.Logger.Errorf("requestId: [%s], db error: %s", in.RequestId, err.Error())
return &registration.GetDBConnInfoResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
}, nil
}
data := &registration.DBConnInfo{
DbConnId: int32(dbConnInfo.Id),
ConnName: dbConnInfo.ConnName,
Host: dbConnInfo.Host,
Port: dbConnInfo.Port,
Type: dbConnInfo.Type,
Username: dbConnInfo.Username,
DbName: dbConnInfo.DbName,
CreatedAt: dbConnInfo.CreatedAt.String(),
}
return &registration.GetDBConnInfoResp{
Code: int32(code.Success),
Data: data,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"registration-service/internal/utils"
"github.com/zeromicro/go-zero/core/logx"
)
type GetDBConnListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewGetDBConnListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDBConnListLogic {
return &GetDBConnListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// GetDBConnList
// 5. 数据源连接列表查询接口
func (l *GetDBConnListLogic) GetDBConnList(in *registration.GetDBConnListReq) (*registration.GetDBConnListResp, error) {
// 1. 处理分页
pagination, offset := utils.PreparePagination(int(in.Page), int(in.PageSize))
// 2. 设置通用DB
DB := l.svcCtx.GDB.WithContext(l.ctx).Model(&model.AssetDbConn{}).Where("is_deleted = ?", model.NotDeleted)
// 3. 设置过滤条件
if len(in.Filter) > 0 {
for _, filter := range in.Filter {
if filter.Key == "conn_name" {
DB = DB.Where("conn_name like ?", "%"+filter.Value+"%")
}
}
}
// 4. 获取总条数
if err := DB.Count(&pagination.Total).Error; err != nil {
l.Logger.Errorf("db error: %s", err.Error())
return &registration.GetDBConnListResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
Data: nil,
}, nil
}
// 5. 查询数据列表
var dbConnList []*model.AssetDbConn
if err := DB.Offset(offset).Limit(int(pagination.PageSize)).Find(&dbConnList).Error; err != nil {
// 记录日志
l.Logger.Errorf("db error: %s", err.Error())
return &registration.GetDBConnListResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
Data: nil,
}, nil
}
// 6. 准备response数据
var data []*registration.DBConn
for _, item := range dbConnList {
dbConn := &registration.DBConn{
Id: int32(item.Id),
ConnName: item.ConnName,
Host: item.Host,
Port: item.Port,
Type: item.Type,
Username: item.Username,
DbName: item.DbName,
CreatedAt: item.CreatedAt.Format(utils.TimeFormat),
}
data = append(data, dbConn)
}
// 7. 返回结果
return &registration.GetDBConnListResp{
Code: int32(code.Success),
Data: &registration.DBConnListData{
Pagination: pagination,
Items: data,
},
}, nil
}
......@@ -2,7 +2,6 @@ package logic
import (
"context"
"fmt"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/types/registration"
......@@ -25,13 +24,16 @@ func NewGetIndustryListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *G
}
}
// GetIndustryList 查询行业列表
func (l *GetIndustryListLogic) GetIndustryList(in *registration.GetIndustryListReq) (*registration.GetIndustryListRes, error) {
// GetIndustryList
// 1. 查询行业列表
func (l *GetIndustryListLogic) GetIndustryList(in *registration.GetIndustryListReq) (*registration.GetIndustryListResp, error) {
var industryList []*model.Industry
var data []*registration.IndustryData
var data []*registration.IndustryItem
// 从数据库查询行业列表
if err := l.svcCtx.GDB.WithContext(l.ctx).Find(&industryList).Error; err != nil {
return &registration.GetIndustryListRes{
// 记录日志
l.Logger.Errorf("requestId: [%s],db error: %s", in.RequestId, err.Error())
return &registration.GetIndustryListResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
Data: nil,
......@@ -39,20 +41,18 @@ func (l *GetIndustryListLogic) GetIndustryList(in *registration.GetIndustryListR
}
// 将行业列表赋值给pb结构
for _, item := range industryList {
industryData := &registration.IndustryData{
Id: int64(item.Id),
industryData := &registration.IndustryItem{
Id: int32(item.Id),
Code: item.Code,
Title: item.Title,
CreatedAt: item.CreatedAt,
UpdatedAt: item.UpdatedAt,
}
fmt.Println(industryData)
data = append(data, industryData)
}
return &registration.GetIndustryListRes{
return &registration.GetIndustryListResp{
Code: int32(code.Success),
Msg: code.Success.String(),
Data: data,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetScaleTypeListLogic -
type GetScaleTypeListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetScaleTypeListLogic -
func NewGetScaleTypeListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetScaleTypeListLogic {
return &GetScaleTypeListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var scaleTypeList = []*registration.ScaleTypeItem{
{Id: 1, Name: "条"},
{Id: 2, Name: "M"},
{Id: 3, Name: "G"},
}
// GetScaleTypeList
// 2. 资产规模类型查询接口
func (l *GetScaleTypeListLogic) GetScaleTypeList(in *registration.GetScaleTypeListReq) (*registration.GetScaleTypeListResp, error) {
return &registration.GetScaleTypeListResp{
Code: int32(code.Success),
Data: scaleTypeList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetSourceTypeListLogic -
type GetSourceTypeListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetSourceTypeListLogic -
func NewGetSourceTypeListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetSourceTypeListLogic {
return &GetSourceTypeListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var sourceTypeList = []*registration.SourceTypeItem{
{Id: 1, Name: "原始取得"},
{Id: 2, Name: "收集取得"},
{Id: 3, Name: "交易取得"},
{Id: 4, Name: "其他方式"},
}
// GetSourceTypeList
// 6. 数据源取得方式查询接口
func (l *GetSourceTypeListLogic) GetSourceTypeList(in *registration.GetSourceTypeListReq) (*registration.GetSourceTypeListResp, error) {
return &registration.GetSourceTypeListResp{
Code: int32(code.Success),
Data: sourceTypeList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetUpdateCycleUnitListLogic -
type GetUpdateCycleUnitListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetUpdateCycleUnitListLogic -
func NewGetUpdateCycleUnitListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUpdateCycleUnitListLogic {
return &GetUpdateCycleUnitListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var updateCycleUnitList = []*registration.UpdateCycleUnitItem{
{Id: 1, Name: "分钟"},
{Id: 2, Name: "小时"},
{Id: 3, Name: "天"},
}
// GetUpdateCycleUnitList
// 8. 更新周期单位查询接口
func (l *GetUpdateCycleUnitListLogic) GetUpdateCycleUnitList(in *registration.GetUpdateCycleUnitListReq) (*registration.GetUpdateCycleUnitListResp, error) {
return &registration.GetUpdateCycleUnitListResp{
Code: int32(code.Success),
Data: updateCycleUnitList,
}, nil
}
package logic
import (
"context"
"registration-service/internal/code"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
// GetUserCategoryListLogic -
type GetUserCategoryListLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
// NewGetUserCategoryListLogic -
func NewGetUserCategoryListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserCategoryListLogic {
return &GetUserCategoryListLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
var userCategoryList = []*registration.UserCategoryItem{
{Id: 1, Name: "政府用户"},
{Id: 2, Name: "企业用户"},
{Id: 3, Name: "个人用户"},
{Id: 4, Name: "无限制"},
}
// GetUserCategoryList
// 3. 使用对象列表接口
func (l *GetUserCategoryListLogic) GetUserCategoryList(in *registration.GetUserCategoryListReq) (*registration.GetUserCategoryListResp, error) {
return &registration.GetUserCategoryListResp{
Code: int32(code.Success),
Data: userCategoryList,
}, nil
}
package logic
import (
"context"
"database/sql"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"registration-service/internal/code"
"registration-service/internal/model"
"registration-service/internal/svc"
"registration-service/internal/types/registration"
"github.com/zeromicro/go-zero/core/logx"
)
type TestDBConnLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewTestDBConnLogic(ctx context.Context, svcCtx *svc.ServiceContext) *TestDBConnLogic {
return &TestDBConnLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
// TestDBConn
// 5. 数据源连接测试接口
func (l *TestDBConnLogic) TestDBConn(in *registration.TestDBConnReq) (*registration.TestDBConnResp, error) {
// 1. 参数检查
if in.DbConnId == 0 {
// 记录日志
l.Logger.Errorf("requestId: [%s], check params error: %s", in.RequestId, code.ErrEmptyDBConnId.String())
return &registration.TestDBConnResp{
Code: int32(code.ErrEmptyDBConnId),
Msg: code.ErrEmptyDBConnId.String(),
}, nil
}
dbConnModel := &model.AssetDbConn{}
// 2. 判断记录是否存在
err := l.svcCtx.GDB.WithContext(l.ctx).Where("id = ? and is_deleted = ?",
in.DbConnId, model.NotDeleted).First(dbConnModel).Error
if err == gorm.ErrRecordNotFound {
l.Logger.Errorf("requestId: [%s], record not found")
return &registration.TestDBConnResp{
Code: int32(code.ErrRecordNotFound),
Msg: code.ErrRecordNotFound.String(),
}, nil
} else if err != nil {
l.Logger.Errorf("requestId: [%s], db error: %s", in.RequestId, err.Error())
return &registration.TestDBConnResp{
Code: int32(code.ErrDB),
Msg: code.ErrDB.String(),
}, nil
}
// 3.使用gorm建立数据库连接
DSN := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s",
dbConnModel.Username, dbConnModel.Password, dbConnModel.Host, dbConnModel.Port, dbConnModel.DbName)
var db *gorm.DB
if db, err = gorm.Open(mysql.Open(DSN), nil); err != nil {
l.Logger.Errorf("requestId: [%s], db connected error: %s", in.RequestId, err.Error())
return &registration.TestDBConnResp{
Code: int32(code.ErrDBConnectFailed),
Msg: code.ErrDBConnectFailed.String(),
}, nil
}
// 4.手动关闭数据库连接
defer func() {
var sqlDB *sql.DB
if sqlDB, err = db.DB(); err != nil {
l.Logger.Errorf("requestId: [%s], get sql db from connection pool error: %s", in.RequestId, err.Error())
} else if err = sqlDB.Close(); err != nil {
l.Logger.Errorf("requestId: [%s], close db connection error: %s", in.RequestId, err.Error())
}
}()
return &registration.TestDBConnResp{
Code: int32(code.Success),
Msg: "db connected",
}, nil
}
package model
import (
"time"
)
var DBConnType = []int{1, 2}
// AssetDbConn 数据源数据库连接表
type AssetDbConn struct {
Id uint `gorm:"column:id;type:int(11) unsigned;primary_key;AUTO_INCREMENT" json:"id"`
Type int32 `gorm:"column:type;type:tinyint(2);comment:数据库类型:1mysql,2Hive,3sqlite;NOT NULL" json:"type"`
ConnName string `gorm:"column:conn_name;type:varchar(20);comment:连接标题名称" json:"conn_name"`
Host string `gorm:"column:host;type:varchar(128);comment:数据库地址;NOT NULL" json:"host"`
Port int32 `gorm:"column:port;type:int(11);comment:数据库端口号;NOT NULL" json:"port"`
Username string `gorm:"column:username;type:varchar(32);comment:数据库用户名;NOT NULL" json:"username"`
Password string `gorm:"column:password;type:varchar(128);comment:数据库密码;NOT NULL" json:"password"`
DbName string `gorm:"column:db_name;type:varchar(128);comment:数据库名称;NOT NULL" json:"db_name"`
TlsCert string `gorm:"column:tls_cert;type:varchar(4096);comment:TLS证书" json:"tls_cert"`
Creator string `gorm:"column:creator;type:varchar(128);comment:创建用户" json:"creator"`
IsDeleted int32 `gorm:"column:is_deleted;type:tinyint(1);default:0;comment:是否删除:1已删除,0未删除" json:"is_deleted"`
CreatedAt time.Time `gorm:"column:created_at;type:datetime;comment:创建时间" json:"created_at"`
UpdatedAt time.Time `gorm:"column:updated_at;type:datetime;comment:更新时间" json:"updated_at"`
DeletedAt *time.Time `gorm:"column:deleted_at;type:datetime;comment:删除时间" json:"deleted_at"`
}
func (m *AssetDbConn) TableName() string {
return "asset_db_conn"
}
package model
const (
IsDeleted = 1
NotDeleted = 0
)
......@@ -22,8 +22,86 @@ func NewRegistrationServer(svcCtx *svc.ServiceContext) *RegistrationServer {
}
}
// 查询工业列表
func (s *RegistrationServer) GetIndustryList(ctx context.Context, in *registration.GetIndustryListReq) (*registration.GetIndustryListRes, error) {
// ============== 数据源 ============== //
func (s *RegistrationServer) CreateDBConn(ctx context.Context, in *registration.CreateDBConnReq) (*registration.CreateDBConnResp, error) {
l := logic.NewCreateDBConnLogic(ctx, s.svcCtx)
return l.CreateDBConn(in)
}
// 2. 数据源连接列表查询接口
func (s *RegistrationServer) GetDBConnList(ctx context.Context, in *registration.GetDBConnListReq) (*registration.GetDBConnListResp, error) {
l := logic.NewGetDBConnListLogic(ctx, s.svcCtx)
return l.GetDBConnList(in)
}
// 3. 数据源连接详情查询接口
func (s *RegistrationServer) GetDBConnInfo(ctx context.Context, in *registration.GetDBConnInfoReq) (*registration.GetDBConnInfoResp, error) {
l := logic.NewGetDBConnInfoLogic(ctx, s.svcCtx)
return l.GetDBConnInfo(in)
}
// 4. 数据源连接删除接口
func (s *RegistrationServer) DeleteDBConn(ctx context.Context, in *registration.DeleteDBConnReq) (*registration.DeleteDBConnResp, error) {
l := logic.NewDeleteDBConnLogic(ctx, s.svcCtx)
return l.DeleteDBConn(in)
}
// 5. 数据源连接测试接口
func (s *RegistrationServer) TestDBConn(ctx context.Context, in *registration.TestDBConnReq) (*registration.TestDBConnResp, error) {
l := logic.NewTestDBConnLogic(ctx, s.svcCtx)
return l.TestDBConn(in)
}
// ============== 通用选项 ============== //
func (s *RegistrationServer) GetIndustryList(ctx context.Context, in *registration.GetIndustryListReq) (*registration.GetIndustryListResp, error) {
l := logic.NewGetIndustryListLogic(ctx, s.svcCtx)
return l.GetIndustryList(in)
}
// 2. 资产规模类型查询接口
func (s *RegistrationServer) GetScaleTypeList(ctx context.Context, in *registration.GetScaleTypeListReq) (*registration.GetScaleTypeListResp, error) {
l := logic.NewGetScaleTypeListLogic(ctx, s.svcCtx)
return l.GetScaleTypeList(in)
}
// 3. 使用对象列表接口
func (s *RegistrationServer) GetUserCategoryList(ctx context.Context, in *registration.GetUserCategoryListReq) (*registration.GetUserCategoryListResp, error) {
l := logic.NewGetUserCategoryListLogic(ctx, s.svcCtx)
return l.GetUserCategoryList(in)
}
// 4. 资产类型查询接口
func (s *RegistrationServer) GetAssetTypeList(ctx context.Context, in *registration.GetAssetTypeListReq) (*registration.GetAssetTypeListResp, error) {
l := logic.NewGetAssetTypeListLogic(ctx, s.svcCtx)
return l.GetAssetTypeList(in)
}
// 5. 数据存储格式查询接口
func (s *RegistrationServer) GetDataFormatList(ctx context.Context, in *registration.GetDataFormatListReq) (*registration.GetDataFormatListResp, error) {
l := logic.NewGetDataFormatListLogic(ctx, s.svcCtx)
return l.GetDataFormatList(in)
}
// 6. 数据源取得方式查询接口
func (s *RegistrationServer) GetSourceTypeList(ctx context.Context, in *registration.GetSourceTypeListReq) (*registration.GetSourceTypeListResp, error) {
l := logic.NewGetSourceTypeListLogic(ctx, s.svcCtx)
return l.GetSourceTypeList(in)
}
// 7. 数据规模单位查询接口
func (s *RegistrationServer) GetDataScaleUnitList(ctx context.Context, in *registration.GetDataScaleUnitListReq) (*registration.GetDataScaleUnitListResp, error) {
l := logic.NewGetDataScaleUnitListLogic(ctx, s.svcCtx)
return l.GetDataScaleUnitList(in)
}
// 8. 更新周期单位查询接口
func (s *RegistrationServer) GetUpdateCycleUnitList(ctx context.Context, in *registration.GetUpdateCycleUnitListReq) (*registration.GetUpdateCycleUnitListResp, error) {
l := logic.NewGetUpdateCycleUnitListLogic(ctx, s.svcCtx)
return l.GetUpdateCycleUnitList(in)
}
// ============== 隐私计算 ============== //
func (s *RegistrationServer) GetDataSetInfo(ctx context.Context, in *registration.GetDataSetInfoReq) (*registration.GetDataSetInfoResp, error) {
l := logic.NewGetDataSetInfoLogic(ctx, s.svcCtx)
return l.GetDataSetInfo(in)
}
package utils
import "time"
// Limiter 限流器
type Limiter struct {
rate int
period time.Duration
ticker *time.Ticker
capacity chan struct{}
}
// NewLimiter 创建一个新的限流器
func NewLimiter(rate int) *Limiter {
period := time.Second / time.Duration(rate)
return &Limiter{
rate: rate,
period: period,
ticker: time.NewTicker(period),
capacity: make(chan struct{}, rate),
}
}
// Allow 检查是否允许请求
func (l *Limiter) Allow() bool {
// 如果容量通道已满,等待下一个周期
select {
case l.capacity <- struct{}{}:
return true
default:
// 如果容量通道已满,等待下一个周期
for range l.capacity {
<-l.ticker.C
}
return l.Allow()
}
}
package utils
import (
"reflect"
"registration-service/internal/types/registration"
"time"
)
const (
DefaultPage = 1
DefaultPageSize = 10
TimeFormat = "2006-01-02 15:04:05"
)
// InSlice 判断数组中是否包含某个值
func InSlice[T comparable](need T, arr []T) bool {
for _, v := range arr {
if v == need {
return true
}
}
return false
}
// IsZeroValue 判断变量是否为零值
func IsZeroValue(v interface{}) bool {
// 获取变量的反射值
value := reflect.ValueOf(v)
// 如果反射值是接口类型,尝试获取其具体类型
if value.Kind() == reflect.Interface {
value = value.Elem()
}
// 如果变量是 nil 或者是空结构体,返回 true
if value.IsNil() || value.Kind() == reflect.Struct && value.NumField() == 0 {
return true
}
// 如果变量是数组或者切片,并且长度为 0,返回 true
if value.Kind() == reflect.Array || value.Kind() == reflect.Slice {
return value.Len() == 0
}
// 如果变量是映射,并且没有键值对,返回 true
if value.Kind() == reflect.Map {
return value.Len() == 0
}
// 如果变量是字符串,并且长度为 0,返回 true
if value.Kind() == reflect.String {
return value.Len() == 0
}
return false
}
// PreparePagination 处理分页
func PreparePagination(page, pageSize int) (*registration.Pagination, int) {
if page == 0 {
page = DefaultPage
}
if pageSize == 0 {
pageSize = DefaultPageSize
}
offset := pageSize * (page - 1)
return &registration.Pagination{
Page: int32(page),
PageSize: int32(pageSize),
}, offset
}
// Now 返回格式化后当前时间
func Now() *time.Time {
t := time.Now()
return &t
//return time.Now().Format("2006-01-02 15:04:05")
}
package keyclient
import (
"context"
"testing"
"github.com/zeromicro/go-zero/zrpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
// 测试没有开启 tls 的服务端
func TestGetIndustryList(t *testing.T) {
directClient := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: []string{"127.0.0.1:8082"},
},
)
k := NewRegistration(directClient)
req := &GetIndustryListReq{}
res, err := k.GetIndustryList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
t.Logf("success %#v", res.Data)
}
// 测试开启 tls 的服务端
func TestGetIndustryListWithTLS(t *testing.T) {
// 加载证书和对应的 server name
cert, err := credentials.NewClientTLSFromFile("../cert/server.pem", "localhost")
if err != nil {
t.Errorf("Failed to load client tls cert: %v \n", err)
return
}
// 设置 tls 连接
dailOpt := zrpc.WithDialOption(grpc.WithTransportCredentials(cert))
callOpts := zrpc.WithDialOption(grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(20 * 1024 * 1024)))
tlsClient := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: []string{"localhost:8082"},
},
dailOpt,
callOpts,
)
k := NewRegistration(tlsClient)
req := &GetIndustryListReq{}
res, err := k.GetIndustryList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
t.Logf("result: %#v", res.Data)
}
// Code generated by goctl. DO NOT EDIT.
// Source: registration.proto
package keyclient
import (
"context"
"registration-service/internal/types/registrationService"
"github.com/zeromicro/go-zero/zrpc"
"google.golang.org/grpc"
)
type (
GetIndustryListReq = registrationService.GetIndustryListReq
GetIndustryListRes = registrationService.GetIndustryListRes
IndustryData = registrationService.IndustryData
Registration interface {
// 查询工业列表
GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error)
}
defaultRegistration struct {
cli zrpc.Client
}
)
func NewRegistration(cli zrpc.Client) Registration {
return &defaultRegistration{
cli: cli,
}
}
// 查询工业列表
func (m *defaultRegistration) GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error) {
client := registrationService.NewRegistrationClient(m.cli.Conn())
return client.GetIndustryList(ctx, in, opts...)
}
This diff is collapsed.
......@@ -9,28 +9,443 @@ package proto;
// option go_package = "{out_path};out_go_package"; out_path 最终和 protoc 的 --go_out 拼接后才是完整路径
option go_package = "./registration";
// 通用结构定义
// 搜索项Filter
message Filter{
string key = 1; // 搜索列
string value = 2; // 搜索内容
}
// 分页
message Pagination{
int32 page = 1;
int32 page_size = 2;
int64 total = 3;
}
// ============ 数据源连接接口定义(5) ================/
// 1. 创建数据源连接接口
message CreateDBConnReq{
string request_id = 1;// 统一请求ID
string conn_name = 2;// 连接标题名称
string host = 3; // 数据源地址
int32 port = 4; // 端口号
int32 type = 5; // 数据库类型: 1.mysql,2.Hive
string username = 6; // 数据库用户名
string password = 7; // 数据库密码
string db_name = 8; // 数据库名称
string tls_cert = 9; // TLS证书
string creator = 10; // 创建用户
}
message CreateDBConnResp{
int32 code = 1;
string msg = 2;
string data = 3;
}
// 2. 数据源连接列表查询接口
message GetDBConnListReq{
string request_id = 1; // 请求ID
int32 page = 2; // 当前页
int32 page_size = 3; // 每页条数
repeated Filter filter = 4; // 搜索条件
}
message GetDBConnListResp{
int32 code = 1;
string msg = 2;
DBConnListData data = 3;
}
message DBConnListData{
Pagination pagination = 1;
repeated DBConn items = 2;
}
message DBConn {
int32 id = 1; // 自增id
string conn_name = 2; // 连接标题名称
string host = 3; // 数据源地址
int32 port = 4; // 端口号
int32 type = 6; // 数据库类型: 1.mysql,2.Hive
string username = 7; // 数据库用户名
string db_name = 8; // 数据库名称
string created_at = 9;// 创建时间
}
// 3. 获取数据源连接详情
message GetDBConnInfoReq{
string request_id = 1; // 请求ID
int32 db_conn_id = 2; // 数据源连接id
}
message GetDBConnInfoResp{
int32 code = 1;
string msg = 2;
DBConnInfo data = 3;
}
message DBConnInfo{
int32 db_conn_id = 1; // 数据源连接ID
string conn_name = 2; // 数据源连接名称
string host = 3; // 数据源地址
int32 port = 4; // 端口号
int32 type = 5; // 数据库类型: 1.mysql,2.Hive
string username = 6; // 数据库用户名
string db_name = 7; // 数据库名称
string created_at = 8; // 创建时间
}
// 4. 数据源连接删除接口
message DeleteDBConnReq{
string request_id = 1; // 请求ID
int32 db_conn_id = 2; // 数据源连接id
}
message DeleteDBConnResp{
int32 code = 1;
string msg = 2;
string data = 3;
}
// 5. 数据源连接测试接口
message TestDBConnReq{
string request_id = 1; // 请求ID
int32 db_conn_id = 2; // 数据源连接id
}
message TestDBConnResp{
int32 code = 1;
string msg = 2;
string data = 3;
}
// ============ 通用选项接口定义(8) ================/
// 1. 查询工业列表
message GetIndustryListReq {
string request_id = 1;
}
message GetIndustryListRes {
message GetIndustryListResp {
int32 code = 1;
string msg = 2;
repeated IndustryData data = 3;
repeated IndustryItem data = 3;
}
message IndustryData {
int64 id = 1;
message IndustryItem {
int32 id = 1;
string code = 2;
string title = 3;
string Created_at = 4;
string created_at = 4;
string updated_at = 5;
}
// 2. 资产规模类型查询接口
message GetScaleTypeListReq {
string request_id = 1;
}
message GetScaleTypeListResp{
int32 code = 1;
string msg = 2;
repeated ScaleTypeItem data = 3;
}
message ScaleTypeItem{
int64 id = 1; // 规模类型编号
string name = 2; // 规模类型名称
}
// 3. 使用对象列表接口
message GetUserCategoryListReq{
string request_id = 1;
}
message GetUserCategoryListResp{
int32 code = 1;
string msg = 2;
repeated UserCategoryItem data = 3;
}
message UserCategoryItem{
int32 id = 1; // 使用对象编号
string name = 2; // 使用对象名称
}
// 4. 资产类型列表查询
message GetAssetTypeListReq{
string request_id = 1;
}
message GetAssetTypeListResp{
int32 code = 1;
string msg = 2;
repeated AssetTypeItem data = 3;
}
message AssetTypeItem{
int32 id = 1; // 资产类型编号
string name = 2; // 资产类型名称
}
// 5. 数据存储格式查询接口
message GetDataFormatListReq{
string request_id = 1;
}
message GetDataFormatListResp{
int32 code = 1;
string msg = 2;
repeated DataFormatItem data = 3;
}
message DataFormatItem{
int32 id = 1; // 数据存储格式编号
string name = 2; // 数据存储格式名称
}
// 6. 数据源取得方式查询接口
message GetSourceTypeListReq{
string request_id = 1;
}
message GetSourceTypeListResp{
int32 code = 1;
string msg = 2;
repeated SourceTypeItem data = 3;
}
message SourceTypeItem{
int32 id = 1; // 数据源取得方式编号
string name = 2; // 数据源取得方式名称
}
// 7. 数据规模单位查询接口
message GetDataScaleUnitListReq{
string request_id = 1;
}
message GetDataScaleUnitListResp{
int32 code = 1;
string msg = 2;
repeated DataScaleUnitItem data = 3;
}
message DataScaleUnitItem{
int32 id = 1; // 数据规模单位编号
string name = 2; // 数据规模单位名称
}
// 8. 更新周期单位查询接口
message GetUpdateCycleUnitListReq{
string request_id = 1;
}
message GetUpdateCycleUnitListResp{
int32 code = 1;
string msg = 2;
repeated UpdateCycleUnitItem data = 3;
}
message UpdateCycleUnitItem{
int32 id = 1; // 更新周期单位编号
string name = 2; // 更新周期单位名称
}
// ============== 资产登记接口定义(1) ============== //
message AssetBaseInfo {
string asset_name = 1; // 资产名称
string asset_en_name = 2; // 资产英文简称
int32 asset_type = 3; // 资产类型
string tags = 4; // 关键字
int32 industry_id = 5; // 行业id
string intro = 6; // 简介
repeated int32 user_category = 7; // 使用对象
int32 immediately_supply = 8; // 供应方式: 1即时供应,0延时供应
string delayed_supply_time = 9; // 延时供应时间
string suit_scenario = 10; // 适用场景
string disable_scenario = 11; // 禁用场景
}
message AssetDataInfo {
string source_name = 1; // 数据源名称
int32 source_type = 2; // 取得方式
string source_way = 3; // 来源渠道
string desensitization_way = 4; // 脱敏方式
int32 scale_type = 5; // 数据规模类型
int32 scale = 6; // 数据规模
int32 data_format = 7; // 存储格式
int32 update_type = 8; // 更新周期类型:1静态,2实时,3周期
int32 cycle = 9; // 更新周期
int32 unit = 10; // 更新周期单位
string time_span = 11; // 时间跨度
string data_sample = 12; // 数据产品示例
string custom_info = 13; // 个性化字段
}
message AssetInfo {
string asset_id = 1; // 资产编号
string creator = 2; // 创建者
string created_at = 3; // 创建时间
string update_user = 4; // 最后修改者
string updated_at = 5; // 最后修改时间
string holder = 6; // 持有者链账户地址
ProductInfo product_info = 7; // 产品信息
ChainInfo chain_info = 8; // 上链信息
CertificationInfo certification_info = 9; // 认证信息
}
message ProductInfo {
AssetBaseInfo product_base_info = 1; // 产品基础信息
AssetDataInfo product_data_info = 2; // 产品数据属性
DataSetInfo product_data_set = 3; // 数据集信息
ProductAPI product_api = 4; // 数据API信息
repeated FileInfo product_images = 5; // 资产图片
repeated FileInfo product_files = 6; // 产品附件
}
message DataSetInfo {
string table_name = 1; // 表名
string table_desc = 2; // 表描述
repeated SaveTableColumnItem items = 3; // 字段列表
}
message FileInfo {
string asset_id = 1; // 资产id
int32 type = 2; // 资产附件类型:1图片,2合规证明材料,3. 估值证明材料,4相关附件
string name = 3; // 文件名称
string file_url = 4; // 文件URL
}
message ChainInfo {
string txid = 1; // 交易id
string uploaded_at = 2; // 上链时间
}
message CertificationInfo {
string certificate_at = 1; // 认证时间
string enterprise_name = 2; // 认证机构名称
string enterprise_credit_code = 3; // 企业信用证代码
int32 enterprise_type = 4; // 认证类型:0 合规,1 资产评估
string enterprise_address = 5; // 链账户地址
string result = 6; // 认证结果
repeated FileInfo file_info = 7; // 认证文件
}
message ProductAPI {
SaveAPIReq save_api_req = 1; // SaveAPIReq
string created_at = 2; // 创建时间
string updated_at = 3; // 最后修改时间
}
message SaveAPIReq {
string asset_id = 1; // 资产编号
string header = 2; // header
string url = 3; // API地址
string method = 4; // 请求方式: GET、POST等
string params = 5; // 入参
string response = 6; // 响应
string resp_type = 7; // 响应类型:默认json
}
message SaveTableColumnItem {
string asset_id = 1; // 资产ID
string name = 2; // 字段名称
string original_name = 3; // 原始字段名称
string data_type = 4; // 字段类型
int32 data_length = 5; // 字段长度
int32 is_primary_key = 6; // 是否为主键:1.是,0.否
int32 is_null = 7; // 是否为空:1.是,0.否
int32 privacy_query = 8; // 是否隐私查询:1是,0否 默认1
string description = 9; // 字段描述
string data_example = 10; // 数据示例
string custom_column = 11; // 个性化字段
int32 security_level = 12; // 分级分类:1 一级,2二级,3三级
}
// ============== 隐私计算接口定义(1) ============== //
message GetDataSetInfoReq{
string request_id = 1;
string assetId = 2; // 资产编号
}
message GetDataSetInfoResp{
int32 code = 1;
string msg = 2;
AssetDataSetInfo data = 3;
}
// 数据目录返回内容
message AssetDataSetInfo {
string asset_id = 1; // 资产编号
string creator = 2; // 创建者
string created_at = 3; // 创建时间
string update_user = 4; // 最后修改者
string updated_at = 5; // 最后修改时间
string holder = 6; // 持有者链账户地址
ProductInfo product_info = 7; // 产品信息
ChainInfo chain_info = 8; // 上链信息
CertificationInfo certification_info = 9; // 认证信息
}
message UpdateCycle {
int32 updateType = 1; // 更新类型:1静态,2实时,3周期
int32 cycle =2; // 周期
int32 unit = 3; // 单位: 1分,2时,3天
}
service Registration {
// 查询工业列表
rpc GetIndustryList(GetIndustryListReq) returns(GetIndustryListRes);
}
\ No newline at end of file
// ============== 数据源 ============== //
// 1. 创建数据源连接接口
rpc CreateDBConn(CreateDBConnReq) returns (CreateDBConnResp);
// 2. 数据源连接列表查询接口
rpc GetDBConnList(GetDBConnListReq) returns (GetDBConnListResp);
// 3. 数据源连接详情查询接口
rpc GetDBConnInfo(GetDBConnInfoReq) returns (GetDBConnInfoResp);
// 4. 数据源连接删除接口
rpc DeleteDBConn(DeleteDBConnReq) returns (DeleteDBConnResp);
// 5. 数据源连接测试接口
rpc TestDBConn(TestDBConnReq) returns (TestDBConnResp);
// ============== 通用选项 ============== //
// 1. 查询工业列表
rpc GetIndustryList(GetIndustryListReq) returns(GetIndustryListResp);
// 2. 资产规模类型查询接口
rpc GetScaleTypeList(GetScaleTypeListReq) returns (GetScaleTypeListResp);
// 3. 使用对象列表接口
rpc GetUserCategoryList(GetUserCategoryListReq) returns (GetUserCategoryListResp);
// 4. 资产类型查询接口
rpc GetAssetTypeList(GetAssetTypeListReq) returns (GetAssetTypeListResp);
// 5. 数据存储格式查询接口
rpc GetDataFormatList(GetDataFormatListReq) returns (GetDataFormatListResp);
// 6. 数据源取得方式查询接口
rpc GetSourceTypeList(GetSourceTypeListReq) returns (GetSourceTypeListResp);
// 7. 数据规模单位查询接口
rpc GetDataScaleUnitList(GetDataScaleUnitListReq) returns (GetDataScaleUnitListResp);
// 8. 更新周期单位查询接口
rpc GetUpdateCycleUnitList(GetUpdateCycleUnitListReq) returns (GetUpdateCycleUnitListResp);
// ============== 资产登记 ============== //
// ============== 隐私计算 ============== //
// 1. 数据目录详情接口
rpc GetDataSetInfo (GetDataSetInfoReq) returns (GetDataSetInfoResp);
}
......@@ -3,6 +3,8 @@ package main
import (
"flag"
"fmt"
"github.com/zeromicro/go-zero/core/logc"
"github.com/zeromicro/go-zero/core/logx"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/keepalive"
"time"
......@@ -23,11 +25,10 @@ var configFile = flag.String("f", "etc/registration.yaml", "the config file")
// initServerOptions 初始化 grpc 服务设置
func initServerOptions(c config.Config) ([]grpc.ServerOption, error) {
// 加载 tls 证书
cert, err := credentials.NewServerTLSFromFile(c.GrpcConf.CertFile, c.GrpcConf.KeyFile)
if err != nil {
return nil, fmt.Errorf("Failed to load key pair: %#v \n", err)
return nil, fmt.Errorf("Failed to load key pair: %v \n", err)
}
opts := []grpc.ServerOption{
......@@ -75,6 +76,23 @@ func initServerOptions(c config.Config) ([]grpc.ServerOption, error) {
grpc.Creds(cert),
}
logc.MustSetup(logx.LogConf{
ServiceName: "",
Mode: "",
Encoding: "",
TimeFormat: "",
Path: "",
Level: "",
MaxContentLength: 0,
Compress: false,
Stat: false,
KeepDays: 0,
StackCooldownMillis: 0,
MaxBackups: 0,
MaxSize: 0,
Rotation: "",
})
return opts, nil
}
......@@ -102,6 +120,7 @@ func main() {
s.AddOptions(opts...)
}
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
s.Start()
}
// Code generated by goctl. DO NOT EDIT.
// Source: registration.proto
package registration
import (
"context"
"registration-service/internal/types/registrationService"
"github.com/zeromicro/go-zero/zrpc"
"google.golang.org/grpc"
)
type (
GetIndustryListReq = registrationService.GetIndustryListReq
GetIndustryListRes = registrationService.GetIndustryListRes
IndustryData = registrationService.IndustryData
Registration interface {
// 查询工业列表
GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error)
}
defaultRegistration struct {
cli zrpc.Client
}
)
func NewRegistration(cli zrpc.Client) Registration {
return &defaultRegistration{
cli: cli,
}
}
// 查询工业列表
func (m *defaultRegistration) GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error) {
client := registrationService.NewRegistrationClient(m.cli.Conn())
return client.GetIndustryList(ctx, in, opts...)
}
......@@ -13,13 +13,90 @@ import (
)
type (
GetIndustryListReq = registration.GetIndustryListReq
GetIndustryListRes = registration.GetIndustryListRes
IndustryData = registration.IndustryData
AssetBaseInfo = registration.AssetBaseInfo
AssetDataInfo = registration.AssetDataInfo
AssetDataSetInfo = registration.AssetDataSetInfo
AssetInfo = registration.AssetInfo
AssetTypeItem = registration.AssetTypeItem
CertificationInfo = registration.CertificationInfo
ChainInfo = registration.ChainInfo
CreateDBConnReq = registration.CreateDBConnReq
CreateDBConnResp = registration.CreateDBConnResp
DBConn = registration.DBConn
DBConnInfo = registration.DBConnInfo
DBConnListData = registration.DBConnListData
DataFormatItem = registration.DataFormatItem
DataScaleUnitItem = registration.DataScaleUnitItem
DataSetInfo = registration.DataSetInfo
DeleteDBConnReq = registration.DeleteDBConnReq
DeleteDBConnResp = registration.DeleteDBConnResp
FileInfo = registration.FileInfo
Filter = registration.Filter
GetAssetTypeListReq = registration.GetAssetTypeListReq
GetAssetTypeListResp = registration.GetAssetTypeListResp
GetDBConnInfoReq = registration.GetDBConnInfoReq
GetDBConnInfoResp = registration.GetDBConnInfoResp
GetDBConnListReq = registration.GetDBConnListReq
GetDBConnListResp = registration.GetDBConnListResp
GetDataFormatListReq = registration.GetDataFormatListReq
GetDataFormatListResp = registration.GetDataFormatListResp
GetDataScaleUnitListReq = registration.GetDataScaleUnitListReq
GetDataScaleUnitListResp = registration.GetDataScaleUnitListResp
GetDataSetInfoReq = registration.GetDataSetInfoReq
GetDataSetInfoResp = registration.GetDataSetInfoResp
GetIndustryListReq = registration.GetIndustryListReq
GetIndustryListResp = registration.GetIndustryListResp
GetScaleTypeListReq = registration.GetScaleTypeListReq
GetScaleTypeListResp = registration.GetScaleTypeListResp
GetSourceTypeListReq = registration.GetSourceTypeListReq
GetSourceTypeListResp = registration.GetSourceTypeListResp
GetUpdateCycleUnitListReq = registration.GetUpdateCycleUnitListReq
GetUpdateCycleUnitListResp = registration.GetUpdateCycleUnitListResp
GetUserCategoryListReq = registration.GetUserCategoryListReq
GetUserCategoryListResp = registration.GetUserCategoryListResp
IndustryItem = registration.IndustryItem
Pagination = registration.Pagination
ProductAPI = registration.ProductAPI
ProductInfo = registration.ProductInfo
SaveAPIReq = registration.SaveAPIReq
SaveTableColumnItem = registration.SaveTableColumnItem
ScaleTypeItem = registration.ScaleTypeItem
SourceTypeItem = registration.SourceTypeItem
TestDBConnReq = registration.TestDBConnReq
TestDBConnResp = registration.TestDBConnResp
UpdateCycle = registration.UpdateCycle
UpdateCycleUnitItem = registration.UpdateCycleUnitItem
UserCategoryItem = registration.UserCategoryItem
Registration interface {
// 查询工业列表
GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error)
// ============== 数据源 ============== //
CreateDBConn(ctx context.Context, in *CreateDBConnReq, opts ...grpc.CallOption) (*CreateDBConnResp, error)
// 2. 数据源连接列表查询接口
GetDBConnList(ctx context.Context, in *GetDBConnListReq, opts ...grpc.CallOption) (*GetDBConnListResp, error)
// 3. 数据源连接详情查询接口
GetDBConnInfo(ctx context.Context, in *GetDBConnInfoReq, opts ...grpc.CallOption) (*GetDBConnInfoResp, error)
// 4. 数据源连接删除接口
DeleteDBConn(ctx context.Context, in *DeleteDBConnReq, opts ...grpc.CallOption) (*DeleteDBConnResp, error)
// 5. 数据源连接测试接口
TestDBConn(ctx context.Context, in *TestDBConnReq, opts ...grpc.CallOption) (*TestDBConnResp, error)
// ============== 通用选项 ============== //
GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListResp, error)
// 2. 资产规模类型查询接口
GetScaleTypeList(ctx context.Context, in *GetScaleTypeListReq, opts ...grpc.CallOption) (*GetScaleTypeListResp, error)
// 3. 使用对象列表接口
GetUserCategoryList(ctx context.Context, in *GetUserCategoryListReq, opts ...grpc.CallOption) (*GetUserCategoryListResp, error)
// 4. 资产类型查询接口
GetAssetTypeList(ctx context.Context, in *GetAssetTypeListReq, opts ...grpc.CallOption) (*GetAssetTypeListResp, error)
// 5. 数据存储格式查询接口
GetDataFormatList(ctx context.Context, in *GetDataFormatListReq, opts ...grpc.CallOption) (*GetDataFormatListResp, error)
// 6. 数据源取得方式查询接口
GetSourceTypeList(ctx context.Context, in *GetSourceTypeListReq, opts ...grpc.CallOption) (*GetSourceTypeListResp, error)
// 7. 数据规模单位查询接口
GetDataScaleUnitList(ctx context.Context, in *GetDataScaleUnitListReq, opts ...grpc.CallOption) (*GetDataScaleUnitListResp, error)
// 8. 更新周期单位查询接口
GetUpdateCycleUnitList(ctx context.Context, in *GetUpdateCycleUnitListReq, opts ...grpc.CallOption) (*GetUpdateCycleUnitListResp, error)
// ============== 隐私计算 ============== //
GetDataSetInfo(ctx context.Context, in *GetDataSetInfoReq, opts ...grpc.CallOption) (*GetDataSetInfoResp, error)
}
defaultRegistration struct {
......@@ -33,8 +110,86 @@ func NewRegistration(cli zrpc.Client) Registration {
}
}
// 查询工业列表
func (m *defaultRegistration) GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListRes, error) {
// ============== 数据源 ============== //
func (m *defaultRegistration) CreateDBConn(ctx context.Context, in *CreateDBConnReq, opts ...grpc.CallOption) (*CreateDBConnResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.CreateDBConn(ctx, in, opts...)
}
// 2. 数据源连接列表查询接口
func (m *defaultRegistration) GetDBConnList(ctx context.Context, in *GetDBConnListReq, opts ...grpc.CallOption) (*GetDBConnListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetDBConnList(ctx, in, opts...)
}
// 3. 数据源连接详情查询接口
func (m *defaultRegistration) GetDBConnInfo(ctx context.Context, in *GetDBConnInfoReq, opts ...grpc.CallOption) (*GetDBConnInfoResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetDBConnInfo(ctx, in, opts...)
}
// 4. 数据源连接删除接口
func (m *defaultRegistration) DeleteDBConn(ctx context.Context, in *DeleteDBConnReq, opts ...grpc.CallOption) (*DeleteDBConnResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.DeleteDBConn(ctx, in, opts...)
}
// 5. 数据源连接测试接口
func (m *defaultRegistration) TestDBConn(ctx context.Context, in *TestDBConnReq, opts ...grpc.CallOption) (*TestDBConnResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.TestDBConn(ctx, in, opts...)
}
// ============== 通用选项 ============== //
func (m *defaultRegistration) GetIndustryList(ctx context.Context, in *GetIndustryListReq, opts ...grpc.CallOption) (*GetIndustryListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetIndustryList(ctx, in, opts...)
}
// 2. 资产规模类型查询接口
func (m *defaultRegistration) GetScaleTypeList(ctx context.Context, in *GetScaleTypeListReq, opts ...grpc.CallOption) (*GetScaleTypeListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetScaleTypeList(ctx, in, opts...)
}
// 3. 使用对象列表接口
func (m *defaultRegistration) GetUserCategoryList(ctx context.Context, in *GetUserCategoryListReq, opts ...grpc.CallOption) (*GetUserCategoryListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetUserCategoryList(ctx, in, opts...)
}
// 4. 资产类型查询接口
func (m *defaultRegistration) GetAssetTypeList(ctx context.Context, in *GetAssetTypeListReq, opts ...grpc.CallOption) (*GetAssetTypeListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetAssetTypeList(ctx, in, opts...)
}
// 5. 数据存储格式查询接口
func (m *defaultRegistration) GetDataFormatList(ctx context.Context, in *GetDataFormatListReq, opts ...grpc.CallOption) (*GetDataFormatListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetDataFormatList(ctx, in, opts...)
}
// 6. 数据源取得方式查询接口
func (m *defaultRegistration) GetSourceTypeList(ctx context.Context, in *GetSourceTypeListReq, opts ...grpc.CallOption) (*GetSourceTypeListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetSourceTypeList(ctx, in, opts...)
}
// 7. 数据规模单位查询接口
func (m *defaultRegistration) GetDataScaleUnitList(ctx context.Context, in *GetDataScaleUnitListReq, opts ...grpc.CallOption) (*GetDataScaleUnitListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetDataScaleUnitList(ctx, in, opts...)
}
// 8. 更新周期单位查询接口
func (m *defaultRegistration) GetUpdateCycleUnitList(ctx context.Context, in *GetUpdateCycleUnitListReq, opts ...grpc.CallOption) (*GetUpdateCycleUnitListResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetUpdateCycleUnitList(ctx, in, opts...)
}
// ============== 隐私计算 ============== //
func (m *defaultRegistration) GetDataSetInfo(ctx context.Context, in *GetDataSetInfoReq, opts ...grpc.CallOption) (*GetDataSetInfoResp, error) {
client := registration.NewRegistrationClient(m.cli.Conn())
return client.GetDataSetInfo(ctx, in, opts...)
}
# ************************************************************
# Sequel Pro SQL dump
# Version 4541
#
# http://www.sequelpro.com/
# https://github.com/sequelpro/sequelpro
#
# Host: 127.0.0.1 (MySQL 5.7.41)
# Database: registration-service
# Generation Time: 2024-01-11 08:49:35 +0000
# ************************************************************
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
# Dump of table asset
# ------------------------------------------------------------
DROP TABLE IF EXISTS `asset`;
CREATE TABLE `asset` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`asset_id` varchar(20) NOT NULL DEFAULT '' COMMENT '资产编号',
`chain_info_id` varchar(64) DEFAULT NULL COMMENT '链信息id',
`txid` varchar(128) DEFAULT NULL COMMENT '交易id',
`asset_name` varchar(50) NOT NULL DEFAULT '' COMMENT '资产名称',
`asset_en_name` varchar(128) DEFAULT NULL COMMENT '资产英文简称',
`asset_type` tinyint(2) NOT NULL COMMENT '资产类型:1数据集,2API,3数据报告,4数据应用,5计算模型',
`industry_id` int(11) NOT NULL COMMENT '行业id',
`intro` varchar(500) NOT NULL DEFAULT '' COMMENT '简介',
`holder` varchar(255) NOT NULL DEFAULT '' COMMENT '持有权',
`source_name` varchar(20) DEFAULT NULL COMMENT '源数据名称',
`source_type` tinyint(2) DEFAULT NULL COMMENT '取得方式:1原始取得,2收集取得,3交易取得,4其他方式',
`source_way` varchar(50) DEFAULT NULL COMMENT '来源渠道',
`update_cycle_id` int(11) DEFAULT NULL COMMENT '更新周期id',
`suit_scenario` varchar(150) DEFAULT NULL COMMENT '适用场景',
`disable_scenario` varchar(150) DEFAULT NULL COMMENT '禁用场景',
`user_category` tinyint(2) DEFAULT NULL COMMENT '使用对象: 1政府用户,2企业用户,3个人用户,4无限制',
`immediately_supply` tinyint(1) DEFAULT NULL COMMENT '即时供应: 1即时供应,0延时供应',
`delayed_supply_time` date DEFAULT NULL COMMENT '延时供应时间',
`image` int(11) DEFAULT NULL COMMENT '图片附件表的id',
`description` varchar(500) DEFAULT NULL COMMENT '详细信息',
`desensitization_way` varchar(50) DEFAULT NULL COMMENT '脱敏方式',
`data_scale_id` int(11) DEFAULT NULL COMMENT '数据规模',
`expiration_time` date DEFAULT NULL COMMENT '失效时间',
`privacy_computing` tinyint(1) DEFAULT NULL COMMENT '用于隐私计算:1是,0否',
`data_sample` varchar(500) DEFAULT NULL COMMENT '数据示例',
`data_format` tinyint(2) DEFAULT NULL COMMENT '存储格式: 1数据表,2excel,3xml,4csv,5json, 9其他',
`time_span` varchar(50) DEFAULT NULL COMMENT '时间跨度:如数据集产品中数据采集时间 为 2018年1月至 2019年1月',
`creator_user_id` int(11) DEFAULT NULL COMMENT '创建用户uid',
`creator_address` varchar(255) DEFAULT NULL COMMENT '创建用户链账户地址',
`update_user_id` int(11) DEFAULT NULL COMMENT '最后修改用户uid',
`onchain_status` tinyint(2) DEFAULT NULL COMMENT '上链状态:0未上链,1已上链',
`certification_status` tinyint(2) DEFAULT NULL COMMENT '认证状态: 0待认证,1认证中,2认证完成',
`status` tinyint(2) DEFAULT NULL COMMENT '状态:1新资产,2已上架',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL,
`uploaded_at` datetime DEFAULT NULL COMMENT '上链时间',
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `asset_id` (`asset_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资产主表';
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
package test
var endpoints = []string{"127.0.0.1:8082"}
package test
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"github.com/zeromicro/go-zero/zrpc"
"registration-service/internal/code"
"registration-service/registrationclient"
"testing"
)
func TestCreateDBConn(t *testing.T) {
client := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: endpoints,
},
)
k := registrationclient.NewRegistration(client)
req := &registrationclient.CreateDBConnReq{
ConnName: "测试1",
Host: "127.0.0.1",
Port: 3306,
DbName: "test",
Type: 1,
Username: "admin",
Password: "123456",
Creator: "1001",
}
res, err := k.CreateDBConn(context.Background(), req)
if err != nil {
t.Error(err)
return
}
fmt.Println(res)
require.Equal(t, res.Code, int32(code.Success))
}
package test
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"github.com/zeromicro/go-zero/zrpc"
"registration-service/internal/code"
"registration-service/registrationclient"
"testing"
)
func TestGetDBConnList(t *testing.T) {
client := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: endpoints,
},
)
k := registrationclient.NewRegistration(client)
req := &registrationclient.GetDBConnListReq{}
res, err := k.GetDBConnList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
require.Equal(t, res.Code, int32(code.Success))
fmt.Println(res)
fmt.Printf("%T", res.Data.Pagination.Total)
fmt.Printf("%T", res.Data.Pagination.Page)
}
package test
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"github.com/zeromicro/go-zero/zrpc"
"registration-service/internal/code"
"registration-service/registrationclient"
"testing"
)
func TestGetScaleTypeList(t *testing.T) {
client := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: endpoints,
},
)
k := registrationclient.NewRegistration(client)
req := &registrationclient.GetScaleTypeListReq{}
res, err := k.GetScaleTypeList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
require.Equal(t, res.Code, int32(code.Success))
require.NotEmpty(t, res.Data)
fmt.Println(res)
}
package test
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"github.com/zeromicro/go-zero/zrpc"
"registration-service/internal/code"
"registration-service/registrationclient"
"testing"
)
func TestGetIndustryList(t *testing.T) {
client := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: endpoints,
},
)
k := registrationclient.NewRegistration(client)
req := &registrationclient.GetIndustryListReq{}
res, err := k.GetIndustryList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
require.Equal(t, res.Code, int32(code.Success))
require.NotEmpty(t, res.Data)
fmt.Println(res)
}
package test
import (
"context"
"fmt"
"github.com/stretchr/testify/require"
"github.com/zeromicro/go-zero/zrpc"
"registration-service/internal/code"
"registration-service/registrationclient"
"testing"
)
func TestGetUserCategoryList(t *testing.T) {
client := zrpc.MustNewClient(
zrpc.RpcClientConf{
Endpoints: endpoints,
},
)
k := registrationclient.NewRegistration(client)
req := &registrationclient.GetUserCategoryListReq{}
res, err := k.GetUserCategoryList(context.Background(), req)
if err != nil {
t.Error(err)
return
}
require.Equal(t, res.Code, int32(code.Success))
require.NotEmpty(t, res.Data)
fmt.Println(res)
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment