This commit is contained in:
yanweidong 2025-09-23 22:25:19 +08:00
commit 6f5173828b
56 changed files with 6118 additions and 0 deletions

112
.gitea/workflows/cicd.yaml Normal file
View File

@ -0,0 +1,112 @@
name: Actions
run-name: ${{ gitea.actor }} 🚀
on:
push:
tags:
- 'v*'
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- name: Clean temp directory
run: rm -rf *
# 设置 Go 环境
- name: 设置 Go
uses: https://git.apinb.com/github/setup-go@v5
with:
go-version: '1.24.6'
tag_name: ${{ gitea.ref }}
release_name: ${{ gitea.ref }}
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository_owner }}."
- name: Extract repository name
id: extract_repo
run: |
repo_name=$(echo ${{ gitea.repository }} | cut -d'/' -f2)
echo "Repository name: $repo_name"
echo "::set-output name=repo_name::$repo_name"
# 提取tag标签名称
- name: Extract tag name
id: extract_tag
run: echo "::set-output name=tag_name::$(echo ${{ gitea.ref }} | sed 's/^refs\/tags\///')"
- run: echo "🏷 The tag name is ${{ steps.extract_tag.outputs.tag_name }}."
# 检查出代码
- name: Check out repository code
uses: https://git.apinb.com/github/checkout@v4
# 缓存 Go 依赖项
- name: Cache Go modules
uses: https://git.apinb.com/github/cache@v4
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: set last version
run: |
echo "export srv_version='${{ steps.extract_tag.outputs.tag_name }}';export srv_name='${{ steps.extract_repo.outputs.repo_name }}'" > ${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}_last_version.sh
- run: go env -w GOPROXY=https://goproxy.cn
- run: go env -w GOPRIVATE=git.apinb.com/*
- run: go env -w GONOPROXY=git.apinb.com/*
- run: go env -w GOINSECURE=git.apinb.com/*
- run: go env -w GONOSUMDB=git.apinb.com/*
- run: go build -o ${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }} ./cmd/main/main.go
- run: echo "🍏 This job's status is ${{ job.status }}."
- name: upload version.sh to minio oss - 1
uses: https://git.apinb.com/github/minio-upload@main
with:
endpoint: http://172.24.0.20:9000
access-key-id: 9jtPPB7wwJpe5R2164bS
access-key-secret: ho9LYavUIGdkf0b50aaOduIA4zdx8FQFWpUYx30p
bucket: reles
source: ./${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}_last_version.sh
insecure: true
recursive: true
- name: upload bin to minio oss - 2
uses: https://git.apinb.com/github/minio-upload@main
with:
endpoint: http://172.24.0.20:9000
access-key-id: 9jtPPB7wwJpe5R2164bS
access-key-secret: ho9LYavUIGdkf0b50aaOduIA4zdx8FQFWpUYx30p
bucket: reles
source: ./${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}
target: /${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}@${{ steps.extract_tag.outputs.tag_name }}/
insecure: true
recursive: false
- name: upload etc/ to minio oss - 3
uses: https://git.apinb.com/github/minio-upload@main
with:
endpoint: http://172.24.0.20:9000
access-key-id: 9jtPPB7wwJpe5R2164bS
access-key-secret: ho9LYavUIGdkf0b50aaOduIA4zdx8FQFWpUYx30p
bucket: reles
source: ./etc
target: /${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}@${{ steps.extract_tag.outputs.tag_name }}/
insecure: true
recursive: true
- name: upload swagger to minio oss - 4
uses: https://git.apinb.com/github/minio-upload@main
with:
endpoint: http://172.24.0.20:9000
access-key-id: 9jtPPB7wwJpe5R2164bS
access-key-secret: ho9LYavUIGdkf0b50aaOduIA4zdx8FQFWpUYx30p
bucket: reles
source: ./swagger
target: /${{ gitea.repository_owner }}-${{ steps.extract_repo.outputs.repo_name }}@${{ steps.extract_tag.outputs.tag_name }}/
insecure: true
recursive: true
- name: upload success
run: echo "build&upload success."

33
.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
# ---> Go
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
builds/
logs/
pkg/
cache/
tmp/
.builds/
.logs/
.pkg/
.cache/
.tmp/
# Go workspace file
go.work

49
buf.gen.yaml Normal file
View File

@ -0,0 +1,49 @@
version: v2
plugins:
- local: protoc-gen-go
out: pb
opt:
- paths=source_relative
- local: protoc-gen-go
out: ../../bsm-sdk/client/golang/sample
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: pb
opt:
- paths=source_relative
- local: protoc-gen-go-grpc
out: ../../bsm-sdk/client/golang/sample
opt:
- paths=source_relative
- local: protoc-gen-grpc-gateway
out: pb
opt:
- paths=source_relative
- generate_unbound_methods=True
- local: protoc-gen-slc
out: ./
- local: protoc-gen-ts
out: ../../bsm-sdk/client/typescript
- local: protoc-gen-dart
out: ../../bsm-sdk/client/dart/sample
opt:
- grpc
- local: protoc-gen-openapiv2
out: ./swagger
opt: allow_merge=true,merge_file_name=sample
- local: protoc-gen-openapiv2
out: ../../bsm-sdk/client/docs/sample
opt: allow_merge=true,merge_file_name=sample
- local: protoc-gen-markdown
out: ../../bsm-sdk/client/docs/sample

10
buf.yaml Normal file
View File

@ -0,0 +1,10 @@
# For details on buf.yaml configuration, visit https://buf.build/docs/configuration/v2/buf-yaml
version: v2
lint:
use:
- STANDARD
modules:
- path: proto
breaking:
use:
- FILE

10
cmd/cli/main.go Normal file
View File

@ -0,0 +1,10 @@
package main
import (
"log"
)
func main() {
log.Println("Service cli mode:")
log.Println("Done.")
}

45
cmd/main/main.go Normal file
View File

@ -0,0 +1,45 @@
/**
* @Author: david.yan(david.yan@qq.com)
* @Date: 2021-11-26 15:25:03
*/
package main
import (
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/sample/internal/config"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/models"
"git.apinb.com/bsm-sdk/sample/internal/server"
)
var (
ServiceKey = "Sample"
)
func main() {
config.New(ServiceKey)
impl.NewImpl()
// 初始化服务
s := server.New(config.Spec.Addr)
srv := service.New(
s.Grpc,
&service.Options{
Addr: config.Spec.Addr,
MsConf: config.Spec.MicroService,
EtcdClient: impl.EtcdService,
GatewayCtx: s.Ctx,
GatewayConf: config.Spec.Gateway,
GatewayMux: s.Mux,
},
)
// 注册:初始化数据
srv.Use(models.InitData)
// 停止服务
defer srv.Stop()
// 启动服务
srv.Start()
}

44
etc/sample_dev.yaml Normal file
View File

@ -0,0 +1,44 @@
Service: sample
Port: 12426
Databases:
Driver: postgres
Source:
- host=47.109.77.183 user=postgres password=Weidong2023~! dbname=${BSM_Workspace}_dev port=5432 sslmode=disable TimeZone=Asia/Shanghai
# cache DB的选择请在后面直接带参数不带会自动HASH计算选择DB库。
Cache: redis://null:Weidong2023~!@47.109.77.183:6379/
# 微服务设置
MicroService:
Enable: false
Anonymous:
- sample.ping.hello
# 微信设置
WeChatConf:
AppID: 123
AppSecret: 123
# Gateway 设置
Gateway:
Enable: true
Port: 12425
# 微服务调用密钥
SecretKey: 6ad9529688041483f458f8de11ed16ff
Token:
Prefix: "/token/"
Expire: 86400
# Rpc:
# fts:
# Endpoint: https://api-v2.traingo.cn/fts/v2
# SecretKey: 4ef05311358cd1c8f787281f08b38b1c
# 链路追踪,性能监控,日志收集
# APM:
# Platform: elasticAPM
# Endpoint: http://127.0.0.1:14268/api/traces

44
etc/sample_prod.yaml Normal file
View File

@ -0,0 +1,44 @@
Service: sample
Port: 12426
Databases:
Driver: postgres
Source:
- host=47.109.77.183 user=postgres password=Weidong2023~! dbname=${BSM_Workspace}_dev port=5432 sslmode=disable TimeZone=Asia/Shanghai
# cache DB的选择请在后面直接带参数不带会自动HASH计算选择DB库。
Cache: redis://null:Weidong2023~!@47.109.77.183:6379/
# 微服务设置
MicroService:
Enable: false
Anonymous:
- sample.ping.hello
# 微信设置
WeChatConf:
AppID: 123
AppSecret: 123
# Gateway 设置
Gateway:
Enable: true
Port: 12425
# 微服务调用密钥
SecretKey: 6ad9529688041483f458f8de11ed16ff
Token:
Prefix: "/token/"
Expire: 86400
# Rpc:
# fts:
# Endpoint: https://api-v2.traingo.cn/fts/v2
# SecretKey: 4ef05311358cd1c8f787281f08b38b1c
# 链路追踪,性能监控,日志收集
# APM:
# Platform: elasticAPM
# Endpoint: http://127.0.0.1:14268/api/traces

44
etc/sample_test.yaml Normal file
View File

@ -0,0 +1,44 @@
Service: sample
Port: 12426
Databases:
Driver: postgres
Source:
- host=47.109.77.183 user=postgres password=Weidong2023~! dbname=${BSM_Workspace}_dev port=5432 sslmode=disable TimeZone=Asia/Shanghai
# cache DB的选择请在后面直接带参数不带会自动HASH计算选择DB库。
Cache: redis://null:Weidong2023~!@47.109.77.183:6379/
# 微服务设置
MicroService:
Enable: false
Anonymous:
- sample.ping.hello
# 微信设置
WeChatConf:
AppID: 123
AppSecret: 123
# Gateway 设置
Gateway:
Enable: true
Port: 12425
# 微服务调用密钥
SecretKey: 6ad9529688041483f458f8de11ed16ff
Token:
Prefix: "/token/"
Expire: 86400
# Rpc:
# fts:
# Endpoint: https://api-v2.traingo.cn/fts/v2
# SecretKey: 4ef05311358cd1c8f787281f08b38b1c
# 链路追踪,性能监控,日志收集
# APM:
# Platform: elasticAPM
# Endpoint: http://127.0.0.1:14268/api/traces

View File

@ -0,0 +1,8 @@
[program:bsm-apps-sample]
command=/data/app/bsm-apps-sample
directory=/data/app
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile=/data/app/logs/apps-sample.log

70
go.mod Normal file
View File

@ -0,0 +1,70 @@
module git.apinb.com/bsm-sdk/sample
go 1.24.6
tool (
git.apinb.com/bsm-tools/protoc-gen-markdown
git.apinb.com/bsm-tools/protoc-gen-slc
git.apinb.com/bsm-tools/protoc-gen-ts
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2
github.com/pepabo/protoc-gen-go-client
google.golang.org/grpc/cmd/protoc-gen-go-grpc
google.golang.org/protobuf/cmd/protoc-gen-go
)
require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2
gorm.io/driver/mysql v1.6.0 // indirect
)
require github.com/allegro/bigcache/v3 v3.1.0
require (
filippo.io/edwards25519 v1.1.0 // indirect
git.apinb.com/bsm-tools/protoc-gen-markdown v0.0.0-20250907131213-6c1694ce6bcb // indirect
git.apinb.com/bsm-tools/protoc-gen-slc v0.0.10 // indirect
git.apinb.com/bsm-tools/protoc-gen-ts v0.0.2 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.6.0 // indirect
github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/pepabo/protoc-gen-go-client v0.3.0 // indirect
go.etcd.io/etcd/api/v3 v3.6.5 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/mod v0.28.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250922171735-9219d122eba9 // indirect
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 // indirect
)
require (
git.apinb.com/bsm-sdk/core v0.0.85
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/go-sql-driver/mysql v1.9.3 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.7.6 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/oklog/ulid/v2 v2.1.1 // indirect
github.com/redis/go-redis/v9 v9.14.0 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.6.5 // indirect
go.etcd.io/etcd/client/v3 v3.6.5
golang.org/x/crypto v0.42.0
golang.org/x/net v0.44.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect
google.golang.org/grpc v1.75.1
google.golang.org/protobuf v1.36.9
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/postgres v1.6.0 // indirect
gorm.io/gorm v1.31.0
)

170
go.sum Normal file
View File

@ -0,0 +1,170 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
git.apinb.com/bsm-sdk/core v0.0.85 h1:iM4BrF1jVr3UGrCDyN6ILnm+Fcj51oDL878eCl2jcXE=
git.apinb.com/bsm-sdk/core v0.0.85/go.mod h1:Y1D+wBBHhF8+5kNrZaeRoscA2MSI40uy1AYeSpAuvYc=
git.apinb.com/bsm-tools/protoc-gen-markdown v0.0.0-20250907131213-6c1694ce6bcb h1:GoXhkGzI5vZ9JMXCVsSRw/AGsJY0tM2aEv76YaUg2wM=
git.apinb.com/bsm-tools/protoc-gen-markdown v0.0.0-20250907131213-6c1694ce6bcb/go.mod h1:l+84zWPM4F40Ppar+jLapgjRNt6XWDsr+l0vN4Jjlm4=
git.apinb.com/bsm-tools/protoc-gen-slc v0.0.10 h1:95KBYcg/xu3uMt2lbtklOXmzoz5JYB8BQpipFnYwQoY=
git.apinb.com/bsm-tools/protoc-gen-slc v0.0.10/go.mod h1:30pCqqHcsS4Bz2px4K5gHtvQ4dAoJQ1LSJwyhriBxQM=
git.apinb.com/bsm-tools/protoc-gen-ts v0.0.2 h1:T9C1kY6iIHl5cZ7xyNgV2xlPNWxXmaWfTbD8AzpBB9M=
git.apinb.com/bsm-tools/protoc-gen-ts v0.0.2/go.mod h1:5kAPyKSSLL7HcdZvyJa+ICnOiit/O/Z963nQpGJRrao=
github.com/allegro/bigcache/v3 v3.1.0 h1:H2Vp8VOvxcrB91o86fUSVJFqeuz8kpyyB02eH3bSzwk=
github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4=
github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec=
github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5zn0bCJWo=
github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c h1:+Zo5Ca9GH0RoeVZQKzFJcTLoAixx5s5Gq3pTIS+n354=
github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c/go.mod h1:HJGU9ULdREjOcVGZVPB5s6zYmHi1RxzT71l2wQyLmnE=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk=
github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
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=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s=
github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
github.com/pepabo/protoc-gen-go-client v0.3.0 h1:BUlzqqgMXWaEYzGXw1vqLIShP18JV7BMDm45OSLr/AU=
github.com/pepabo/protoc-gen-go-client v0.3.0/go.mod h1:NvHW7/gsmZUK2UxafqzUzWD8zEMY0lMmm+2kLVxx8Jc=
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/redis/go-redis/v9 v9.14.0 h1:u4tNCjXOyzfgeLN+vAZaW1xUooqWDqVEsZN0U01jfAE=
github.com/redis/go-redis/v9 v9.14.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/etcd/api/v3 v3.6.5 h1:pMMc42276sgR1j1raO/Qv3QI9Af/AuyQUW6CBAWuntA=
go.etcd.io/etcd/api/v3 v3.6.5/go.mod h1:ob0/oWA/UQQlT1BmaEkWQzI0sJ1M0Et0mMpaABxguOQ=
go.etcd.io/etcd/client/pkg/v3 v3.6.5 h1:Duz9fAzIZFhYWgRjp/FgNq2gO1jId9Yae/rLn3RrBP8=
go.etcd.io/etcd/client/pkg/v3 v3.6.5/go.mod h1:8Wx3eGRPiy0qOFMZT/hfvdos+DjEaPxdIDiCDUv/FQk=
go.etcd.io/etcd/client/v3 v3.6.5 h1:yRwZNFBx/35VKHTcLDeO7XVLbCBFbPi+XV4OC3QJf2U=
go.etcd.io/etcd/client/v3 v3.6.5/go.mod h1:ZqwG/7TAFZ0BJ0jXRPoJjKQJtbFo/9NIY8uoFFKcCyo=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
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.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
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.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
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=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/genproto/googleapis/api v0.0.0-20250922171735-9219d122eba9 h1:jm6v6kMRpTYKxBRrDkYAitNJegUeO1Mf3Kt80obv0gg=
google.golang.org/genproto/googleapis/api v0.0.0-20250922171735-9219d122eba9/go.mod h1:LmwNphe5Afor5V3R5BppOULHOnt2mCIf+NxMd4XiygE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ=
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA=
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.6.0 h1:eNbLmNTpPpTOVZi8MMxCi2aaIm0ZpInbORNXDwyLGvg=
gorm.io/driver/mysql v1.6.0/go.mod h1:D/oCC2GWK3M/dqoLxnOlaNKmXz8WNTfcS9y5ovaSqKo=
gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4=
gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo=
gorm.io/gorm v1.31.0 h1:0VlycGreVhK7RF/Bwt51Fk8v0xLiiiFdbGDPIZQ7mJY=
gorm.io/gorm v1.31.0/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=

41
internal/config/config.go Normal file
View File

@ -0,0 +1,41 @@
package config
import (
"net"
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/crypto/encipher"
"git.apinb.com/bsm-sdk/core/env"
)
var (
Spec SrvConfig
)
type SrvConfig struct {
conf.Base `yaml:",inline"`
Databases *conf.DBConf `yaml:"Databases"`
MicroService *conf.MicroServiceConf `yaml:"MicroService"`
Rpc map[string]conf.RpcConf `yaml:"Rpc"`
Gateway *conf.GatewayConf `yaml:"Gateway"`
Apm *conf.ApmConf `yaml:"APM"`
Etcd *conf.EtcdConf `yaml:"Etcd"`
}
func New(srvKey string) {
// 初始化配置 创建一个新的配置实例,用于服务配置
conf.New(srvKey, &Spec)
// 配置校验 服务IP,端口; 端口如果不合规,则随机分配端口
Spec.Port = conf.CheckPort(Spec.Port)
Spec.BindIP = conf.CheckIP(Spec.BindIP)
Spec.Addr = net.JoinHostPort(Spec.BindIP, Spec.Port)
// 配置校验 服务名称地址及监听地址不能为空
conf.NotNil(Spec.Service, Spec.Cache)
// 初始化加密SecretKey
encipher.New(env.Runtime.JwtSecretKey)
conf.PrintInfo(Spec.Addr)
}

25
internal/impl/impl.go Normal file
View File

@ -0,0 +1,25 @@
package impl
import (
"git.apinb.com/bsm-sdk/core/cache/redis"
"git.apinb.com/bsm-sdk/core/with"
"git.apinb.com/bsm-sdk/sample/internal/config"
"github.com/allegro/bigcache/v3"
clientv3 "go.etcd.io/etcd/client/v3"
"gorm.io/gorm"
)
var (
RedisService *redis.RedisClient
EtcdService *clientv3.Client
DBService *gorm.DB
MemorySerice *bigcache.BigCache
)
func NewImpl() {
// with activating
MemorySerice = with.Memory(nil)
RedisService = with.RedisCache(config.Spec.Cache) // redis cache
DBService = with.Databases(config.Spec.Databases, nil) // model
EtcdService = with.Etcd(config.Spec.Etcd) // etcd
}

View File

@ -0,0 +1,69 @@
package account
import (
"context"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/models"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 通过会员所有信息
func Get(ctx context.Context, in *pb.Empty) (reply *pb.GetFullReply, err error) {
AUTH, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
account, err := models.GetsampleAccountByField("id", AUTH.ID)
if err != nil {
return nil, err
}
verify := models.GetVerifyStatus(AUTH.ID)
tagRecords := make([]models.sampleTags, 0)
impl.DBService.Model(&models.sampleTags{}).Where("sample_id=?", AUTH.ID).Find(&tagRecords)
tags := make([]*pb.TagItem, 0)
for _, tag := range tagRecords {
tags = append(tags, &pb.TagItem{
Name: tag.Name,
Icon: tag.Icon,
})
}
reply = &pb.GetFullReply{
Identity: account.Identity,
Account: account.Account,
Phone: account.Phone,
Email: account.Email,
Rights: account.Rights,
Verify: verify,
Tags: tags,
}
data := &models.sampleData{}
impl.DBService.Where("sample_id=?", AUTH.ID).First(data)
if data != nil {
bd := data.Birthday.Format("2006-01-02")
if bd == "0001-01-01" {
bd = ""
}
reply.Nickname = data.Nickname
reply.Avatar = data.Avatar
reply.Birthday = bd
reply.Sex = int32(data.Sex)
reply.Country = data.Country
reply.Province = data.Province
reply.City = data.City
reply.Area = data.Area
reply.Sign = data.Sign
reply.Cover = data.Cover
reply.Score = data.Score
reply.Level = data.Level
}
return
}

View File

@ -0,0 +1,65 @@
package account
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 更新会员的信息数据
// 字段值为空或是0将不更新此数据
func SetData(ctx context.Context, in *pb.SetDataRequest) (reply *pb.StatusReply, err error) {
auth, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
var birthday time.Time
if in.Birthday != "" {
birthday, err = time.Parse("2006-01-02", in.Birthday)
if err != nil {
return nil, errcode.ErrInvalidArgument
}
}
var data = models.sampleData{
Nickname: in.Nickname,
Avatar: in.Avatar,
Sex: int8(in.Sex),
Birthday: birthday,
Country: in.Country,
Province: in.Province,
City: in.City,
Area: in.Area,
Sign: in.Sign,
Cover: in.Cover,
UpdatedAt: time.Now(),
}
var cnt int64
impl.DBService.Model(&models.sampleData{}).Where("sample_id=?", auth.ID).Count(&cnt)
if cnt == 0 {
data.sampleID = auth.ID
data.sampleIdentity = auth.Identity
err = impl.DBService.Create(&data).Error
} else {
impl.DBService.Where("sample_id=?", auth.ID).Updates(&data)
}
if err != nil {
print.Error("first or create by sample_id %v error:%v", auth.ID, err)
return nil, errcode.ErrDB
}
return &pb.StatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixNano(),
}, nil
}

View File

@ -0,0 +1,52 @@
package account
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/models"
pb "git.apinb.com/bsm-sdk/sample/pb"
"golang.org/x/crypto/bcrypt"
)
// 更新会员的密码
func SetPassword(ctx context.Context, in *pb.SetPasswordRequest) (reply *pb.StatusReply, err error) {
if in.OldPassword == "" || in.NewPassword == "" {
return nil, errcode.ErrInvalidArgument
}
auth, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
pa, err := models.GetsampleAccountByField("id", auth.ID)
if err != nil {
return nil, err
}
err = bcrypt.CompareHashAndPassword([]byte(pa.Password), []byte(in.OldPassword+pa.Salt))
if err != nil {
return nil, errcode.NewError(187, "sample Error")
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(in.NewPassword+pa.Salt), bcrypt.MinCost)
if err != nil {
return nil, errcode.ErrInternal
}
err = impl.DBService.Model(&models.sampleAccount{}).Where("id = ? ", auth.ID).Update("password", string(hashedPassword)).Error
if err != nil {
print.Error("Update sample account password by id %+v error:%v", auth.ID, err)
return nil, errcode.ErrDB
}
return &pb.StatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixNano(),
}, nil
}

View File

@ -0,0 +1,23 @@
package account
import (
"context"
"git.apinb.com/bsm-sdk/core/service"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 获取会员的相关统计数据
func Statistics(ctx context.Context, in *pb.StatisticsRequest) (reply *pb.StatisticsReply, err error) {
// parse authorization meta.
_, err = service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
// TODO: valid code
// TODO: add your logic code & delete this line.
return
}

View File

@ -0,0 +1,50 @@
package account
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 新增标签
func TagCreate(ctx context.Context, in *pb.TagItem) (reply *pb.StatusReply, err error) {
// parse authorization meta.
AUTH, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
// TODO: valid code
if in.Name == "" {
return nil, errcode.ErrInvalidArgument
}
// TODO: add your logic code & delete this line.
var cnt int64
impl.DBService.Model(&models.sampleTags{}).Where("sample_id=? and name = ?", AUTH.ID, in.Name).Count(&cnt)
if cnt == 0 {
record := &models.sampleTags{
Name: in.Name,
Icon: in.Icon,
}
record.Identity = utils.UUID()
record.sampleID = AUTH.ID
record.sampleIdentity = AUTH.Identity
impl.DBService.Create(record)
} else {
impl.DBService.Model(&models.sampleTags{}).Where("sample_id=? and name = ?", AUTH.ID, in.Name).Update("icon", in.Icon)
}
return &pb.StatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixMilli(),
}, nil
}

View File

@ -0,0 +1,35 @@
package account
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 删除标签
func TagRemove(ctx context.Context, in *pb.IdentRequest) (reply *pb.StatusReply, err error) {
// parse authorization meta.
AUTH, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
// valildate request id,identity.
if in.Identity == "" {
return nil, errcode.ErrInvalidArgument
}
// TODO: add your logic code & delete this line.
impl.DBService.Model(&models.sampleTags{}).Unscoped().Delete("sample_id=? and identity = ?", AUTH.ID, in.Identity)
return &pb.StatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixMilli(),
}, nil
}

View File

@ -0,0 +1,12 @@
package common
import "git.apinb.com/bsm-sdk/core/crypto/encipher"
// GenerateTokenAes .
func GenerateTokenAes(id uint, identity, client, role string, extend map[string]string) (string, error) {
token, err := encipher.GenerateTokenAes(id, identity, client, role, nil, extend)
if err != nil {
return "", err
}
return token, nil
}

View File

@ -0,0 +1,56 @@
package forget
import (
"context"
"git.apinb.com/bsm-sdk/core/crypto/encipher"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/models"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 重罢密码
func Reset(ctx context.Context, in *pb.ForgetResetRequest) (reply *pb.ForgetReply, err error) {
if in.Identity == "" || in.Password == "" {
return nil, errcode.ErrInvalidArgument
}
pa, err := models.GetsampleAccountByField("identity", in.Identity)
if err != nil {
return nil, err
}
if pa.Status == vars.Status_Disable {
return nil, errcode.ErrPermissionDenied
}
err = impl.DBService.Model(&models.sampleAccount{}).Where("identity = ? ", pa.Identity).Update("password", utils.Md5(in.Password)).Error
if err != nil {
print.Error("Update sample account password by identity %+v error:%v", in.Identity, err)
return nil, errcode.ErrDB
}
paExtend := map[string]string{
"Rights": pa.Rights,
}
token, err := encipher.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, nil, paExtend)
if err != nil {
print.Error("encipher.GenerateTokenAes by id %v identity %v rights %v extend %v error:%v", pa.ID, pa.Identity, pa.Rights, paExtend, err)
return nil, errcode.ErrDB
}
//save token to cache.
err = impl.RedisService.Client.Set(impl.RedisService.Ctx, vars.TokenPrefix+pa.Identity, token, 0).Err()
if err != nil {
print.Error("Set redis cache by key %v error:%v", vars.TokenPrefix+pa.Identity, err)
return nil, errcode.ErrInternal
}
return &pb.ForgetReply{
Identity: pa.Identity,
Token: token,
Extend: paExtend,
}, nil
}

View File

@ -0,0 +1,34 @@
package forget
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
_vars "git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/models"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 验证手机号和验证码
func Verify(ctx context.Context, in *pb.VerifyRequest) (reply *pb.StatusReply, err error) {
if in.Phone == "" || in.Code == "" {
return nil, errcode.ErrInvalidArgument
}
pa, err := models.GetsampleAccountByField("phone", in.Phone)
if err != nil {
return nil, err
}
if pa.Status == vars.Status_Disable {
return nil, errcode.ErrPermissionDenied
}
return &pb.StatusReply{
Data: _vars.OK,
Timeseq: time.Now().UnixNano(),
}, nil
}

View File

@ -0,0 +1,52 @@
package login
import (
"context"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/logic/common"
"git.apinb.com/bsm-sdk/sample/internal/models"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 通过验证码登录
func Code(ctx context.Context, in *pb.LoginByCodeRequest) (reply *pb.LoginReply, err error) {
if in.Phone == "" || in.Code == "" {
return nil, errcode.ErrInvalidArgument
}
pa, err := models.GetsampleAccountByField("phone", in.Phone)
if err != nil {
return nil, err
}
if pa.Status == vars.Status_Disable {
return nil, errcode.ErrPermissionDenied
}
paExtend := map[string]string{
"rights": pa.Rights,
}
token, err := common.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, paExtend)
if err != nil {
return nil, err
}
//save token to cache.
err = impl.RedisService.Client.Set(impl.RedisService.Ctx, vars.TokenPrefix+pa.Identity, token, 0).Err()
if err != nil {
print.Error("Set redis cache by key %v error:%v", vars.TokenPrefix+pa.Identity, err)
return nil, errcode.ErrInternal
}
return &pb.LoginReply{
Id: int64(pa.ID),
Identity: pa.Identity,
Token: token,
Extend: paExtend,
}, nil
}

View File

@ -0,0 +1,61 @@
package login
import (
"context"
"errors"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/utils"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/logic/common"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
"gorm.io/gorm"
)
// 通过验证码登录并注册
func CodeAndRegister(ctx context.Context, in *pb.LoginByCodeRequest) (reply *pb.LoginReply, err error) {
if in.Phone == "" || in.Code == "" {
return nil, errcode.ErrInvalidArgument
}
var pa models.sampleAccount
err = impl.DBService.Where("phone = ?", in.Phone).First(&pa).Error
if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
print.Error("Get sample account by phone %v error:%v", in.Phone, err)
return nil, errcode.ErrDB
}
pa = models.sampleAccount{
Account: in.Phone,
Phone: in.Phone,
}
pa.Identity = utils.UUID()
pa.Status = vars.Status_Normal
err = impl.DBService.Create(&pa).Error
if err != nil {
print.Error("create sample account and password extend by data %+v error:%v", pa, err)
return nil, errcode.ErrDB
}
}
if pa.Status == vars.Status_Disable {
return nil, errcode.ErrPermissionDenied
}
paExtend := map[string]string{
"rights": pa.Rights,
}
token, err := common.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, paExtend)
if err != nil {
return nil, err
}
return &pb.LoginReply{
Id: int64(pa.ID),
Identity: pa.Identity,
Token: token,
Extend: paExtend,
}, nil
}

View File

@ -0,0 +1,55 @@
package login
import (
"context"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
_vars "git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/logic/common"
"git.apinb.com/bsm-sdk/sample/internal/models"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
"golang.org/x/crypto/bcrypt"
)
// 通过密码登录
func Pwd(ctx context.Context, in *pb.LoginByPwdRequest) (reply *pb.LoginReply, err error) {
if in.Account == "" || in.Password == "" {
return nil, errcode.ErrInvalidArgument
}
pa, err := models.GetsampleAccountByField("account", in.Account)
if err != nil {
return nil, err
}
if pa.Status == vars.Status_Disable {
return nil, errcode.ErrPermissionDenied
}
err = bcrypt.CompareHashAndPassword([]byte(pa.Password), []byte(in.Password+pa.Salt))
if err != nil {
return nil, errcode.NewError(187, "sample Error")
}
extend := map[string]string{
"rights": pa.Rights,
}
token, err := common.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, extend)
if err != nil {
return nil, err
}
//save token to cache.
err = impl.RedisService.Client.Set(impl.RedisService.Ctx, vars.TokenPrefix+pa.Identity, token, _vars.JwtExpire).Err()
if err != nil {
print.Error("Set redis cache by key %v error:%v", vars.TokenPrefix+pa.Identity, err)
return nil, errcode.ErrInternal
}
return &pb.LoginReply{
Id: int64(pa.ID),
Identity: pa.Identity,
Token: token,
}, nil
}

View File

@ -0,0 +1,30 @@
package register
import (
"context"
"regexp"
"git.apinb.com/bsm-sdk/core/errcode"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 手机验证码注册
func Code(ctx context.Context, in *pb.RegisterRequest) (reply *pb.RegisterReply, err error) {
if in.Phone == "" || in.Code == "" {
return nil, errcode.ErrInvalidArgument
}
//手机号验证
matched, err := regexp.MatchString("^1[3456789]{1}\\d{9}$", in.Phone)
if err != nil || !matched {
return nil, errcode.ErrInvalidArgument
}
//账号唯一验证
found := models.sampleAccountExists("phone", in.Phone)
if found {
return nil, errcode.ErrAlreadyExists
}
return Do(in)
}

View File

@ -0,0 +1,81 @@
/**
* @Author: ZhaoYadong
* @Date: 2024-02-27 21:09:45
* @LastEditors: ZhaoYadong
* @LastEditTime: 2024-02-28 11:50:05
* @FilePath: /server/Users/edy/go/src/sample/internal/logic/register/do.go
*/
package register
import (
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/types"
"git.apinb.com/bsm-sdk/core/utils"
_vars "git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/config"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/logic/common"
"git.apinb.com/bsm-sdk/sample/internal/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
"golang.org/x/crypto/bcrypt"
)
// Do .
func Do(in *pb.RegisterRequest) (*pb.RegisterReply, error) {
var salt string
if in.Password != "" {
salt = utils.UUID()
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(in.Password+salt), bcrypt.MinCost)
if err != nil {
return nil, errcode.ErrInternal
}
in.Password = string(hashedPassword)
}
var account = in.Account
if account == "" {
account = in.Phone
}
pa := models.sampleAccount{
Std_IICUDS: types.Std_IICUDS{
Identity: utils.UUID(),
Status: vars.Status_Normal,
},
Account: account,
Phone: in.Phone,
Password: in.Password,
Salt: salt,
AgencyId: uint(in.AgencyId),
StaffId: uint(in.StaffId),
OwnerId: uint(in.OwnerId),
}
// 插入sample 基础表
if err := impl.DBService.Create(&pa).Error; err != nil {
print.Error("create sample account and password extend by data %+v error:%v", pa, err)
return nil, errcode.ErrDB
}
extend := map[string]string{
"rights": pa.Rights,
}
token, err := common.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, extend)
if err != nil {
return nil, err
}
//save token to cache.
err = impl.RedisService.Client.Set(impl.RedisService.Ctx, config.Spec.Token.Prefix+pa.Identity, token, _vars.JwtExpire).Err()
if err != nil {
print.Error("Set redis cache by key %v error:%v", vars.TokenPrefix+pa.Identity, err)
return nil, errcode.ErrInternal
}
return &pb.RegisterReply{
Id: int64(pa.ID),
Identity: pa.Identity,
Token: token,
Extend: extend,
}, nil
}

View File

@ -0,0 +1,23 @@
package register
import (
"context"
"git.apinb.com/bsm-sdk/core/errcode"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
// 帐号密码注册
func Pwd(ctx context.Context, in *pb.RegisterRequest) (reply *pb.RegisterReply, err error) {
if in.Account == "" || in.Password == "" {
return nil, errcode.ErrInvalidArgument
}
//账号唯一验证
found := models.sampleAccountExists("account", in.Account)
if found {
return nil, errcode.ErrAlreadyExists
}
return Do(in)
}

View File

@ -0,0 +1,64 @@
/**
* @Author: ZhaoYadong
* @Date: 2024-02-27 21:09:45
* @LastEditors: ZhaoYadong
* @LastEditTime: 2024-02-28 09:13:35
* @FilePath: /server/Users/edy/go/src/sample/internal/models/sample_account.go
*/
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
package models
import (
"errors"
"git.apinb.com/bsm-sdk/core/database"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/types"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"gorm.io/gorm"
)
/*
* sampleAccount
* Comment: 通行证帐号表
* Version: 10
* Created: 2022-04-12 10:44:51 , Updated:0001-01-01 00:00:00
*/
type sampleAccount struct {
types.Std_IICUDS
Account string `gorm:"column:account;type:varchar(255);default:'';" json:"account"` // 帐号
Phone string `gorm:"column:phone;type:varchar(20);default:'';" json:"phone"` // 手机号
Email string `gorm:"column:email;type:varchar(255);default:'';" json:"email"` // Email
Password string `gorm:"column:password;type:varchar(255);not null;" json:"password"` // 密码
Salt string `gorm:"column:salt;type:varchar(255);not null;" json:"salt"` // 密码盐
Rights string `gorm:"column:rights;type:varchar(255);default:'';" json:"rights"` // 权限
AgencyId uint `gorm:"column:agency_id;default:0;" json:"agency_id"` // 分销代理id
StaffId uint `gorm:"column:staff_id;default:0;" json:"staff_id"` // 工作人员id
OwnerId uint `gorm:"column:owner_id;default:0;" json:"owner_id"` // 所属唯一id
}
func init() {
database.MigrateTables = append(database.MigrateTables, &sampleAccount{})
}
// TableName .
func (table *sampleAccount) TableName() string {
return "sample_account" //对应数据库表名
}
// GetsampleAccountByField 根据特定字段值获取sampleAccount对象
func GetsampleAccountByField(field string, value interface{}) (*sampleAccount, error) {
var (
data sampleAccount
condition = map[string]any{field: value}
)
err := impl.DBService.Where(condition).First(&data).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, errcode.ErrNotFound(404, "Account not found")
}
return nil, errcode.ErrDB
}
return &data, nil
}

7
internal/models/query.go Normal file
View File

@ -0,0 +1,7 @@
package models
// 初始化数据
func InitData() error {
return nil
}

View File

@ -0,0 +1,47 @@
// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
"git.apinb.com/bsm-sdk/sample/internal/logic/account"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
type AccountServer struct {
pb.UnimplementedAccountServer
}
func NewAccountServer() *AccountServer {
return &AccountServer{}
}
// 通过会员所有信息
func (s *AccountServer) Get(ctx context.Context, in *pb.Empty) (*pb.GetFullReply, error) {
return account.Get(ctx, in)
}
// 更新会员的信息数据,字段值为空或是0将不更新此数据
func (s *AccountServer) SetData(ctx context.Context, in *pb.SetDataRequest) (*pb.StatusReply, error) {
return account.SetData(ctx, in)
}
// 更新会员的密码
func (s *AccountServer) SetPassword(ctx context.Context, in *pb.SetPasswordRequest) (*pb.StatusReply, error) {
return account.SetPassword(ctx, in)
}
// 新增标签
func (s *AccountServer) TagCreate(ctx context.Context, in *pb.TagItem) (*pb.StatusReply, error) {
return account.TagCreate(ctx, in)
}
// 删除标签
func (s *AccountServer) TagRemove(ctx context.Context, in *pb.IdentRequest) (*pb.StatusReply, error) {
return account.TagRemove(ctx, in)
}
// 获取会员的相关统计数据
func (s *AccountServer) Statistics(ctx context.Context, in *pb.StatisticsRequest) (*pb.StatisticsReply, error) {
return account.Statistics(ctx, in)
}

View File

@ -0,0 +1,27 @@
// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
"git.apinb.com/bsm-sdk/sample/internal/logic/forget"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
type ForgetServer struct {
pb.UnimplementedForgetServer
}
func NewForgetServer() *ForgetServer {
return &ForgetServer{}
}
// 验证手机号和验证码
func (s *ForgetServer) Verify(ctx context.Context, in *pb.VerifyRequest) (*pb.StatusReply, error) {
return forget.Verify(ctx, in)
}
// 重罢密码
func (s *ForgetServer) Reset(ctx context.Context, in *pb.ForgetResetRequest) (*pb.ForgetReply, error) {
return forget.Reset(ctx, in)
}

View File

@ -0,0 +1,32 @@
// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
"git.apinb.com/bsm-sdk/sample/internal/logic/login"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
type LoginServer struct {
pb.UnimplementedLoginServer
}
func NewLoginServer() *LoginServer {
return &LoginServer{}
}
// 通过密码登录
func (s *LoginServer) Pwd(ctx context.Context, in *pb.LoginByPwdRequest) (*pb.LoginReply, error) {
return login.Pwd(ctx, in)
}
// 通过验证码登录
func (s *LoginServer) Code(ctx context.Context, in *pb.LoginByCodeRequest) (*pb.LoginReply, error) {
return login.Code(ctx, in)
}
// 通过验证码登录并注册
func (s *LoginServer) CodeAndRegister(ctx context.Context, in *pb.LoginByCodeRequest) (*pb.LoginReply, error) {
return login.CodeAndRegister(ctx, in)
}

78
internal/server/new.go Normal file
View File

@ -0,0 +1,78 @@
// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
"net/http"
"os"
"strings"
"git.apinb.com/bsm-sdk/core/vars"
pb "git.apinb.com/bsm-sdk/sample/pb"
gwRuntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"google.golang.org/protobuf/proto"
)
type Server struct {
Grpc *grpc.Server
Ctx context.Context
Mux *gwRuntime.ServeMux
}
func New(addr string) *Server {
srv := &Server{Ctx: context.Background(), Grpc: grpc.NewServer(), Mux: gwRuntime.NewServeMux(
gwRuntime.WithForwardResponseRewriter(responseEnvelope),
)}
// register service to grpc.Server
pb.RegisterAccountServer(srv.Grpc, NewAccountServer())
pb.RegisterForgetServer(srv.Grpc, NewForgetServer())
pb.RegisterLoginServer(srv.Grpc, NewLoginServer())
pb.RegisterRegisterServer(srv.Grpc, NewRegisterServer())
reflection.Register(srv.Grpc)
// 将服务注册到Gateway
opts := []grpc.DialOption{grpc.WithInsecure()}
pb.RegisterAccountHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterForgetHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterLoginHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
pb.RegisterRegisterHandlerFromEndpoint(srv.Ctx, srv.Mux, addr, opts)
// Register services swagger
srv.RegisterSwagger()
return srv
}
// RegisterSwagger 注册swagger
func (s *Server) RegisterSwagger() {
srvKey := strings.ToLower(vars.ServiceKey)
s.Mux.HandlePath("GET", "/"+srvKey+".swagger.json", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
w.Header().Set("Content-Type", "application/json")
bytes, err := os.ReadFile("./swagger/" + srvKey + ".swagger.json")
if err != nil {
w.WriteHeader(http.StatusNotFound)
w.Write([]byte(err.Error()))
return
}
w.Write(bytes)
return
})
}
// response envelope
func responseEnvelope(_ context.Context, response proto.Message) (interface{}, error) {
name := string(response.ProtoReflect().Descriptor().Name())
if name == "Status" || name == "Error" || name == "StatusReply" {
return response, nil
}
return map[string]any{
"code": 0,
"message": "OK",
"result": response,
}, nil
}

View File

@ -0,0 +1,27 @@
// Code generated by protoc-gen-slc. DO NOT EDIT.
package server
import (
"context"
"git.apinb.com/bsm-sdk/sample/internal/logic/register"
pb "git.apinb.com/bsm-sdk/sample/pb"
)
type RegisterServer struct {
pb.UnimplementedRegisterServer
}
func NewRegisterServer() *RegisterServer {
return &RegisterServer{}
}
// 帐号密码注册
func (s *RegisterServer) Pwd(ctx context.Context, in *pb.RegisterRequest) (*pb.RegisterReply, error) {
return register.Pwd(ctx, in)
}
// 手机验证码注册
func (s *RegisterServer) Code(ctx context.Context, in *pb.RegisterRequest) (*pb.RegisterReply, error) {
return register.Code(ctx, in)
}

676
pb/account.pb.go Normal file
View File

@ -0,0 +1,676 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.8
// protoc (unknown)
// source: account.proto
package sample
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// 获取会员的完整信息
type GetFullReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` // 唯一标识
Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` // 帐号
Phone string `protobuf:"bytes,3,opt,name=phone,proto3" json:"phone,omitempty"` // 手机号码 必填
Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` // 验证码
Rights string `protobuf:"bytes,5,opt,name=rights,proto3" json:"rights,omitempty"` // 权限
Nickname string `protobuf:"bytes,6,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称
Avatar string `protobuf:"bytes,7,opt,name=avatar,proto3" json:"avatar,omitempty"` // 头像
Birthday string `protobuf:"bytes,8,opt,name=birthday,proto3" json:"birthday,omitempty"` // 生日
Sex int32 `protobuf:"varint,9,opt,name=sex,proto3" json:"sex,omitempty"` // 性别1为男性2为女性
Country int32 `protobuf:"varint,10,opt,name=country,proto3" json:"country,omitempty"` // 国家
Province int32 `protobuf:"varint,11,opt,name=province,proto3" json:"province,omitempty"` // 省
City int32 `protobuf:"varint,12,opt,name=city,proto3" json:"city,omitempty"` // 市
Area int32 `protobuf:"varint,13,opt,name=area,proto3" json:"area,omitempty"` // 区
Sign string `protobuf:"bytes,14,opt,name=sign,proto3" json:"sign,omitempty"` // 签名
Cover string `protobuf:"bytes,15,opt,name=cover,proto3" json:"cover,omitempty"` // 背景&封面
Score int32 `protobuf:"varint,16,opt,name=score,proto3" json:"score,omitempty"` // 积分
Level int32 `protobuf:"varint,17,opt,name=level,proto3" json:"level,omitempty"` // 等级
Verify map[string]bool `protobuf:"bytes,18,rep,name=verify,proto3" json:"verify,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 数据
Tags []*TagItem `protobuf:"bytes,19,rep,name=tags,proto3" json:"tags,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *GetFullReply) Reset() {
*x = GetFullReply{}
mi := &file_account_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *GetFullReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetFullReply) ProtoMessage() {}
func (x *GetFullReply) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetFullReply.ProtoReflect.Descriptor instead.
func (*GetFullReply) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{0}
}
func (x *GetFullReply) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
func (x *GetFullReply) GetAccount() string {
if x != nil {
return x.Account
}
return ""
}
func (x *GetFullReply) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
func (x *GetFullReply) GetEmail() string {
if x != nil {
return x.Email
}
return ""
}
func (x *GetFullReply) GetRights() string {
if x != nil {
return x.Rights
}
return ""
}
func (x *GetFullReply) GetNickname() string {
if x != nil {
return x.Nickname
}
return ""
}
func (x *GetFullReply) GetAvatar() string {
if x != nil {
return x.Avatar
}
return ""
}
func (x *GetFullReply) GetBirthday() string {
if x != nil {
return x.Birthday
}
return ""
}
func (x *GetFullReply) GetSex() int32 {
if x != nil {
return x.Sex
}
return 0
}
func (x *GetFullReply) GetCountry() int32 {
if x != nil {
return x.Country
}
return 0
}
func (x *GetFullReply) GetProvince() int32 {
if x != nil {
return x.Province
}
return 0
}
func (x *GetFullReply) GetCity() int32 {
if x != nil {
return x.City
}
return 0
}
func (x *GetFullReply) GetArea() int32 {
if x != nil {
return x.Area
}
return 0
}
func (x *GetFullReply) GetSign() string {
if x != nil {
return x.Sign
}
return ""
}
func (x *GetFullReply) GetCover() string {
if x != nil {
return x.Cover
}
return ""
}
func (x *GetFullReply) GetScore() int32 {
if x != nil {
return x.Score
}
return 0
}
func (x *GetFullReply) GetLevel() int32 {
if x != nil {
return x.Level
}
return 0
}
func (x *GetFullReply) GetVerify() map[string]bool {
if x != nil {
return x.Verify
}
return nil
}
func (x *GetFullReply) GetTags() []*TagItem {
if x != nil {
return x.Tags
}
return nil
}
type TagItem struct {
state protoimpl.MessageState `protogen:"open.v1"`
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Icon string `protobuf:"bytes,2,opt,name=icon,proto3" json:"icon,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *TagItem) Reset() {
*x = TagItem{}
mi := &file_account_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *TagItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TagItem) ProtoMessage() {}
func (x *TagItem) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use TagItem.ProtoReflect.Descriptor instead.
func (*TagItem) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{1}
}
func (x *TagItem) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *TagItem) GetIcon() string {
if x != nil {
return x.Icon
}
return ""
}
type SetDataRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Nickname string `protobuf:"bytes,1,opt,name=nickname,proto3" json:"nickname,omitempty"` //昵称
Avatar string `protobuf:"bytes,2,opt,name=avatar,proto3" json:"avatar,omitempty"` //头像
Birthday string `protobuf:"bytes,3,opt,name=birthday,proto3" json:"birthday,omitempty"` //生日
Sex int32 `protobuf:"varint,4,opt,name=sex,proto3" json:"sex,omitempty"` //性别1为男性2为女性
Country int32 `protobuf:"varint,5,opt,name=country,proto3" json:"country,omitempty"` // 国家
Province int32 `protobuf:"varint,6,opt,name=province,proto3" json:"province,omitempty"` //省
City int32 `protobuf:"varint,7,opt,name=city,proto3" json:"city,omitempty"` //市
Area int32 `protobuf:"varint,8,opt,name=area,proto3" json:"area,omitempty"` //区
Sign string `protobuf:"bytes,9,opt,name=sign,proto3" json:"sign,omitempty"` //签名
Cover string `protobuf:"bytes,10,opt,name=cover,proto3" json:"cover,omitempty"` // 背景&封面
Score int32 `protobuf:"varint,11,opt,name=score,proto3" json:"score,omitempty"` // 积分
Level int32 `protobuf:"varint,12,opt,name=level,proto3" json:"level,omitempty"` // 等级
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SetDataRequest) Reset() {
*x = SetDataRequest{}
mi := &file_account_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SetDataRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SetDataRequest) ProtoMessage() {}
func (x *SetDataRequest) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SetDataRequest.ProtoReflect.Descriptor instead.
func (*SetDataRequest) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{2}
}
func (x *SetDataRequest) GetNickname() string {
if x != nil {
return x.Nickname
}
return ""
}
func (x *SetDataRequest) GetAvatar() string {
if x != nil {
return x.Avatar
}
return ""
}
func (x *SetDataRequest) GetBirthday() string {
if x != nil {
return x.Birthday
}
return ""
}
func (x *SetDataRequest) GetSex() int32 {
if x != nil {
return x.Sex
}
return 0
}
func (x *SetDataRequest) GetCountry() int32 {
if x != nil {
return x.Country
}
return 0
}
func (x *SetDataRequest) GetProvince() int32 {
if x != nil {
return x.Province
}
return 0
}
func (x *SetDataRequest) GetCity() int32 {
if x != nil {
return x.City
}
return 0
}
func (x *SetDataRequest) GetArea() int32 {
if x != nil {
return x.Area
}
return 0
}
func (x *SetDataRequest) GetSign() string {
if x != nil {
return x.Sign
}
return ""
}
func (x *SetDataRequest) GetCover() string {
if x != nil {
return x.Cover
}
return ""
}
func (x *SetDataRequest) GetScore() int32 {
if x != nil {
return x.Score
}
return 0
}
func (x *SetDataRequest) GetLevel() int32 {
if x != nil {
return x.Level
}
return 0
}
type SetPasswordRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
OldPassword string `protobuf:"bytes,3,opt,name=old_password,json=oldPassword,proto3" json:"old_password,omitempty"` // 旧密码
NewPassword string `protobuf:"bytes,4,opt,name=new_password,json=newPassword,proto3" json:"new_password,omitempty"` // 新密码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SetPasswordRequest) Reset() {
*x = SetPasswordRequest{}
mi := &file_account_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SetPasswordRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SetPasswordRequest) ProtoMessage() {}
func (x *SetPasswordRequest) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SetPasswordRequest.ProtoReflect.Descriptor instead.
func (*SetPasswordRequest) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{3}
}
func (x *SetPasswordRequest) GetOldPassword() string {
if x != nil {
return x.OldPassword
}
return ""
}
func (x *SetPasswordRequest) GetNewPassword() string {
if x != nil {
return x.NewPassword
}
return ""
}
type StatisticsRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Field []string `protobuf:"bytes,1,rep,name=field,proto3" json:"field,omitempty"` //要获取的统计数据字段。
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatisticsRequest) Reset() {
*x = StatisticsRequest{}
mi := &file_account_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatisticsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatisticsRequest) ProtoMessage() {}
func (x *StatisticsRequest) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StatisticsRequest.ProtoReflect.Descriptor instead.
func (*StatisticsRequest) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{4}
}
func (x *StatisticsRequest) GetField() []string {
if x != nil {
return x.Field
}
return nil
}
type StatisticsReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Data map[string]int64 `protobuf:"bytes,1,rep,name=Data,proto3" json:"Data,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` //数据以Map格式输出
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatisticsReply) Reset() {
*x = StatisticsReply{}
mi := &file_account_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatisticsReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatisticsReply) ProtoMessage() {}
func (x *StatisticsReply) ProtoReflect() protoreflect.Message {
mi := &file_account_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StatisticsReply.ProtoReflect.Descriptor instead.
func (*StatisticsReply) Descriptor() ([]byte, []int) {
return file_account_proto_rawDescGZIP(), []int{5}
}
func (x *StatisticsReply) GetData() map[string]int64 {
if x != nil {
return x.Data
}
return nil
}
var File_account_proto protoreflect.FileDescriptor
const file_account_proto_rawDesc = "" +
"\n" +
"\raccount.proto\x12\bsample\x1a\fblocks.proto\"\xbc\x04\n" +
"\fGetFullReply\x12\x1a\n" +
"\bidentity\x18\x01 \x01(\tR\bidentity\x12\x18\n" +
"\aaccount\x18\x02 \x01(\tR\aaccount\x12\x14\n" +
"\x05phone\x18\x03 \x01(\tR\x05phone\x12\x14\n" +
"\x05email\x18\x04 \x01(\tR\x05email\x12\x16\n" +
"\x06rights\x18\x05 \x01(\tR\x06rights\x12\x1a\n" +
"\bnickname\x18\x06 \x01(\tR\bnickname\x12\x16\n" +
"\x06avatar\x18\a \x01(\tR\x06avatar\x12\x1a\n" +
"\bbirthday\x18\b \x01(\tR\bbirthday\x12\x10\n" +
"\x03sex\x18\t \x01(\x05R\x03sex\x12\x18\n" +
"\acountry\x18\n" +
" \x01(\x05R\acountry\x12\x1a\n" +
"\bprovince\x18\v \x01(\x05R\bprovince\x12\x12\n" +
"\x04city\x18\f \x01(\x05R\x04city\x12\x12\n" +
"\x04area\x18\r \x01(\x05R\x04area\x12\x12\n" +
"\x04sign\x18\x0e \x01(\tR\x04sign\x12\x14\n" +
"\x05cover\x18\x0f \x01(\tR\x05cover\x12\x14\n" +
"\x05score\x18\x10 \x01(\x05R\x05score\x12\x14\n" +
"\x05level\x18\x11 \x01(\x05R\x05level\x12:\n" +
"\x06verify\x18\x12 \x03(\v2\".sample.GetFullReply.VerifyEntryR\x06verify\x12%\n" +
"\x04tags\x18\x13 \x03(\v2\x11.sample.TagItemR\x04tags\x1a9\n" +
"\vVerifyEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\bR\x05value:\x028\x01\"1\n" +
"\aTagItem\x12\x12\n" +
"\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" +
"\x04icon\x18\x02 \x01(\tR\x04icon\"\xa6\x02\n" +
"\x0eSetDataRequest\x12\x1a\n" +
"\bnickname\x18\x01 \x01(\tR\bnickname\x12\x16\n" +
"\x06avatar\x18\x02 \x01(\tR\x06avatar\x12\x1a\n" +
"\bbirthday\x18\x03 \x01(\tR\bbirthday\x12\x10\n" +
"\x03sex\x18\x04 \x01(\x05R\x03sex\x12\x18\n" +
"\acountry\x18\x05 \x01(\x05R\acountry\x12\x1a\n" +
"\bprovince\x18\x06 \x01(\x05R\bprovince\x12\x12\n" +
"\x04city\x18\a \x01(\x05R\x04city\x12\x12\n" +
"\x04area\x18\b \x01(\x05R\x04area\x12\x12\n" +
"\x04sign\x18\t \x01(\tR\x04sign\x12\x14\n" +
"\x05cover\x18\n" +
" \x01(\tR\x05cover\x12\x14\n" +
"\x05score\x18\v \x01(\x05R\x05score\x12\x14\n" +
"\x05level\x18\f \x01(\x05R\x05level\"Z\n" +
"\x12SetPasswordRequest\x12!\n" +
"\fold_password\x18\x03 \x01(\tR\voldPassword\x12!\n" +
"\fnew_password\x18\x04 \x01(\tR\vnewPassword\")\n" +
"\x11StatisticsRequest\x12\x14\n" +
"\x05field\x18\x01 \x03(\tR\x05field\"\x83\x01\n" +
"\x0fStatisticsReply\x127\n" +
"\x04Data\x18\x01 \x03(\v2#.sample.StatisticsReply.DataEntryR\x04Data\x1a7\n" +
"\tDataEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\x03R\x05value:\x028\x012\xfe\x02\n" +
"\aAccount\x120\n" +
"\x03Get\x12\x0f.sample.Empty\x1a\x16.sample.GetFullReply\"\x00\x12<\n" +
"\aSetData\x12\x18.sample.SetDataRequest\x1a\x15.sample.StatusReply\"\x00\x12D\n" +
"\vSetPassword\x12\x1c.sample.SetPasswordRequest\x1a\x15.sample.StatusReply\"\x00\x127\n" +
"\tTagCreate\x12\x11.sample.TagItem\x1a\x15.sample.StatusReply\"\x00\x12<\n" +
"\tTagRemove\x12\x16.sample.IdentRequest\x1a\x15.sample.StatusReply\"\x00\x12F\n" +
"\n" +
"Statistics\x12\x1b.sample.StatisticsRequest\x1a\x19.sample.StatisticsReply\"\x00B\fZ\n" +
".;sampleb\x06proto3"
var (
file_account_proto_rawDescOnce sync.Once
file_account_proto_rawDescData []byte
)
func file_account_proto_rawDescGZIP() []byte {
file_account_proto_rawDescOnce.Do(func() {
file_account_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_account_proto_rawDesc), len(file_account_proto_rawDesc)))
})
return file_account_proto_rawDescData
}
var file_account_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_account_proto_goTypes = []any{
(*GetFullReply)(nil), // 0: sample.GetFullReply
(*TagItem)(nil), // 1: sample.TagItem
(*SetDataRequest)(nil), // 2: sample.SetDataRequest
(*SetPasswordRequest)(nil), // 3: sample.SetPasswordRequest
(*StatisticsRequest)(nil), // 4: sample.StatisticsRequest
(*StatisticsReply)(nil), // 5: sample.StatisticsReply
nil, // 6: sample.GetFullReply.VerifyEntry
nil, // 7: sample.StatisticsReply.DataEntry
(*Empty)(nil), // 8: sample.Empty
(*IdentRequest)(nil), // 9: sample.IdentRequest
(*StatusReply)(nil), // 10: sample.StatusReply
}
var file_account_proto_depIdxs = []int32{
6, // 0: sample.GetFullReply.verify:type_name -> sample.GetFullReply.VerifyEntry
1, // 1: sample.GetFullReply.tags:type_name -> sample.TagItem
7, // 2: sample.StatisticsReply.Data:type_name -> sample.StatisticsReply.DataEntry
8, // 3: sample.Account.Get:input_type -> sample.Empty
2, // 4: sample.Account.SetData:input_type -> sample.SetDataRequest
3, // 5: sample.Account.SetPassword:input_type -> sample.SetPasswordRequest
1, // 6: sample.Account.TagCreate:input_type -> sample.TagItem
9, // 7: sample.Account.TagRemove:input_type -> sample.IdentRequest
4, // 8: sample.Account.Statistics:input_type -> sample.StatisticsRequest
0, // 9: sample.Account.Get:output_type -> sample.GetFullReply
10, // 10: sample.Account.SetData:output_type -> sample.StatusReply
10, // 11: sample.Account.SetPassword:output_type -> sample.StatusReply
10, // 12: sample.Account.TagCreate:output_type -> sample.StatusReply
10, // 13: sample.Account.TagRemove:output_type -> sample.StatusReply
5, // 14: sample.Account.Statistics:output_type -> sample.StatisticsReply
9, // [9:15] is the sub-list for method output_type
3, // [3:9] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
}
func init() { file_account_proto_init() }
func file_account_proto_init() {
if File_account_proto != nil {
return
}
file_blocks_proto_init()
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_account_proto_rawDesc), len(file_account_proto_rawDesc)),
NumEnums: 0,
NumMessages: 8,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_account_proto_goTypes,
DependencyIndexes: file_account_proto_depIdxs,
MessageInfos: file_account_proto_msgTypes,
}.Build()
File_account_proto = out.File
file_account_proto_goTypes = nil
file_account_proto_depIdxs = nil
}

487
pb/account.pb.gw.go Normal file
View File

@ -0,0 +1,487 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: account.proto
/*
Package sample is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package sample
import (
"context"
"errors"
"io"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
)
// Suppress "imported and not used" errors
var (
_ codes.Code
_ io.Reader
_ status.Status
_ = errors.New
_ = runtime.String
_ = utilities.NewDoubleArray
_ = metadata.Join
)
func request_Account_Get_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq Empty
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Get(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_Get_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq Empty
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Get(ctx, &protoReq)
return msg, metadata, err
}
func request_Account_SetData_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq SetDataRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.SetData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_SetData_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq SetDataRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SetData(ctx, &protoReq)
return msg, metadata, err
}
func request_Account_SetPassword_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq SetPasswordRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.SetPassword(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_SetPassword_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq SetPasswordRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SetPassword(ctx, &protoReq)
return msg, metadata, err
}
func request_Account_TagCreate_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq TagItem
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.TagCreate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_TagCreate_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq TagItem
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.TagCreate(ctx, &protoReq)
return msg, metadata, err
}
func request_Account_TagRemove_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq IdentRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.TagRemove(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_TagRemove_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq IdentRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.TagRemove(ctx, &protoReq)
return msg, metadata, err
}
func request_Account_Statistics_0(ctx context.Context, marshaler runtime.Marshaler, client AccountClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq StatisticsRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Statistics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Account_Statistics_0(ctx context.Context, marshaler runtime.Marshaler, server AccountServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq StatisticsRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Statistics(ctx, &protoReq)
return msg, metadata, err
}
// RegisterAccountHandlerServer registers the http handlers for service Account to "mux".
// UnaryRPC :call AccountServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAccountHandlerFromEndpoint instead.
// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call.
func RegisterAccountHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AccountServer) error {
mux.Handle(http.MethodPost, pattern_Account_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/Get", runtime.WithHTTPPathPattern("/sample.Account/Get"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_Get_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_SetData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/SetData", runtime.WithHTTPPathPattern("/sample.Account/SetData"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_SetData_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_SetData_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_SetPassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/SetPassword", runtime.WithHTTPPathPattern("/sample.Account/SetPassword"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_SetPassword_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_SetPassword_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_TagCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/TagCreate", runtime.WithHTTPPathPattern("/sample.Account/TagCreate"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_TagCreate_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_TagCreate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_TagRemove_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/TagRemove", runtime.WithHTTPPathPattern("/sample.Account/TagRemove"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_TagRemove_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_TagRemove_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_Statistics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Account/Statistics", runtime.WithHTTPPathPattern("/sample.Account/Statistics"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Account_Statistics_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_Statistics_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterAccountHandlerFromEndpoint is same as RegisterAccountHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterAccountHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.NewClient(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterAccountHandler(ctx, mux, conn)
}
// RegisterAccountHandler registers the http handlers for service Account to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterAccountHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterAccountHandlerClient(ctx, mux, NewAccountClient(conn))
}
// RegisterAccountHandlerClient registers the http handlers for service Account
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AccountClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AccountClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "AccountClient" to call the correct interceptors. This client ignores the HTTP middlewares.
func RegisterAccountHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AccountClient) error {
mux.Handle(http.MethodPost, pattern_Account_Get_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/Get", runtime.WithHTTPPathPattern("/sample.Account/Get"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_Get_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_Get_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_SetData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/SetData", runtime.WithHTTPPathPattern("/sample.Account/SetData"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_SetData_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_SetData_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_SetPassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/SetPassword", runtime.WithHTTPPathPattern("/sample.Account/SetPassword"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_SetPassword_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_SetPassword_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_TagCreate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/TagCreate", runtime.WithHTTPPathPattern("/sample.Account/TagCreate"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_TagCreate_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_TagCreate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_TagRemove_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/TagRemove", runtime.WithHTTPPathPattern("/sample.Account/TagRemove"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_TagRemove_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_TagRemove_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Account_Statistics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Account/Statistics", runtime.WithHTTPPathPattern("/sample.Account/Statistics"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Account_Statistics_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Account_Statistics_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Account_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "Get"}, ""))
pattern_Account_SetData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "SetData"}, ""))
pattern_Account_SetPassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "SetPassword"}, ""))
pattern_Account_TagCreate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "TagCreate"}, ""))
pattern_Account_TagRemove_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "TagRemove"}, ""))
pattern_Account_Statistics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Account", "Statistics"}, ""))
)
var (
forward_Account_Get_0 = runtime.ForwardResponseMessage
forward_Account_SetData_0 = runtime.ForwardResponseMessage
forward_Account_SetPassword_0 = runtime.ForwardResponseMessage
forward_Account_TagCreate_0 = runtime.ForwardResponseMessage
forward_Account_TagRemove_0 = runtime.ForwardResponseMessage
forward_Account_Statistics_0 = runtime.ForwardResponseMessage
)

328
pb/account_grpc.pb.go Normal file
View File

@ -0,0 +1,328 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc (unknown)
// source: account.proto
package sample
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
Account_Get_FullMethodName = "/sample.Account/Get"
Account_SetData_FullMethodName = "/sample.Account/SetData"
Account_SetPassword_FullMethodName = "/sample.Account/SetPassword"
Account_TagCreate_FullMethodName = "/sample.Account/TagCreate"
Account_TagRemove_FullMethodName = "/sample.Account/TagRemove"
Account_Statistics_FullMethodName = "/sample.Account/Statistics"
)
// AccountClient is the client API for Account service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
//
// sample(会员通行证)模块-数据
type AccountClient interface {
// 通过会员所有信息
Get(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFullReply, error)
// 更新会员的信息数据,字段值为空或是0将不更新此数据
SetData(ctx context.Context, in *SetDataRequest, opts ...grpc.CallOption) (*StatusReply, error)
// 更新会员的密码
SetPassword(ctx context.Context, in *SetPasswordRequest, opts ...grpc.CallOption) (*StatusReply, error)
// 新增标签
TagCreate(ctx context.Context, in *TagItem, opts ...grpc.CallOption) (*StatusReply, error)
// 删除标签
TagRemove(ctx context.Context, in *IdentRequest, opts ...grpc.CallOption) (*StatusReply, error)
// 获取会员的相关统计数据
Statistics(ctx context.Context, in *StatisticsRequest, opts ...grpc.CallOption) (*StatisticsReply, error)
}
type accountClient struct {
cc grpc.ClientConnInterface
}
func NewAccountClient(cc grpc.ClientConnInterface) AccountClient {
return &accountClient{cc}
}
func (c *accountClient) Get(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GetFullReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetFullReply)
err := c.cc.Invoke(ctx, Account_Get_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *accountClient) SetData(ctx context.Context, in *SetDataRequest, opts ...grpc.CallOption) (*StatusReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatusReply)
err := c.cc.Invoke(ctx, Account_SetData_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *accountClient) SetPassword(ctx context.Context, in *SetPasswordRequest, opts ...grpc.CallOption) (*StatusReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatusReply)
err := c.cc.Invoke(ctx, Account_SetPassword_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *accountClient) TagCreate(ctx context.Context, in *TagItem, opts ...grpc.CallOption) (*StatusReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatusReply)
err := c.cc.Invoke(ctx, Account_TagCreate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *accountClient) TagRemove(ctx context.Context, in *IdentRequest, opts ...grpc.CallOption) (*StatusReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatusReply)
err := c.cc.Invoke(ctx, Account_TagRemove_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *accountClient) Statistics(ctx context.Context, in *StatisticsRequest, opts ...grpc.CallOption) (*StatisticsReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatisticsReply)
err := c.cc.Invoke(ctx, Account_Statistics_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// AccountServer is the server API for Account service.
// All implementations must embed UnimplementedAccountServer
// for forward compatibility.
//
// sample(会员通行证)模块-数据
type AccountServer interface {
// 通过会员所有信息
Get(context.Context, *Empty) (*GetFullReply, error)
// 更新会员的信息数据,字段值为空或是0将不更新此数据
SetData(context.Context, *SetDataRequest) (*StatusReply, error)
// 更新会员的密码
SetPassword(context.Context, *SetPasswordRequest) (*StatusReply, error)
// 新增标签
TagCreate(context.Context, *TagItem) (*StatusReply, error)
// 删除标签
TagRemove(context.Context, *IdentRequest) (*StatusReply, error)
// 获取会员的相关统计数据
Statistics(context.Context, *StatisticsRequest) (*StatisticsReply, error)
mustEmbedUnimplementedAccountServer()
}
// UnimplementedAccountServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedAccountServer struct{}
func (UnimplementedAccountServer) Get(context.Context, *Empty) (*GetFullReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
}
func (UnimplementedAccountServer) SetData(context.Context, *SetDataRequest) (*StatusReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetData not implemented")
}
func (UnimplementedAccountServer) SetPassword(context.Context, *SetPasswordRequest) (*StatusReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetPassword not implemented")
}
func (UnimplementedAccountServer) TagCreate(context.Context, *TagItem) (*StatusReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method TagCreate not implemented")
}
func (UnimplementedAccountServer) TagRemove(context.Context, *IdentRequest) (*StatusReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method TagRemove not implemented")
}
func (UnimplementedAccountServer) Statistics(context.Context, *StatisticsRequest) (*StatisticsReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Statistics not implemented")
}
func (UnimplementedAccountServer) mustEmbedUnimplementedAccountServer() {}
func (UnimplementedAccountServer) testEmbeddedByValue() {}
// UnsafeAccountServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to AccountServer will
// result in compilation errors.
type UnsafeAccountServer interface {
mustEmbedUnimplementedAccountServer()
}
func RegisterAccountServer(s grpc.ServiceRegistrar, srv AccountServer) {
// If the following call pancis, it indicates UnimplementedAccountServer 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(&Account_ServiceDesc, srv)
}
func _Account_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).Get(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_Get_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).Get(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _Account_SetData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetDataRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).SetData(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_SetData_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).SetData(ctx, req.(*SetDataRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Account_SetPassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SetPasswordRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).SetPassword(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_SetPassword_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).SetPassword(ctx, req.(*SetPasswordRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Account_TagCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(TagItem)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).TagCreate(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_TagCreate_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).TagCreate(ctx, req.(*TagItem))
}
return interceptor(ctx, in, info, handler)
}
func _Account_TagRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(IdentRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).TagRemove(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_TagRemove_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).TagRemove(ctx, req.(*IdentRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Account_Statistics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StatisticsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AccountServer).Statistics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Account_Statistics_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AccountServer).Statistics(ctx, req.(*StatisticsRequest))
}
return interceptor(ctx, in, info, handler)
}
// Account_ServiceDesc is the grpc.ServiceDesc for Account service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Account_ServiceDesc = grpc.ServiceDesc{
ServiceName: "sample.Account",
HandlerType: (*AccountServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Get",
Handler: _Account_Get_Handler,
},
{
MethodName: "SetData",
Handler: _Account_SetData_Handler,
},
{
MethodName: "SetPassword",
Handler: _Account_SetPassword_Handler,
},
{
MethodName: "TagCreate",
Handler: _Account_TagCreate_Handler,
},
{
MethodName: "TagRemove",
Handler: _Account_TagRemove_Handler,
},
{
MethodName: "Statistics",
Handler: _Account_Statistics_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "account.proto",
}

391
pb/blocks.pb.go Normal file
View File

@ -0,0 +1,391 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.8
// protoc (unknown)
// source: blocks.proto
package sample
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type FetchRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
PageNo int64 `protobuf:"varint,1,opt,name=page_no,json=pageNo,proto3" json:"page_no,omitempty"` // 页数
PageSize int64 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // 每页记录数
Params map[string]string `protobuf:"bytes,3,rep,name=params,proto3" json:"params,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // 条件参数,key=val,eg key:category_id=?,vlaue=11
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *FetchRequest) Reset() {
*x = FetchRequest{}
mi := &file_blocks_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *FetchRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FetchRequest) ProtoMessage() {}
func (x *FetchRequest) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FetchRequest.ProtoReflect.Descriptor instead.
func (*FetchRequest) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{0}
}
func (x *FetchRequest) GetPageNo() int64 {
if x != nil {
return x.PageNo
}
return 0
}
func (x *FetchRequest) GetPageSize() int64 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *FetchRequest) GetParams() map[string]string {
if x != nil {
return x.Params
}
return nil
}
type IdentRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 唯一ID
Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` // 唯一码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *IdentRequest) Reset() {
*x = IdentRequest{}
mi := &file_blocks_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *IdentRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IdentRequest) ProtoMessage() {}
func (x *IdentRequest) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IdentRequest.ProtoReflect.Descriptor instead.
func (*IdentRequest) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{1}
}
func (x *IdentRequest) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *IdentRequest) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
type VersionRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Version int64 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` // 时序版本号
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VersionRequest) Reset() {
*x = VersionRequest{}
mi := &file_blocks_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VersionRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VersionRequest) ProtoMessage() {}
func (x *VersionRequest) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VersionRequest.ProtoReflect.Descriptor instead.
func (*VersionRequest) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{2}
}
func (x *VersionRequest) GetVersion() int64 {
if x != nil {
return x.Version
}
return 0
}
type SearchRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Keyword string `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"` //关键词
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *SearchRequest) Reset() {
*x = SearchRequest{}
mi := &file_blocks_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *SearchRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SearchRequest) ProtoMessage() {}
func (x *SearchRequest) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[3]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SearchRequest.ProtoReflect.Descriptor instead.
func (*SearchRequest) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{3}
}
func (x *SearchRequest) GetKeyword() string {
if x != nil {
return x.Keyword
}
return ""
}
type StatusReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // 数据
Timeseq int64 `protobuf:"varint,2,opt,name=timeseq,proto3" json:"timeseq,omitempty"` // 响应时间序列
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *StatusReply) Reset() {
*x = StatusReply{}
mi := &file_blocks_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *StatusReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*StatusReply) ProtoMessage() {}
func (x *StatusReply) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[4]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use StatusReply.ProtoReflect.Descriptor instead.
func (*StatusReply) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{4}
}
func (x *StatusReply) GetData() string {
if x != nil {
return x.Data
}
return ""
}
func (x *StatusReply) GetTimeseq() int64 {
if x != nil {
return x.Timeseq
}
return 0
}
type Empty struct {
state protoimpl.MessageState `protogen:"open.v1"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *Empty) Reset() {
*x = Empty{}
mi := &file_blocks_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *Empty) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Empty) ProtoMessage() {}
func (x *Empty) ProtoReflect() protoreflect.Message {
mi := &file_blocks_proto_msgTypes[5]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Empty.ProtoReflect.Descriptor instead.
func (*Empty) Descriptor() ([]byte, []int) {
return file_blocks_proto_rawDescGZIP(), []int{5}
}
var File_blocks_proto protoreflect.FileDescriptor
const file_blocks_proto_rawDesc = "" +
"\n" +
"\fblocks.proto\x12\bsample\"\xbb\x01\n" +
"\fFetchRequest\x12\x17\n" +
"\apage_no\x18\x01 \x01(\x03R\x06pageNo\x12\x1b\n" +
"\tpage_size\x18\x02 \x01(\x03R\bpageSize\x12:\n" +
"\x06params\x18\x03 \x03(\v2\".sample.FetchRequest.ParamsEntryR\x06params\x1a9\n" +
"\vParamsEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\":\n" +
"\fIdentRequest\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
"\bidentity\x18\x02 \x01(\tR\bidentity\"*\n" +
"\x0eVersionRequest\x12\x18\n" +
"\aversion\x18\x01 \x01(\x03R\aversion\")\n" +
"\rSearchRequest\x12\x18\n" +
"\akeyword\x18\x01 \x01(\tR\akeyword\";\n" +
"\vStatusReply\x12\x12\n" +
"\x04data\x18\x01 \x01(\tR\x04data\x12\x18\n" +
"\atimeseq\x18\x02 \x01(\x03R\atimeseq\"\a\n" +
"\x05EmptyB\fZ\n" +
".;sampleb\x06proto3"
var (
file_blocks_proto_rawDescOnce sync.Once
file_blocks_proto_rawDescData []byte
)
func file_blocks_proto_rawDescGZIP() []byte {
file_blocks_proto_rawDescOnce.Do(func() {
file_blocks_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_blocks_proto_rawDesc), len(file_blocks_proto_rawDesc)))
})
return file_blocks_proto_rawDescData
}
var file_blocks_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_blocks_proto_goTypes = []any{
(*FetchRequest)(nil), // 0: sample.FetchRequest
(*IdentRequest)(nil), // 1: sample.IdentRequest
(*VersionRequest)(nil), // 2: sample.VersionRequest
(*SearchRequest)(nil), // 3: sample.SearchRequest
(*StatusReply)(nil), // 4: sample.StatusReply
(*Empty)(nil), // 5: sample.Empty
nil, // 6: sample.FetchRequest.ParamsEntry
}
var file_blocks_proto_depIdxs = []int32{
6, // 0: sample.FetchRequest.params:type_name -> sample.FetchRequest.ParamsEntry
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_blocks_proto_init() }
func file_blocks_proto_init() {
if File_blocks_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_blocks_proto_rawDesc), len(file_blocks_proto_rawDesc)),
NumEnums: 0,
NumMessages: 7,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_blocks_proto_goTypes,
DependencyIndexes: file_blocks_proto_depIdxs,
MessageInfos: file_blocks_proto_msgTypes,
}.Build()
File_blocks_proto = out.File
file_blocks_proto_goTypes = nil
file_blocks_proto_depIdxs = nil
}

277
pb/forget.pb.go Normal file
View File

@ -0,0 +1,277 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.8
// protoc (unknown)
// source: forget.proto
package sample
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type VerifyRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Phone string `protobuf:"bytes,1,opt,name=phone,proto3" json:"phone,omitempty"` //手机号
Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 验证码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *VerifyRequest) Reset() {
*x = VerifyRequest{}
mi := &file_forget_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *VerifyRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*VerifyRequest) ProtoMessage() {}
func (x *VerifyRequest) ProtoReflect() protoreflect.Message {
mi := &file_forget_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use VerifyRequest.ProtoReflect.Descriptor instead.
func (*VerifyRequest) Descriptor() ([]byte, []int) {
return file_forget_proto_rawDescGZIP(), []int{0}
}
func (x *VerifyRequest) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
func (x *VerifyRequest) GetCode() string {
if x != nil {
return x.Code
}
return ""
}
type ForgetResetRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` //唯一码
Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` // 密码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ForgetResetRequest) Reset() {
*x = ForgetResetRequest{}
mi := &file_forget_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ForgetResetRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ForgetResetRequest) ProtoMessage() {}
func (x *ForgetResetRequest) ProtoReflect() protoreflect.Message {
mi := &file_forget_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ForgetResetRequest.ProtoReflect.Descriptor instead.
func (*ForgetResetRequest) Descriptor() ([]byte, []int) {
return file_forget_proto_rawDescGZIP(), []int{1}
}
func (x *ForgetResetRequest) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
func (x *ForgetResetRequest) GetPassword() string {
if x != nil {
return x.Password
}
return ""
}
type ForgetReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` //用户唯一码
DataBind string `protobuf:"bytes,2,opt,name=data_bind,json=dataBind,proto3" json:"data_bind,omitempty"` // 数据绑定的相关说明,PASS通过NOPHONE没有绑定手机号NOPWD没有设置密码NOBIND没有手机号同时没有密码
Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` //用户凭证
Extend map[string]string `protobuf:"bytes,4,rep,name=extend,proto3" json:"extend,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //扩展字段
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ForgetReply) Reset() {
*x = ForgetReply{}
mi := &file_forget_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ForgetReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ForgetReply) ProtoMessage() {}
func (x *ForgetReply) ProtoReflect() protoreflect.Message {
mi := &file_forget_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ForgetReply.ProtoReflect.Descriptor instead.
func (*ForgetReply) Descriptor() ([]byte, []int) {
return file_forget_proto_rawDescGZIP(), []int{2}
}
func (x *ForgetReply) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
func (x *ForgetReply) GetDataBind() string {
if x != nil {
return x.DataBind
}
return ""
}
func (x *ForgetReply) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
func (x *ForgetReply) GetExtend() map[string]string {
if x != nil {
return x.Extend
}
return nil
}
var File_forget_proto protoreflect.FileDescriptor
const file_forget_proto_rawDesc = "" +
"\n" +
"\fforget.proto\x12\bsample\x1a\fblocks.proto\"9\n" +
"\rVerifyRequest\x12\x14\n" +
"\x05phone\x18\x01 \x01(\tR\x05phone\x12\x12\n" +
"\x04code\x18\x02 \x01(\tR\x04code\"L\n" +
"\x12ForgetResetRequest\x12\x1a\n" +
"\bidentity\x18\x01 \x01(\tR\bidentity\x12\x1a\n" +
"\bpassword\x18\x02 \x01(\tR\bpassword\"\xd2\x01\n" +
"\vForgetReply\x12\x1a\n" +
"\bidentity\x18\x01 \x01(\tR\bidentity\x12\x1b\n" +
"\tdata_bind\x18\x02 \x01(\tR\bdataBind\x12\x14\n" +
"\x05token\x18\x03 \x01(\tR\x05token\x129\n" +
"\x06extend\x18\x04 \x03(\v2!.sample.ForgetReply.ExtendEntryR\x06extend\x1a9\n" +
"\vExtendEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x012\x84\x01\n" +
"\x06Forget\x12:\n" +
"\x06Verify\x12\x17.sample.VerifyRequest\x1a\x15.sample.StatusReply\"\x00\x12>\n" +
"\x05Reset\x12\x1c.sample.ForgetResetRequest\x1a\x15.sample.ForgetReply\"\x00B\fZ\n" +
".;sampleb\x06proto3"
var (
file_forget_proto_rawDescOnce sync.Once
file_forget_proto_rawDescData []byte
)
func file_forget_proto_rawDescGZIP() []byte {
file_forget_proto_rawDescOnce.Do(func() {
file_forget_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_forget_proto_rawDesc), len(file_forget_proto_rawDesc)))
})
return file_forget_proto_rawDescData
}
var file_forget_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_forget_proto_goTypes = []any{
(*VerifyRequest)(nil), // 0: sample.VerifyRequest
(*ForgetResetRequest)(nil), // 1: sample.ForgetResetRequest
(*ForgetReply)(nil), // 2: sample.ForgetReply
nil, // 3: sample.ForgetReply.ExtendEntry
(*StatusReply)(nil), // 4: sample.StatusReply
}
var file_forget_proto_depIdxs = []int32{
3, // 0: sample.ForgetReply.extend:type_name -> sample.ForgetReply.ExtendEntry
0, // 1: sample.Forget.Verify:input_type -> sample.VerifyRequest
1, // 2: sample.Forget.Reset:input_type -> sample.ForgetResetRequest
4, // 3: sample.Forget.Verify:output_type -> sample.StatusReply
2, // 4: sample.Forget.Reset:output_type -> sample.ForgetReply
3, // [3:5] is the sub-list for method output_type
1, // [1:3] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_forget_proto_init() }
func file_forget_proto_init() {
if File_forget_proto != nil {
return
}
file_blocks_proto_init()
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_forget_proto_rawDesc), len(file_forget_proto_rawDesc)),
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_forget_proto_goTypes,
DependencyIndexes: file_forget_proto_depIdxs,
MessageInfos: file_forget_proto_msgTypes,
}.Build()
File_forget_proto = out.File
file_forget_proto_goTypes = nil
file_forget_proto_depIdxs = nil
}

223
pb/forget.pb.gw.go Normal file
View File

@ -0,0 +1,223 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: forget.proto
/*
Package sample is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package sample
import (
"context"
"errors"
"io"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
)
// Suppress "imported and not used" errors
var (
_ codes.Code
_ io.Reader
_ status.Status
_ = errors.New
_ = runtime.String
_ = utilities.NewDoubleArray
_ = metadata.Join
)
func request_Forget_Verify_0(ctx context.Context, marshaler runtime.Marshaler, client ForgetClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq VerifyRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Verify(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Forget_Verify_0(ctx context.Context, marshaler runtime.Marshaler, server ForgetServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq VerifyRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Verify(ctx, &protoReq)
return msg, metadata, err
}
func request_Forget_Reset_0(ctx context.Context, marshaler runtime.Marshaler, client ForgetClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq ForgetResetRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Reset(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Forget_Reset_0(ctx context.Context, marshaler runtime.Marshaler, server ForgetServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq ForgetResetRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Reset(ctx, &protoReq)
return msg, metadata, err
}
// RegisterForgetHandlerServer registers the http handlers for service Forget to "mux".
// UnaryRPC :call ForgetServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterForgetHandlerFromEndpoint instead.
// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call.
func RegisterForgetHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ForgetServer) error {
mux.Handle(http.MethodPost, pattern_Forget_Verify_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Forget/Verify", runtime.WithHTTPPathPattern("/sample.Forget/Verify"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Forget_Verify_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Forget_Verify_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Forget_Reset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Forget/Reset", runtime.WithHTTPPathPattern("/sample.Forget/Reset"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Forget_Reset_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Forget_Reset_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterForgetHandlerFromEndpoint is same as RegisterForgetHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterForgetHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.NewClient(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterForgetHandler(ctx, mux, conn)
}
// RegisterForgetHandler registers the http handlers for service Forget to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterForgetHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterForgetHandlerClient(ctx, mux, NewForgetClient(conn))
}
// RegisterForgetHandlerClient registers the http handlers for service Forget
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ForgetClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ForgetClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "ForgetClient" to call the correct interceptors. This client ignores the HTTP middlewares.
func RegisterForgetHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ForgetClient) error {
mux.Handle(http.MethodPost, pattern_Forget_Verify_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Forget/Verify", runtime.WithHTTPPathPattern("/sample.Forget/Verify"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Forget_Verify_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Forget_Verify_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Forget_Reset_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Forget/Reset", runtime.WithHTTPPathPattern("/sample.Forget/Reset"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Forget_Reset_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Forget_Reset_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Forget_Verify_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Forget", "Verify"}, ""))
pattern_Forget_Reset_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Forget", "Reset"}, ""))
)
var (
forward_Forget_Verify_0 = runtime.ForwardResponseMessage
forward_Forget_Reset_0 = runtime.ForwardResponseMessage
)

168
pb/forget_grpc.pb.go Normal file
View File

@ -0,0 +1,168 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc (unknown)
// source: forget.proto
package sample
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
Forget_Verify_FullMethodName = "/sample.Forget/Verify"
Forget_Reset_FullMethodName = "/sample.Forget/Reset"
)
// ForgetClient is the client API for Forget service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
//
// sample-通行证模块
type ForgetClient interface {
// 验证手机号和验证码
Verify(ctx context.Context, in *VerifyRequest, opts ...grpc.CallOption) (*StatusReply, error)
// 重罢密码
Reset(ctx context.Context, in *ForgetResetRequest, opts ...grpc.CallOption) (*ForgetReply, error)
}
type forgetClient struct {
cc grpc.ClientConnInterface
}
func NewForgetClient(cc grpc.ClientConnInterface) ForgetClient {
return &forgetClient{cc}
}
func (c *forgetClient) Verify(ctx context.Context, in *VerifyRequest, opts ...grpc.CallOption) (*StatusReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(StatusReply)
err := c.cc.Invoke(ctx, Forget_Verify_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *forgetClient) Reset(ctx context.Context, in *ForgetResetRequest, opts ...grpc.CallOption) (*ForgetReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ForgetReply)
err := c.cc.Invoke(ctx, Forget_Reset_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// ForgetServer is the server API for Forget service.
// All implementations must embed UnimplementedForgetServer
// for forward compatibility.
//
// sample-通行证模块
type ForgetServer interface {
// 验证手机号和验证码
Verify(context.Context, *VerifyRequest) (*StatusReply, error)
// 重罢密码
Reset(context.Context, *ForgetResetRequest) (*ForgetReply, error)
mustEmbedUnimplementedForgetServer()
}
// UnimplementedForgetServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedForgetServer struct{}
func (UnimplementedForgetServer) Verify(context.Context, *VerifyRequest) (*StatusReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Verify not implemented")
}
func (UnimplementedForgetServer) Reset(context.Context, *ForgetResetRequest) (*ForgetReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Reset not implemented")
}
func (UnimplementedForgetServer) mustEmbedUnimplementedForgetServer() {}
func (UnimplementedForgetServer) testEmbeddedByValue() {}
// UnsafeForgetServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to ForgetServer will
// result in compilation errors.
type UnsafeForgetServer interface {
mustEmbedUnimplementedForgetServer()
}
func RegisterForgetServer(s grpc.ServiceRegistrar, srv ForgetServer) {
// If the following call pancis, it indicates UnimplementedForgetServer 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(&Forget_ServiceDesc, srv)
}
func _Forget_Verify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(VerifyRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ForgetServer).Verify(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Forget_Verify_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ForgetServer).Verify(ctx, req.(*VerifyRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Forget_Reset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ForgetResetRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ForgetServer).Reset(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Forget_Reset_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ForgetServer).Reset(ctx, req.(*ForgetResetRequest))
}
return interceptor(ctx, in, info, handler)
}
// Forget_ServiceDesc is the grpc.ServiceDesc for Forget service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Forget_ServiceDesc = grpc.ServiceDesc{
ServiceName: "sample.Forget",
HandlerType: (*ForgetServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Verify",
Handler: _Forget_Verify_Handler,
},
{
MethodName: "Reset",
Handler: _Forget_Reset_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "forget.proto",
}

288
pb/login.pb.go Normal file
View File

@ -0,0 +1,288 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.8
// protoc (unknown)
// source: login.proto
package sample
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type LoginByPwdRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` // 账号 必填
Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` // 密码 必填
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *LoginByPwdRequest) Reset() {
*x = LoginByPwdRequest{}
mi := &file_login_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *LoginByPwdRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoginByPwdRequest) ProtoMessage() {}
func (x *LoginByPwdRequest) ProtoReflect() protoreflect.Message {
mi := &file_login_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoginByPwdRequest.ProtoReflect.Descriptor instead.
func (*LoginByPwdRequest) Descriptor() ([]byte, []int) {
return file_login_proto_rawDescGZIP(), []int{0}
}
func (x *LoginByPwdRequest) GetAccount() string {
if x != nil {
return x.Account
}
return ""
}
func (x *LoginByPwdRequest) GetPassword() string {
if x != nil {
return x.Password
}
return ""
}
type LoginByCodeRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Country string `protobuf:"bytes,1,opt,name=country,proto3" json:"country,omitempty"` // 国家
Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"` // 手机号码
Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` // 验证码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *LoginByCodeRequest) Reset() {
*x = LoginByCodeRequest{}
mi := &file_login_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *LoginByCodeRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoginByCodeRequest) ProtoMessage() {}
func (x *LoginByCodeRequest) ProtoReflect() protoreflect.Message {
mi := &file_login_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoginByCodeRequest.ProtoReflect.Descriptor instead.
func (*LoginByCodeRequest) Descriptor() ([]byte, []int) {
return file_login_proto_rawDescGZIP(), []int{1}
}
func (x *LoginByCodeRequest) GetCountry() string {
if x != nil {
return x.Country
}
return ""
}
func (x *LoginByCodeRequest) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
func (x *LoginByCodeRequest) GetCode() string {
if x != nil {
return x.Code
}
return ""
}
type LoginReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` //用户唯一码
Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` //用户凭证
Extend map[string]string `protobuf:"bytes,4,rep,name=extend,proto3" json:"extend,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //扩展字段
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *LoginReply) Reset() {
*x = LoginReply{}
mi := &file_login_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *LoginReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoginReply) ProtoMessage() {}
func (x *LoginReply) ProtoReflect() protoreflect.Message {
mi := &file_login_proto_msgTypes[2]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoginReply.ProtoReflect.Descriptor instead.
func (*LoginReply) Descriptor() ([]byte, []int) {
return file_login_proto_rawDescGZIP(), []int{2}
}
func (x *LoginReply) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *LoginReply) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
func (x *LoginReply) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
func (x *LoginReply) GetExtend() map[string]string {
if x != nil {
return x.Extend
}
return nil
}
var File_login_proto protoreflect.FileDescriptor
const file_login_proto_rawDesc = "" +
"\n" +
"\vlogin.proto\x12\bsample\"I\n" +
"\x11LoginByPwdRequest\x12\x18\n" +
"\aaccount\x18\x01 \x01(\tR\aaccount\x12\x1a\n" +
"\bpassword\x18\x02 \x01(\tR\bpassword\"X\n" +
"\x12LoginByCodeRequest\x12\x18\n" +
"\acountry\x18\x01 \x01(\tR\acountry\x12\x14\n" +
"\x05phone\x18\x02 \x01(\tR\x05phone\x12\x12\n" +
"\x04code\x18\x03 \x01(\tR\x04code\"\xc3\x01\n" +
"\n" +
"LoginReply\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x14\n" +
"\x05token\x18\x03 \x01(\tR\x05token\x128\n" +
"\x06extend\x18\x04 \x03(\v2 .sample.LoginReply.ExtendEntryR\x06extend\x1a9\n" +
"\vExtendEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x012\xca\x01\n" +
"\x05Login\x12:\n" +
"\x03Pwd\x12\x1b.sample.LoginByPwdRequest\x1a\x14.sample.LoginReply\"\x00\x12<\n" +
"\x04Code\x12\x1c.sample.LoginByCodeRequest\x1a\x14.sample.LoginReply\"\x00\x12G\n" +
"\x0fCodeAndRegister\x12\x1c.sample.LoginByCodeRequest\x1a\x14.sample.LoginReply\"\x00B\fZ\n" +
".;sampleb\x06proto3"
var (
file_login_proto_rawDescOnce sync.Once
file_login_proto_rawDescData []byte
)
func file_login_proto_rawDescGZIP() []byte {
file_login_proto_rawDescOnce.Do(func() {
file_login_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_login_proto_rawDesc), len(file_login_proto_rawDesc)))
})
return file_login_proto_rawDescData
}
var file_login_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_login_proto_goTypes = []any{
(*LoginByPwdRequest)(nil), // 0: sample.LoginByPwdRequest
(*LoginByCodeRequest)(nil), // 1: sample.LoginByCodeRequest
(*LoginReply)(nil), // 2: sample.LoginReply
nil, // 3: sample.LoginReply.ExtendEntry
}
var file_login_proto_depIdxs = []int32{
3, // 0: sample.LoginReply.extend:type_name -> sample.LoginReply.ExtendEntry
0, // 1: sample.Login.Pwd:input_type -> sample.LoginByPwdRequest
1, // 2: sample.Login.Code:input_type -> sample.LoginByCodeRequest
1, // 3: sample.Login.CodeAndRegister:input_type -> sample.LoginByCodeRequest
2, // 4: sample.Login.Pwd:output_type -> sample.LoginReply
2, // 5: sample.Login.Code:output_type -> sample.LoginReply
2, // 6: sample.Login.CodeAndRegister:output_type -> sample.LoginReply
4, // [4:7] is the sub-list for method output_type
1, // [1:4] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_login_proto_init() }
func file_login_proto_init() {
if File_login_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_login_proto_rawDesc), len(file_login_proto_rawDesc)),
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_login_proto_goTypes,
DependencyIndexes: file_login_proto_depIdxs,
MessageInfos: file_login_proto_msgTypes,
}.Build()
File_login_proto = out.File
file_login_proto_goTypes = nil
file_login_proto_depIdxs = nil
}

289
pb/login.pb.gw.go Normal file
View File

@ -0,0 +1,289 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: login.proto
/*
Package sample is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package sample
import (
"context"
"errors"
"io"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
)
// Suppress "imported and not used" errors
var (
_ codes.Code
_ io.Reader
_ status.Status
_ = errors.New
_ = runtime.String
_ = utilities.NewDoubleArray
_ = metadata.Join
)
func request_Login_Pwd_0(ctx context.Context, marshaler runtime.Marshaler, client LoginClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByPwdRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Pwd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Login_Pwd_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByPwdRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Pwd(ctx, &protoReq)
return msg, metadata, err
}
func request_Login_Code_0(ctx context.Context, marshaler runtime.Marshaler, client LoginClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByCodeRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Code(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Login_Code_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByCodeRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Code(ctx, &protoReq)
return msg, metadata, err
}
func request_Login_CodeAndRegister_0(ctx context.Context, marshaler runtime.Marshaler, client LoginClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByCodeRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.CodeAndRegister(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Login_CodeAndRegister_0(ctx context.Context, marshaler runtime.Marshaler, server LoginServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq LoginByCodeRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.CodeAndRegister(ctx, &protoReq)
return msg, metadata, err
}
// RegisterLoginHandlerServer registers the http handlers for service Login to "mux".
// UnaryRPC :call LoginServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterLoginHandlerFromEndpoint instead.
// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call.
func RegisterLoginHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LoginServer) error {
mux.Handle(http.MethodPost, pattern_Login_Pwd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Login/Pwd", runtime.WithHTTPPathPattern("/sample.Login/Pwd"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Login_Pwd_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_Pwd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Login_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Login/Code", runtime.WithHTTPPathPattern("/sample.Login/Code"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Login_Code_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_Code_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Login_CodeAndRegister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Login/CodeAndRegister", runtime.WithHTTPPathPattern("/sample.Login/CodeAndRegister"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Login_CodeAndRegister_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_CodeAndRegister_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterLoginHandlerFromEndpoint is same as RegisterLoginHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterLoginHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.NewClient(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterLoginHandler(ctx, mux, conn)
}
// RegisterLoginHandler registers the http handlers for service Login to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterLoginHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterLoginHandlerClient(ctx, mux, NewLoginClient(conn))
}
// RegisterLoginHandlerClient registers the http handlers for service Login
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LoginClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LoginClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "LoginClient" to call the correct interceptors. This client ignores the HTTP middlewares.
func RegisterLoginHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LoginClient) error {
mux.Handle(http.MethodPost, pattern_Login_Pwd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Login/Pwd", runtime.WithHTTPPathPattern("/sample.Login/Pwd"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Login_Pwd_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_Pwd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Login_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Login/Code", runtime.WithHTTPPathPattern("/sample.Login/Code"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Login_Code_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_Code_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Login_CodeAndRegister_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Login/CodeAndRegister", runtime.WithHTTPPathPattern("/sample.Login/CodeAndRegister"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Login_CodeAndRegister_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Login_CodeAndRegister_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Login_Pwd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Login", "Pwd"}, ""))
pattern_Login_Code_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Login", "Code"}, ""))
pattern_Login_CodeAndRegister_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Login", "CodeAndRegister"}, ""))
)
var (
forward_Login_Pwd_0 = runtime.ForwardResponseMessage
forward_Login_Code_0 = runtime.ForwardResponseMessage
forward_Login_CodeAndRegister_0 = runtime.ForwardResponseMessage
)

208
pb/login_grpc.pb.go Normal file
View File

@ -0,0 +1,208 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc (unknown)
// source: login.proto
package sample
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
Login_Pwd_FullMethodName = "/sample.Login/Pwd"
Login_Code_FullMethodName = "/sample.Login/Code"
Login_CodeAndRegister_FullMethodName = "/sample.Login/CodeAndRegister"
)
// LoginClient is the client API for Login service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
//
// sample-通行证模块-登录
type LoginClient interface {
// 通过密码登录
Pwd(ctx context.Context, in *LoginByPwdRequest, opts ...grpc.CallOption) (*LoginReply, error)
// 通过验证码登录
Code(ctx context.Context, in *LoginByCodeRequest, opts ...grpc.CallOption) (*LoginReply, error)
// 通过验证码登录并注册
CodeAndRegister(ctx context.Context, in *LoginByCodeRequest, opts ...grpc.CallOption) (*LoginReply, error)
}
type loginClient struct {
cc grpc.ClientConnInterface
}
func NewLoginClient(cc grpc.ClientConnInterface) LoginClient {
return &loginClient{cc}
}
func (c *loginClient) Pwd(ctx context.Context, in *LoginByPwdRequest, opts ...grpc.CallOption) (*LoginReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(LoginReply)
err := c.cc.Invoke(ctx, Login_Pwd_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *loginClient) Code(ctx context.Context, in *LoginByCodeRequest, opts ...grpc.CallOption) (*LoginReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(LoginReply)
err := c.cc.Invoke(ctx, Login_Code_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *loginClient) CodeAndRegister(ctx context.Context, in *LoginByCodeRequest, opts ...grpc.CallOption) (*LoginReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(LoginReply)
err := c.cc.Invoke(ctx, Login_CodeAndRegister_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// LoginServer is the server API for Login service.
// All implementations must embed UnimplementedLoginServer
// for forward compatibility.
//
// sample-通行证模块-登录
type LoginServer interface {
// 通过密码登录
Pwd(context.Context, *LoginByPwdRequest) (*LoginReply, error)
// 通过验证码登录
Code(context.Context, *LoginByCodeRequest) (*LoginReply, error)
// 通过验证码登录并注册
CodeAndRegister(context.Context, *LoginByCodeRequest) (*LoginReply, error)
mustEmbedUnimplementedLoginServer()
}
// UnimplementedLoginServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedLoginServer struct{}
func (UnimplementedLoginServer) Pwd(context.Context, *LoginByPwdRequest) (*LoginReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Pwd not implemented")
}
func (UnimplementedLoginServer) Code(context.Context, *LoginByCodeRequest) (*LoginReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Code not implemented")
}
func (UnimplementedLoginServer) CodeAndRegister(context.Context, *LoginByCodeRequest) (*LoginReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method CodeAndRegister not implemented")
}
func (UnimplementedLoginServer) mustEmbedUnimplementedLoginServer() {}
func (UnimplementedLoginServer) testEmbeddedByValue() {}
// UnsafeLoginServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to LoginServer will
// result in compilation errors.
type UnsafeLoginServer interface {
mustEmbedUnimplementedLoginServer()
}
func RegisterLoginServer(s grpc.ServiceRegistrar, srv LoginServer) {
// If the following call pancis, it indicates UnimplementedLoginServer 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(&Login_ServiceDesc, srv)
}
func _Login_Pwd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LoginByPwdRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LoginServer).Pwd(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Login_Pwd_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LoginServer).Pwd(ctx, req.(*LoginByPwdRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Login_Code_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LoginByCodeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LoginServer).Code(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Login_Code_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LoginServer).Code(ctx, req.(*LoginByCodeRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Login_CodeAndRegister_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LoginByCodeRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LoginServer).CodeAndRegister(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Login_CodeAndRegister_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LoginServer).CodeAndRegister(ctx, req.(*LoginByCodeRequest))
}
return interceptor(ctx, in, info, handler)
}
// Login_ServiceDesc is the grpc.ServiceDesc for Login service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Login_ServiceDesc = grpc.ServiceDesc{
ServiceName: "sample.Login",
HandlerType: (*LoginServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Pwd",
Handler: _Login_Pwd_Handler,
},
{
MethodName: "Code",
Handler: _Login_Code_Handler,
},
{
MethodName: "CodeAndRegister",
Handler: _Login_CodeAndRegister_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "login.proto",
}

282
pb/register.pb.go Normal file
View File

@ -0,0 +1,282 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.36.8
// protoc (unknown)
// source: register.proto
package sample
import (
reflect "reflect"
sync "sync"
unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type RegisterRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` //邮箱
Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` //帐号
Phone string `protobuf:"bytes,3,opt,name=phone,proto3" json:"phone,omitempty"` //手机号
Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"` //密码
Code string `protobuf:"bytes,5,opt,name=code,proto3" json:"code,omitempty"` //验证码
AgencyId int64 `protobuf:"varint,6,opt,name=agency_id,json=agencyId,proto3" json:"agency_id,omitempty"` // 代理ID
StaffId int64 `protobuf:"varint,7,opt,name=staff_id,json=staffId,proto3" json:"staff_id,omitempty"` // 工作人员ID
OwnerId int64 `protobuf:"varint,8,opt,name=owner_id,proto3" json:"owner_id,omitempty"` // 所属ID
OwnerIdentity string `protobuf:"bytes,9,opt,name=owner_identity,proto3" json:"owner_identity,omitempty"` // 所属唯一码
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RegisterRequest) Reset() {
*x = RegisterRequest{}
mi := &file_register_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RegisterRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RegisterRequest) ProtoMessage() {}
func (x *RegisterRequest) ProtoReflect() protoreflect.Message {
mi := &file_register_proto_msgTypes[0]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RegisterRequest.ProtoReflect.Descriptor instead.
func (*RegisterRequest) Descriptor() ([]byte, []int) {
return file_register_proto_rawDescGZIP(), []int{0}
}
func (x *RegisterRequest) GetEmail() string {
if x != nil {
return x.Email
}
return ""
}
func (x *RegisterRequest) GetAccount() string {
if x != nil {
return x.Account
}
return ""
}
func (x *RegisterRequest) GetPhone() string {
if x != nil {
return x.Phone
}
return ""
}
func (x *RegisterRequest) GetPassword() string {
if x != nil {
return x.Password
}
return ""
}
func (x *RegisterRequest) GetCode() string {
if x != nil {
return x.Code
}
return ""
}
func (x *RegisterRequest) GetAgencyId() int64 {
if x != nil {
return x.AgencyId
}
return 0
}
func (x *RegisterRequest) GetStaffId() int64 {
if x != nil {
return x.StaffId
}
return 0
}
func (x *RegisterRequest) GetOwnerId() int64 {
if x != nil {
return x.OwnerId
}
return 0
}
func (x *RegisterRequest) GetOwnerIdentity() string {
if x != nil {
return x.OwnerIdentity
}
return ""
}
type RegisterReply struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` //用户唯一码
Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` //用户Header所需Token
Extend map[string]string `protobuf:"bytes,5,rep,name=extend,proto3" json:"extend,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` //扩展字段
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RegisterReply) Reset() {
*x = RegisterReply{}
mi := &file_register_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RegisterReply) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RegisterReply) ProtoMessage() {}
func (x *RegisterReply) ProtoReflect() protoreflect.Message {
mi := &file_register_proto_msgTypes[1]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RegisterReply.ProtoReflect.Descriptor instead.
func (*RegisterReply) Descriptor() ([]byte, []int) {
return file_register_proto_rawDescGZIP(), []int{1}
}
func (x *RegisterReply) GetId() int64 {
if x != nil {
return x.Id
}
return 0
}
func (x *RegisterReply) GetIdentity() string {
if x != nil {
return x.Identity
}
return ""
}
func (x *RegisterReply) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
func (x *RegisterReply) GetExtend() map[string]string {
if x != nil {
return x.Extend
}
return nil
}
var File_register_proto protoreflect.FileDescriptor
const file_register_proto_rawDesc = "" +
"\n" +
"\x0eregister.proto\x12\bsample\"\x83\x02\n" +
"\x0fRegisterRequest\x12\x14\n" +
"\x05email\x18\x01 \x01(\tR\x05email\x12\x18\n" +
"\aaccount\x18\x02 \x01(\tR\aaccount\x12\x14\n" +
"\x05phone\x18\x03 \x01(\tR\x05phone\x12\x1a\n" +
"\bpassword\x18\x04 \x01(\tR\bpassword\x12\x12\n" +
"\x04code\x18\x05 \x01(\tR\x04code\x12\x1b\n" +
"\tagency_id\x18\x06 \x01(\x03R\bagencyId\x12\x19\n" +
"\bstaff_id\x18\a \x01(\x03R\astaffId\x12\x1a\n" +
"\bowner_id\x18\b \x01(\x03R\bowner_id\x12&\n" +
"\x0eowner_identity\x18\t \x01(\tR\x0eowner_identity\"\xc9\x01\n" +
"\rRegisterReply\x12\x0e\n" +
"\x02id\x18\x01 \x01(\x03R\x02id\x12\x1a\n" +
"\bidentity\x18\x02 \x01(\tR\bidentity\x12\x14\n" +
"\x05token\x18\x04 \x01(\tR\x05token\x12;\n" +
"\x06extend\x18\x05 \x03(\v2#.sample.RegisterReply.ExtendEntryR\x06extend\x1a9\n" +
"\vExtendEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
"\x05value\x18\x02 \x01(\tR\x05value:\x028\x012\x85\x01\n" +
"\bRegister\x12;\n" +
"\x03Pwd\x12\x19.sample.RegisterRequest\x1a\x17.sample.RegisterReply\"\x00\x12<\n" +
"\x04Code\x12\x19.sample.RegisterRequest\x1a\x17.sample.RegisterReply\"\x00B\fZ\n" +
".;sampleb\x06proto3"
var (
file_register_proto_rawDescOnce sync.Once
file_register_proto_rawDescData []byte
)
func file_register_proto_rawDescGZIP() []byte {
file_register_proto_rawDescOnce.Do(func() {
file_register_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_register_proto_rawDesc), len(file_register_proto_rawDesc)))
})
return file_register_proto_rawDescData
}
var file_register_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_register_proto_goTypes = []any{
(*RegisterRequest)(nil), // 0: sample.RegisterRequest
(*RegisterReply)(nil), // 1: sample.RegisterReply
nil, // 2: sample.RegisterReply.ExtendEntry
}
var file_register_proto_depIdxs = []int32{
2, // 0: sample.RegisterReply.extend:type_name -> sample.RegisterReply.ExtendEntry
0, // 1: sample.Register.Pwd:input_type -> sample.RegisterRequest
0, // 2: sample.Register.Code:input_type -> sample.RegisterRequest
1, // 3: sample.Register.Pwd:output_type -> sample.RegisterReply
1, // 4: sample.Register.Code:output_type -> sample.RegisterReply
3, // [3:5] is the sub-list for method output_type
1, // [1:3] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_register_proto_init() }
func file_register_proto_init() {
if File_register_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_register_proto_rawDesc), len(file_register_proto_rawDesc)),
NumEnums: 0,
NumMessages: 3,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_register_proto_goTypes,
DependencyIndexes: file_register_proto_depIdxs,
MessageInfos: file_register_proto_msgTypes,
}.Build()
File_register_proto = out.File
file_register_proto_goTypes = nil
file_register_proto_depIdxs = nil
}

223
pb/register.pb.gw.go Normal file
View File

@ -0,0 +1,223 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: register.proto
/*
Package sample is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package sample
import (
"context"
"errors"
"io"
"net/http"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/grpc-ecosystem/grpc-gateway/v2/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
)
// Suppress "imported and not used" errors
var (
_ codes.Code
_ io.Reader
_ status.Status
_ = errors.New
_ = runtime.String
_ = utilities.NewDoubleArray
_ = metadata.Join
)
func request_Register_Pwd_0(ctx context.Context, marshaler runtime.Marshaler, client RegisterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RegisterRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Pwd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Register_Pwd_0(ctx context.Context, marshaler runtime.Marshaler, server RegisterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RegisterRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Pwd(ctx, &protoReq)
return msg, metadata, err
}
func request_Register_Code_0(ctx context.Context, marshaler runtime.Marshaler, client RegisterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RegisterRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.Code(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Register_Code_0(ctx context.Context, marshaler runtime.Marshaler, server RegisterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var (
protoReq RegisterRequest
metadata runtime.ServerMetadata
)
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.Code(ctx, &protoReq)
return msg, metadata, err
}
// RegisterRegisterHandlerServer registers the http handlers for service Register to "mux".
// UnaryRPC :call RegisterServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRegisterHandlerFromEndpoint instead.
// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call.
func RegisterRegisterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RegisterServer) error {
mux.Handle(http.MethodPost, pattern_Register_Pwd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Register/Pwd", runtime.WithHTTPPathPattern("/sample.Register/Pwd"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Register_Pwd_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Register_Pwd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Register_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/sample.Register/Code", runtime.WithHTTPPathPattern("/sample.Register/Code"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Register_Code_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Register_Code_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterRegisterHandlerFromEndpoint is same as RegisterRegisterHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterRegisterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.NewClient(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterRegisterHandler(ctx, mux, conn)
}
// RegisterRegisterHandler registers the http handlers for service Register to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterRegisterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterRegisterHandlerClient(ctx, mux, NewRegisterClient(conn))
}
// RegisterRegisterHandlerClient registers the http handlers for service Register
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RegisterClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RegisterClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "RegisterClient" to call the correct interceptors. This client ignores the HTTP middlewares.
func RegisterRegisterHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RegisterClient) error {
mux.Handle(http.MethodPost, pattern_Register_Pwd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Register/Pwd", runtime.WithHTTPPathPattern("/sample.Register/Pwd"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Register_Pwd_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Register_Pwd_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle(http.MethodPost, pattern_Register_Code_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/sample.Register/Code", runtime.WithHTTPPathPattern("/sample.Register/Code"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Register_Code_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Register_Code_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Register_Pwd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Register", "Pwd"}, ""))
pattern_Register_Code_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sample.Register", "Code"}, ""))
)
var (
forward_Register_Pwd_0 = runtime.ForwardResponseMessage
forward_Register_Code_0 = runtime.ForwardResponseMessage
)

168
pb/register_grpc.pb.go Normal file
View File

@ -0,0 +1,168 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc (unknown)
// source: register.proto
package sample
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
Register_Pwd_FullMethodName = "/sample.Register/Pwd"
Register_Code_FullMethodName = "/sample.Register/Code"
)
// RegisterClient is the client API for Register service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
//
// sample-通行证模块-注册
type RegisterClient interface {
// 帐号密码注册
Pwd(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterReply, error)
// 手机验证码注册
Code(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterReply, error)
}
type registerClient struct {
cc grpc.ClientConnInterface
}
func NewRegisterClient(cc grpc.ClientConnInterface) RegisterClient {
return &registerClient{cc}
}
func (c *registerClient) Pwd(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(RegisterReply)
err := c.cc.Invoke(ctx, Register_Pwd_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *registerClient) Code(ctx context.Context, in *RegisterRequest, opts ...grpc.CallOption) (*RegisterReply, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(RegisterReply)
err := c.cc.Invoke(ctx, Register_Code_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// RegisterServer is the server API for Register service.
// All implementations must embed UnimplementedRegisterServer
// for forward compatibility.
//
// sample-通行证模块-注册
type RegisterServer interface {
// 帐号密码注册
Pwd(context.Context, *RegisterRequest) (*RegisterReply, error)
// 手机验证码注册
Code(context.Context, *RegisterRequest) (*RegisterReply, error)
mustEmbedUnimplementedRegisterServer()
}
// UnimplementedRegisterServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedRegisterServer struct{}
func (UnimplementedRegisterServer) Pwd(context.Context, *RegisterRequest) (*RegisterReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Pwd not implemented")
}
func (UnimplementedRegisterServer) Code(context.Context, *RegisterRequest) (*RegisterReply, error) {
return nil, status.Errorf(codes.Unimplemented, "method Code not implemented")
}
func (UnimplementedRegisterServer) mustEmbedUnimplementedRegisterServer() {}
func (UnimplementedRegisterServer) testEmbeddedByValue() {}
// UnsafeRegisterServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to RegisterServer will
// result in compilation errors.
type UnsafeRegisterServer interface {
mustEmbedUnimplementedRegisterServer()
}
func RegisterRegisterServer(s grpc.ServiceRegistrar, srv RegisterServer) {
// If the following call pancis, it indicates UnimplementedRegisterServer 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(&Register_ServiceDesc, srv)
}
func _Register_Pwd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RegisterRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RegisterServer).Pwd(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Register_Pwd_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RegisterServer).Pwd(ctx, req.(*RegisterRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Register_Code_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(RegisterRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RegisterServer).Code(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Register_Code_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RegisterServer).Code(ctx, req.(*RegisterRequest))
}
return interceptor(ctx, in, info, handler)
}
// Register_ServiceDesc is the grpc.ServiceDesc for Register service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Register_ServiceDesc = grpc.ServiceDesc{
ServiceName: "sample.Register",
HandlerType: (*RegisterServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "Pwd",
Handler: _Register_Pwd_Handler,
},
{
MethodName: "Code",
Handler: _Register_Code_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "register.proto",
}

33
proto/blocks.proto Normal file
View File

@ -0,0 +1,33 @@
syntax = "proto3";
package sample;
option go_package = ".;sample";
message Empty{
}
message FetchRequest {
int64 page_no=1; //
int64 page_size=2; //
map<string,string> params=3; // ,key=val,eg key:category_id=?,vlaue=11
}
message IdentRequest{
int64 id = 1; // ID
string identity = 2; //
}
message VersionRequest {
int64 version=1; //
}
message SearchRequest {
string keyword=1; //
}
message StatusReply{
string data=1; //
int64 timeseq=2; //
}

82
proto/sample.proto Normal file
View File

@ -0,0 +1,82 @@
syntax = "proto3";
package sample;
option go_package = ".;sample";
import "blocks.proto";
// sample()-
service Account{
//
rpc Get(Empty) returns (GetFullReply) {}
// ,0
rpc SetData(SetDataRequest) returns (StatusReply) {}
//
rpc SetPassword(SetPasswordRequest) returns (StatusReply) {}
//
rpc TagCreate(TagItem) returns (StatusReply) {}
//
rpc TagRemove(IdentRequest) returns (StatusReply) {}
//
rpc Statistics(StatisticsRequest) returns (StatisticsReply) {}
}
//
message GetFullReply {
string identity = 1; //
string account = 2; //
string phone = 3; //
string email = 4; //
string rights = 5; //
string nickname = 6; //
string avatar = 7; //
string birthday = 8; //
int32 sex = 9; // 12
int32 country = 10; //
int32 province = 11; //
int32 city = 12; //
int32 area = 13; //
string sign = 14; //
string cover = 15; // &
int32 score = 16; //
int32 level = 17; //
map<string,bool> verify = 18; //
repeated TagItem tags = 19;
}
message TagItem {
string name = 1;
string icon = 2;
}
message SetDataRequest {
string nickname = 1; //
string avatar = 2; //
string birthday = 3; //
int32 sex = 4; //12
int32 country = 5; //
int32 province = 6; //
int32 city = 7; //
int32 area = 8; //
string sign = 9; //
string cover = 10; // &
int32 score = 11; //
int32 level = 12; //
}
message SetPasswordRequest {
string old_password = 3; //
string new_password = 4;//
}
message StatisticsRequest {
repeated string field = 1; //
}
message StatisticsReply {
map<string,int64> Data=1; //Map格式输出
}

32
scripts/filebeat.yaml Normal file
View File

@ -0,0 +1,32 @@
filebeat.inputs:
- type: log
enabled: true
# 开启json解析
json.keys_under_root: true
json.add_error_key: true
# 日志文件路径
paths:
- ./logs/content/error.log
- ./logs/content/slow.log
setup.template.settings:
index.number_of_shards: 1
# 定义kafka topic field
fields:
log_topic: scf.pb.dev
# 输出到kafka
output.kafka:
hosts: ["127.0.0.1:9092"]
topic: '%{[fields.log_topic]}'
partition.round_robin:
reachable_only: false
required_acks: 1
keep_alive: 10s
# ================================= Processors =================================
processors:
- decode_json_fields:
fields: ['@timestamp','level','content','trace','span','duration']
target: ""

5
scripts/lint.sh Normal file
View File

@ -0,0 +1,5 @@
#install
go install github.com/securego/gosec/v2/cmd/gosec@latest
#run
gosec -fmt=json -out=./test/lint/gosec.json ./...

View File

@ -0,0 +1,263 @@
{
"swagger": "2.0",
"info": {
"title": "blocks.proto",
"version": "version not set"
},
"tags": [
{
"name": "Account"
},
{
"name": "Forget"
},
{
"name": "Login"
},
{
"name": "Register"
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"definitions": {
"sampleForgetReply": {
"type": "object",
"properties": {
"identity": {
"type": "string",
"title": "用户唯一码"
},
"dataBind": {
"type": "string",
"title": "数据绑定的相关说明,PASS通过NOPHONE没有绑定手机号NOPWD没有设置密码NOBIND没有手机号同时没有密码"
},
"token": {
"type": "string",
"title": "用户凭证"
},
"extend": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"title": "扩展字段"
}
}
},
"sampleGetFullReply": {
"type": "object",
"properties": {
"identity": {
"type": "string",
"title": "唯一标识"
},
"account": {
"type": "string",
"title": "帐号"
},
"phone": {
"type": "string",
"title": "手机号码 必填"
},
"email": {
"type": "string",
"title": "验证码"
},
"rights": {
"type": "string",
"title": "权限"
},
"nickname": {
"type": "string",
"title": "昵称"
},
"avatar": {
"type": "string",
"title": "头像"
},
"birthday": {
"type": "string",
"title": "生日"
},
"sex": {
"type": "integer",
"format": "int32",
"title": "性别1为男性2为女性"
},
"country": {
"type": "integer",
"format": "int32",
"title": "国家"
},
"province": {
"type": "integer",
"format": "int32",
"title": "省"
},
"city": {
"type": "integer",
"format": "int32",
"title": "市"
},
"area": {
"type": "integer",
"format": "int32",
"title": "区"
},
"sign": {
"type": "string",
"title": "签名"
},
"cover": {
"type": "string",
"title": "背景\u0026封面"
},
"score": {
"type": "integer",
"format": "int32",
"title": "积分"
},
"level": {
"type": "integer",
"format": "int32",
"title": "等级"
},
"verify": {
"type": "object",
"additionalProperties": {
"type": "boolean"
},
"title": "数据"
},
"tags": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/sampleTagItem"
}
}
},
"title": "获取会员的完整信息"
},
"sampleLoginReply": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "int64"
},
"identity": {
"type": "string",
"title": "用户唯一码"
},
"token": {
"type": "string",
"title": "用户凭证"
},
"extend": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"title": "扩展字段"
}
}
},
"sampleRegisterReply": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "int64"
},
"identity": {
"type": "string",
"title": "用户唯一码"
},
"token": {
"type": "string",
"title": "用户Header所需Token"
},
"extend": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"title": "扩展字段"
}
}
},
"sampleStatisticsReply": {
"type": "object",
"properties": {
"Data": {
"type": "object",
"additionalProperties": {
"type": "string",
"format": "int64"
},
"title": "数据以Map格式输出"
}
}
},
"sampleStatusReply": {
"type": "object",
"properties": {
"data": {
"type": "string",
"title": "数据"
},
"timeseq": {
"type": "string",
"format": "int64",
"title": "响应时间序列"
}
}
},
"sampleTagItem": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"icon": {
"type": "string"
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"@type": {
"type": "string"
}
},
"additionalProperties": {}
},
"rpcStatus": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/protobufAny"
}
}
}
}
}
}

9
test/login-pwd.http Normal file
View File

@ -0,0 +1,9 @@
POST http://127.0.0.1:12425/sample.Login/Pwd
content-type: application/json
Authorization:k7941AQvJ0LVU9e0LMVYZHdXQLODADEHq7yOGeXL7IzUVEZMU3pjIWt28Gd+VB7SsUq3xFdFIzBmeq/fpzAlLhv9zELYcrwEXCVWM7W0YK/rx5MgSK2Ji40rpwB1rYaNEFglWh1b70clbGbx2l/GwFmPqcCxyhG9qUIJu59ICmu2OoY3tGJ2eEBXqgHjmcYBFwMULk5YJrhTu2cPEGjQH5vfV8v9YoiJbATqO22bxwpg54ph1KUP4fODFDkYkVWkIjv1gMzJUARjoJiczyCsmW4qw7aDvGMmmcY0AV7W/nuK1byFCQo8La3+kULvY/X6
{
"account": "admin",
"password": "password"
}

1
test/readme.md Normal file
View File

@ -0,0 +1 @@
restful test