|
|
package data
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
"database/sql"
|
|
|
"driver/api/verifyCode"
|
|
|
"driver/internal/biz"
|
|
|
"github.com/go-kratos/kratos/contrib/registry/consul/v2"
|
|
|
"github.com/go-kratos/kratos/v2/transport/grpc"
|
|
|
"github.com/hashicorp/consul/api"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
type DriverData struct {
|
|
|
data *Data
|
|
|
}
|
|
|
|
|
|
func NewDriverInterface(data *Data) biz.DriverInterface {
|
|
|
return &DriverData{data: data}
|
|
|
}
|
|
|
|
|
|
// 获取token的实现
|
|
|
func (dt *DriverData) GetToken(ctx context.Context, tel string) (string, error) {
|
|
|
// 1.数据表查询
|
|
|
driver := biz.Driver{}
|
|
|
if err := dt.data.Mdb.Where("telephone=?", tel).First(&driver).Error; err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
|
|
|
// 2.返回token
|
|
|
return driver.Token.String, nil
|
|
|
}
|
|
|
|
|
|
// 获取已存储的验证码验证码
|
|
|
func (dt *DriverData) GetSavedVerifyCode(ctx context.Context, tel string) (string, error) {
|
|
|
return dt.data.Rdb.Get(ctx, "DVC:"+tel).Result()
|
|
|
}
|
|
|
|
|
|
// 存储token到数据表
|
|
|
func (dt *DriverData) SaveToken(ctx context.Context, tel, token string) error {
|
|
|
|
|
|
//先获取司机信息
|
|
|
driver := biz.Driver{}
|
|
|
if err := dt.data.Mdb.Where("telephone=?", tel).First(&driver).Error; err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
//再更新司机信息
|
|
|
driver.Token = sql.NullString{
|
|
|
String: token,
|
|
|
Valid: true,
|
|
|
}
|
|
|
if err := dt.data.Mdb.Save(&driver).Error; err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// 初始化司机信息
|
|
|
func (dt *DriverData) InitDriverInfo(ctx context.Context, tel string) (*biz.Driver, error) {
|
|
|
// 入库,设置状态未stop
|
|
|
driver := biz.Driver{}
|
|
|
driver.Telephone = tel
|
|
|
driver.Status = sql.NullString{
|
|
|
String: "stop",
|
|
|
Valid: true,
|
|
|
}
|
|
|
if err := dt.data.Mdb.Create(&driver).Error; err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
return &driver, nil
|
|
|
}
|
|
|
|
|
|
func (dt *DriverData) GetVerifyCode(ctx context.Context, tel string) (string, error) {
|
|
|
// grpc 请求
|
|
|
consulConfig := api.DefaultConfig()
|
|
|
consulConfig.Address = dt.data.cs.Consul.Address
|
|
|
consulClient, err := api.NewClient(consulConfig)
|
|
|
dis := consul.New(consulClient)
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
endpoint := "discovery:///VerifyCode"
|
|
|
conn, err := grpc.DialInsecure(
|
|
|
ctx,
|
|
|
grpc.WithEndpoint(endpoint), // 目标服务的名字
|
|
|
grpc.WithDiscovery(dis), // 使用服务发现
|
|
|
)
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
//关闭
|
|
|
defer conn.Close()
|
|
|
|
|
|
// 2.2,发送获取验证码请求
|
|
|
client := verifyCode.NewVerifyCodeClient(conn)
|
|
|
reply, err := client.GetVerifyCode(ctx, &verifyCode.GetVerifyCodeRequest{
|
|
|
Length: 6,
|
|
|
Type: 1,
|
|
|
})
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
|
|
|
// 三,redis的临时存储
|
|
|
// 设置key, customer-verify-code
|
|
|
status := dt.data.Rdb.Set(ctx, "DVC:"+tel, reply.Code, 60*time.Second)
|
|
|
if _, err := status.Result(); err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
return reply.Code, nil
|
|
|
}
|
|
|
|
|
|
// 获取号码对应的验证码
|
|
|
func (dt *DriverData) FetchVerifyCode(ctx context.Context, telephone string) (string, error) {
|
|
|
status := dt.data.Rdb.Get(context.Background(), "DVC:"+telephone)
|
|
|
code, err := status.Result() // status.String()
|
|
|
if err != nil {
|
|
|
return "", err
|
|
|
}
|
|
|
return code, nil
|
|
|
}
|
|
|
|
|
|
func (dt *DriverData) FetchInfoByTel(ctx context.Context, tel string) (*biz.Driver, error) {
|
|
|
driver := &biz.Driver{}
|
|
|
if err := dt.data.Mdb.Where("telephone=?", tel).First(driver).Error; err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
return driver, nil
|
|
|
}
|