feat(sms): add sms login method
This commit is contained in:
parent
bb580ff488
commit
b5b839fdba
@ -5,6 +5,7 @@ import "github.com/BurntSushi/toml"
|
||||
type Config struct {
|
||||
Server ServerConfig `toml:"server"`
|
||||
DB DBConfig `toml:"db"`
|
||||
Redis RedisConfig `toml:"redis"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
@ -19,6 +20,13 @@ type DBConfig struct {
|
||||
Passwd string `toml:"passwd"`
|
||||
}
|
||||
|
||||
type RedisConfig struct {
|
||||
Host string `toml:"host"`
|
||||
Port int `toml:"port"`
|
||||
DB int `toml:"db"`
|
||||
Passwd string `toml:"passwd"`
|
||||
}
|
||||
|
||||
var Conf *Config
|
||||
|
||||
func ReadConfig(path string) error {
|
||||
|
27
config/redis.go
Normal file
27
config/redis.go
Normal file
@ -0,0 +1,27 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
var (
|
||||
RDC *redis.Client
|
||||
CTX = context.Background()
|
||||
)
|
||||
|
||||
func InitRedis() {
|
||||
RDC = redis.NewClient(&redis.Options{
|
||||
Addr: fmt.Sprintf("%s:%d", Conf.Redis.Host, Conf.Redis.Port),
|
||||
Password: Conf.Redis.Passwd,
|
||||
DB: Conf.Redis.DB,
|
||||
})
|
||||
}
|
||||
|
||||
func CloseRedis() {
|
||||
err := RDC.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
18
go.mod
18
go.mod
@ -2,16 +2,25 @@ module health-go
|
||||
|
||||
go 1.22
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.4.0
|
||||
github.com/gin-gonic/gin v1.10.0
|
||||
github.com/redis/go-redis/v9 v9.7.0
|
||||
gorm.io/driver/mysql v1.5.7
|
||||
gorm.io/gorm v1.25.12
|
||||
)
|
||||
|
||||
require (
|
||||
filippo.io/edwards25519 v1.1.0 // indirect
|
||||
github.com/BurntSushi/toml v1.4.0 // indirect
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.63.34 // indirect
|
||||
github.com/bytedance/sonic v1.11.6 // indirect
|
||||
github.com/bytedance/sonic/loader v0.1.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/cloudwego/base64x v0.1.4 // indirect
|
||||
github.com/cloudwego/iasm v0.2.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/gin-gonic/gin v1.10.0 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||
github.com/go-playground/validator/v10 v10.20.0 // indirect
|
||||
@ -19,12 +28,14 @@ require (
|
||||
github.com/goccy/go-json v0.10.2 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
||||
github.com/leodido/go-urn v1.4.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||
@ -34,7 +45,6 @@ require (
|
||||
golang.org/x/sys v0.20.0 // indirect
|
||||
golang.org/x/text v0.19.0 // indirect
|
||||
google.golang.org/protobuf v1.34.1 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
gorm.io/driver/mysql v1.5.7 // indirect
|
||||
gorm.io/gorm v1.25.12 // indirect
|
||||
)
|
||||
|
83
go.sum
83
go.sum
@ -1,23 +1,43 @@
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
|
||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.63.34 h1:eZM2MHY/p4TFO1pGf9O5HiuYE59hwrrkf3HvCtkL5Ok=
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.63.34/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
|
||||
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/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
|
||||
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
|
||||
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
|
||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
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/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
||||
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
||||
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
||||
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||
@ -29,17 +49,29 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
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/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
@ -49,9 +81,16 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
|
||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
|
||||
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
@ -62,30 +101,70 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
|
||||
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
|
||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||
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.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
|
||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
|
||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
|
||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
|
||||
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
|
||||
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
||||
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0/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.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
||||
|
@ -1,10 +1,12 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"health-go/config"
|
||||
"health-go/models"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
// FetchAllRecords 每个用户全部化验记录
|
||||
@ -28,6 +30,169 @@ func FetchAllRecords(c *gin.Context) {
|
||||
}
|
||||
|
||||
func InsertRecord(c *gin.Context) {
|
||||
//var aNewRecord models.CheckItem
|
||||
var newRecord models.UserInput
|
||||
if err := c.ShouldBindJSON(&newRecord); err != nil {
|
||||
fmt.Println(newRecord.Date)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"code": 400,
|
||||
"msg": "无效的请求参数",
|
||||
"data": err,
|
||||
})
|
||||
return
|
||||
}
|
||||
date, _ := convertDate(newRecord.Date)
|
||||
fmt.Println(date)
|
||||
|
||||
//ok, checkID := prepareInsert(1, date, newRecord.Hospital)
|
||||
//
|
||||
//if ok {
|
||||
// var newItems []models.CheckItem
|
||||
|
||||
//for fieldName, itemID := range checkItemMap {
|
||||
// switch fieldName {
|
||||
// case "ca125Value":
|
||||
// if newRecord.Ca125 != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Ca125,
|
||||
// })
|
||||
// }
|
||||
// case "ca199Value":
|
||||
// if newRecord.Ca199 != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Ca199,
|
||||
// })
|
||||
// }
|
||||
// case "ceaValue":
|
||||
// if newRecord.Cea != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Cea,
|
||||
// })
|
||||
// }
|
||||
// case "ca153Value":
|
||||
// if newRecord.Ca153 != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Ca153,
|
||||
// })
|
||||
// }
|
||||
// case "ca724Value":
|
||||
// if newRecord.Ca724 != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Ca724,
|
||||
// })
|
||||
// }
|
||||
// case "he4Value":
|
||||
// if newRecord.He4 != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.He4,
|
||||
// })
|
||||
// }
|
||||
// case "rbcValue":
|
||||
// if newRecord.Rbc != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Rbc,
|
||||
// })
|
||||
// }
|
||||
// case "hbValue":
|
||||
// if newRecord.Hb != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Hb,
|
||||
// })
|
||||
// }
|
||||
// case "wbcValue":
|
||||
// if newRecord.Wbc != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Wbc,
|
||||
// })
|
||||
// }
|
||||
// case "pltValue":
|
||||
// if newRecord.Plt != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Plt,
|
||||
// })
|
||||
// }
|
||||
// case "neutValue":
|
||||
// if newRecord.Neut != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Neut,
|
||||
// })
|
||||
// }
|
||||
// case "weightValue":
|
||||
// if newRecord.Weight != -1 {
|
||||
// newItems = append(newItems, models.CheckItem{
|
||||
// CheckID: checkID,
|
||||
// ItemID: itemID,
|
||||
// ItemValue: newRecord.Weight,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//result := config.DB.Table("check_item")
|
||||
//if result.Error != nil{
|
||||
// c.JSON(http.StatusOK, gin.H{
|
||||
// "code":500,
|
||||
// "msg": "插入失败",
|
||||
// "data": nil,
|
||||
// })
|
||||
//}
|
||||
// c.JSON(http.StatusOK, gin.H{
|
||||
// "code": 200,
|
||||
// "msg": "添加记录成功",
|
||||
// "data": nil,
|
||||
// })
|
||||
//} else {
|
||||
// c.JSON(http.StatusOK, gin.H{
|
||||
// "code": 200,
|
||||
// "msg": "存在相同日期记录, 插入失败",
|
||||
// "data": nil,
|
||||
// })
|
||||
//}
|
||||
}
|
||||
|
||||
func prepareInsert(userID int, date time.Time, hospital int) (pre bool, id int) {
|
||||
var aRec models.Check
|
||||
result := config.DB.Model("checks").
|
||||
Where(
|
||||
"check_date = ? AND user_id = ?",
|
||||
date.Format("2006-01-02"),
|
||||
userID).Find(&aRec)
|
||||
|
||||
if result.RowsAffected == 0 {
|
||||
var newRec models.Check
|
||||
newRec.UserID = 1
|
||||
newRec.CheckDate = date
|
||||
newRec.Hospital = hospital
|
||||
newRec.InsertTime = time.Now()
|
||||
newRec.UpdateTime = time.Now()
|
||||
re := config.DB.Table("checks").Create(&newRec)
|
||||
fmt.Println(re.RowsAffected)
|
||||
|
||||
return true, aRec.CheckID
|
||||
}
|
||||
return false, aRec.CheckID
|
||||
}
|
||||
|
||||
func convertDate(dateStr string) (time.Time, error) {
|
||||
return time.Parse("2006-01-02", dateStr)
|
||||
}
|
||||
|
6
main.go
6
main.go
@ -13,10 +13,14 @@ func main() {
|
||||
log.Fatalf("无法读取配置文件: %v", err)
|
||||
} else {
|
||||
log.Println("配置文件读取成功")
|
||||
log.Printf("服务端口: %d\n, ", config.Conf.Server.Port)
|
||||
log.Printf("服务端口: %d", config.Conf.Server.Port)
|
||||
}
|
||||
|
||||
config.InitDB()
|
||||
|
||||
config.InitRedis()
|
||||
defer config.CloseRedis()
|
||||
|
||||
r := routers.SetupRouter()
|
||||
if err := r.Run(":" + strconv.Itoa(config.Conf.Server.Port)); err != nil {
|
||||
log.Fatalf("服务启动失败: %v", err)
|
||||
|
@ -1,11 +1,14 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type Check struct {
|
||||
CheckID int `gorm:"column:check_id"`
|
||||
UserID int `gorm:"column:user_id"`
|
||||
CheckDate string `gorm:"column:check_date"`
|
||||
InsertTime string `gorm:"column:insert_time"`
|
||||
UpdateTime string `gorm:"column:update_time"`
|
||||
CheckID int `gorm:"column:check_id"`
|
||||
UserID int `gorm:"column:user_id"`
|
||||
CheckDate time.Time `gorm:"column:check_date"`
|
||||
Hospital int `gorm:"column:check_hospital"`
|
||||
InsertTime time.Time `gorm:"column:insert_time"`
|
||||
UpdateTime time.Time `gorm:"column:update_time"`
|
||||
}
|
||||
|
||||
func (Check) TableName() string {
|
||||
@ -13,10 +16,10 @@ func (Check) TableName() string {
|
||||
}
|
||||
|
||||
type CheckItem struct {
|
||||
CheckItemID int `gorm:"column:check_item_id"`
|
||||
CheckID int `gorm:"column:check_id"`
|
||||
ItemID int `gorm:"column:item_id"`
|
||||
ItemValue string `gorm:"column:item_value"`
|
||||
CheckItemID int `gorm:"column:check_item_id"`
|
||||
CheckID int `gorm:"column:check_id"`
|
||||
ItemID int `gorm:"column:item_id"`
|
||||
ItemValue float32 `gorm:"column:item_value"`
|
||||
}
|
||||
|
||||
func (CheckItem) TableName() string {
|
||||
@ -33,3 +36,20 @@ type Item struct {
|
||||
func (Item) TableName() string {
|
||||
return "items"
|
||||
}
|
||||
|
||||
type UserInput struct {
|
||||
Date string `json:"date"`
|
||||
Hospital int `json:"checkHospital"`
|
||||
Ca125 float32 `json:"ca125Value"`
|
||||
Ca199 float32 `json:"ca199Value"`
|
||||
Cea float32 `json:"ceaValue"`
|
||||
Ca153 float32 `json:"ca153Value"`
|
||||
Ca724 float32 `json:"ca724Value"`
|
||||
He4 float32 `json:"he4Value"`
|
||||
Rbc float32 `json:"rbcValue"`
|
||||
Hb float32 `json:"hbValue"`
|
||||
Wbc float32 `json:"wbcValue"`
|
||||
Plt float32 `json:"pltValue"`
|
||||
Neut float32 `json:"neutValue"`
|
||||
Weight float32 `json:"weightValue"`
|
||||
}
|
||||
|
@ -6,9 +6,9 @@ type User struct {
|
||||
UserID int `gorm:"column:user_id"`
|
||||
UserName string `gorm:"column:user_name"`
|
||||
Password string `gorm:"column:password"`
|
||||
Brth time.Time `gorm:"column:brth"`
|
||||
Birth time.Time `gorm:"column:birth"`
|
||||
Height float32 `gorm:"column:height"`
|
||||
Tel string `gorm:"column:tel"`
|
||||
Tel string `gorm:"column:tel" json:"tel"`
|
||||
SMSTry int `gorm:"column:SMS_try"`
|
||||
}
|
||||
|
||||
|
@ -3,9 +3,11 @@ package routers
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"health-go/handlers"
|
||||
"health-go/services/sms"
|
||||
)
|
||||
|
||||
func SetupRouter() *gin.Engine {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
r := gin.Default()
|
||||
|
||||
// user
|
||||
@ -13,12 +15,17 @@ func SetupRouter() *gin.Engine {
|
||||
r.GET("/firstUser", handlers.FirstUser)
|
||||
|
||||
// record
|
||||
r.GET("/fetchHosList", handlers.FetchHospitalList)
|
||||
r.GET("/fetchAllRec", handlers.FetchAllRecords)
|
||||
r.POST("/api/insertRec", handlers.InsertRecord)
|
||||
|
||||
// hospital
|
||||
r.GET("/fetchHosList", handlers.FetchHospitalList) // fetch all hospitals
|
||||
r.POST("/api/addHos", handlers.AddHospital) // add hospital
|
||||
r.POST("/api/modifyHos", handlers.ModifyHospital) // modify hospital
|
||||
r.DELETE("/api/deleteHos", handlers.DeleteHospital) // delete hospital
|
||||
|
||||
// sms
|
||||
r.POST("/api/sendSMS", sms.Request)
|
||||
r.POST("/api/validateSMS", sms.Validate)
|
||||
return r
|
||||
}
|
||||
|
112
services/sms/RequestHandler.go
Normal file
112
services/sms/RequestHandler.go
Normal file
@ -0,0 +1,112 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
"health-go/config"
|
||||
"health-go/models"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Request(c *gin.Context) {
|
||||
var user struct {
|
||||
Tel string `json:"tel"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&user); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"code": 400,
|
||||
"msg": "无效的请求参数",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
if PreValidate(user.Tel) == "notExist" {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"data": nil,
|
||||
"msg": "用户不存在, 正在注册"})
|
||||
register(user.Tel)
|
||||
return
|
||||
}
|
||||
|
||||
if PreValidate(user.Tel) == "reachLimit" {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"data": nil,
|
||||
"msg": "已达到发送上限"})
|
||||
return
|
||||
}
|
||||
|
||||
if PreValidate(user.Tel) == "ok" {
|
||||
config.DB.Table("user").Where("tel = ?", user.Tel).Update("SMS_try",
|
||||
gorm.Expr("SMS_try + ?", 1))
|
||||
code := GenerateCode()
|
||||
callBack := SendMsg(user.Tel, code)
|
||||
if callBack == "success" {
|
||||
config.RDC.Set(config.CTX, user.Tel, code, 5*time.Minute)
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"data": nil,
|
||||
"msg": "验证码已发送"})
|
||||
return
|
||||
} else if callBack == "frequency_limit" {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"data": nil,
|
||||
"msg": "服务端发送频率限制",
|
||||
})
|
||||
return
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func SendMsg(tel string, code string) string {
|
||||
client, err := dysmsapi.NewClientWithAccessKey(
|
||||
"cn-hangzhou",
|
||||
"LTAI5tAYdQcmbGAAiMhGs8sT",
|
||||
"PU5WmUbAOsSQ8lQNTMPMD170ONxBLl")
|
||||
request := dysmsapi.CreateSendSmsRequest()
|
||||
request.Scheme = "https"
|
||||
request.PhoneNumbers = tel //手机号变量值
|
||||
request.SignName = "Biter健康助手" //签名
|
||||
request.TemplateCode = "SMS_472460337" //模板编码
|
||||
request.TemplateParam = "{\"code\":\"" + code + "\"}"
|
||||
response, err := client.SendSms(request)
|
||||
// Aliyun SMS API callback response code
|
||||
fmt.Println(response.Code)
|
||||
if response.Code == "isv.BUSINESS_LIMIT_CONTROL" {
|
||||
return "frequency_limit"
|
||||
}
|
||||
if err != nil {
|
||||
fmt.Print(err.Error())
|
||||
return "send failed: " + err.Error()
|
||||
}
|
||||
return "success"
|
||||
}
|
||||
|
||||
// GenerateCode 生成6位随机验证码
|
||||
func GenerateCode() string {
|
||||
rand.NewSource(time.Now().UnixNano())
|
||||
code := rand.Intn(899999) + 100000
|
||||
res := strconv.Itoa(code)
|
||||
return res
|
||||
}
|
||||
|
||||
// 注册
|
||||
func register(userTel string) {
|
||||
user := models.User{Tel: userTel}
|
||||
// 写入数据库,用户ID自增
|
||||
if err := config.DB.Select("tel").Create(&user).Error; err != nil {
|
||||
fmt.Println("register error:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("register success for", userTel)
|
||||
}
|
52
services/sms/ValidateHandler.go
Normal file
52
services/sms/ValidateHandler.go
Normal file
@ -0,0 +1,52 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"health-go/config"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func Validate(c *gin.Context) {
|
||||
var user struct {
|
||||
Tel string `json:"tel"`
|
||||
Code string `json:"code"`
|
||||
}
|
||||
if err := c.ShouldBindJSON(&user); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"code": 400,
|
||||
"msg": "无效的请求参数",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
storageCode, err := config.RDC.Get(config.CTX, user.Tel).Result()
|
||||
fmt.Println("storageCode:", storageCode)
|
||||
|
||||
if errors.Is(err, redis.Nil) {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"msg": "验证码已过期",
|
||||
"data": nil,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if user.Code != storageCode {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": 200,
|
||||
"msg": "验证码错误",
|
||||
"data": nil,
|
||||
})
|
||||
} else {
|
||||
fmt.Println("验证码正确,删除redis中的验证码")
|
||||
config.RDC.Del(config.CTX, user.Tel)
|
||||
c.JSON(http.StatusOK, gin.H{"code": 200,
|
||||
"msg": "验证码正确",
|
||||
"data": nil,
|
||||
})
|
||||
}
|
||||
}
|
27
services/sms/preValidate.go
Normal file
27
services/sms/preValidate.go
Normal file
@ -0,0 +1,27 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"health-go/config"
|
||||
"health-go/models"
|
||||
)
|
||||
|
||||
// PreValidate 判断用户是否存在
|
||||
// @param userTel 用户手机号
|
||||
// @return string notExist, reachLimit, ok, error
|
||||
func PreValidate(userTel string) string {
|
||||
|
||||
var result models.User
|
||||
// 计数查询是否存在对应的手机号
|
||||
query := config.DB.Table("user").Where("tel = ?", userTel).First(&result)
|
||||
if query.Error != nil {
|
||||
return fmt.Sprint(query.Error)
|
||||
}
|
||||
if query.RowsAffected == 0 {
|
||||
return "notExist"
|
||||
}
|
||||
if result.SMSTry > 10 {
|
||||
return "reachLimit"
|
||||
}
|
||||
return "ok"
|
||||
}
|
1
tools/RedisOperator.go
Normal file
1
tools/RedisOperator.go
Normal file
@ -0,0 +1 @@
|
||||
package tools
|
Loading…
Reference in New Issue
Block a user