Files
go-gin-api/internal/services/authorized/service_detailbykey.go

92 lines
2.5 KiB
Go
Raw Normal View History

package authorized
2021-04-10 15:05:50 +08:00
import (
"encoding/json"
2021-05-15 13:01:30 +08:00
"github.com/xinliangnote/go-gin-api/configs"
2021-04-10 15:05:50 +08:00
"github.com/xinliangnote/go-gin-api/internal/pkg/core"
"github.com/xinliangnote/go-gin-api/internal/repository/mysql"
"github.com/xinliangnote/go-gin-api/internal/repository/mysql/authorized"
"github.com/xinliangnote/go-gin-api/internal/repository/mysql/authorized_api"
"github.com/xinliangnote/go-gin-api/internal/repository/redis"
2021-04-10 15:05:50 +08:00
)
// CacheAuthorizedData 缓存结构
2021-04-10 15:05:50 +08:00
type CacheAuthorizedData struct {
Key string `json:"key"` // 调用方 key
Secret string `json:"secret"` // 调用方 secret
IsUsed int32 `json:"is_used"` // 调用方启用状态 1=启用 -1=禁用
Apis []cacheApiData `json:"apis"` // 调用方授权的 Apis
}
type cacheApiData struct {
Method string `json:"method"` // 请求方式
Api string `json:"api"` // 请求地址
}
func (s *service) DetailByKey(ctx core.Context, key string) (cacheData *CacheAuthorizedData, err error) {
// 查询缓存
2021-05-15 13:01:30 +08:00
cacheKey := configs.RedisKeyPrefixSignature + key
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
if !s.cache.Exists(cacheKey) {
// 查询调用方信息
authorizedInfo, err := authorized.NewQueryBuilder().
WhereIsDeleted(mysql.EqualPredicate, -1).
WhereBusinessKey(mysql.EqualPredicate, key).
2021-05-22 16:05:51 +08:00
First(s.db.GetDbR().WithContext(ctx.RequestContext()))
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
if err != nil {
return nil, err
}
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
// 查询调用方授权 API 信息
authorizedApiInfo, err := authorized_api.NewQueryBuilder().
WhereIsDeleted(mysql.EqualPredicate, -1).
WhereBusinessKey(mysql.EqualPredicate, key).
2021-05-22 16:05:51 +08:00
OrderById(false).
QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
if err != nil {
return nil, err
}
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
// 设置缓存 data
cacheData = new(CacheAuthorizedData)
cacheData.Key = key
cacheData.Secret = authorizedInfo.BusinessSecret
cacheData.IsUsed = authorizedInfo.IsUsed
cacheData.Apis = make([]cacheApiData, len(authorizedApiInfo))
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
for k, v := range authorizedApiInfo {
data := cacheApiData{
Method: v.Method,
Api: v.Api,
}
cacheData.Apis[k] = data
}
cacheDataByte, _ := json.Marshal(cacheData)
err = s.cache.Set(cacheKey, string(cacheDataByte), configs.LoginSessionTTL, redis.WithTrace(ctx.Trace()))
2021-05-22 16:05:51 +08:00
if err != nil {
return nil, err
2021-04-10 15:05:50 +08:00
}
2021-05-22 16:05:51 +08:00
return cacheData, nil
2021-04-10 15:05:50 +08:00
}
value, err := s.cache.Get(cacheKey, redis.WithTrace(ctx.RequestContext().Trace))
2021-05-22 16:05:51 +08:00
if err != nil {
return nil, err
}
2021-04-10 15:05:50 +08:00
2021-05-22 16:05:51 +08:00
cacheData = new(CacheAuthorizedData)
err = json.Unmarshal([]byte(value), cacheData)
2021-04-10 15:05:50 +08:00
if err != nil {
return nil, err
}
return
2021-05-22 16:05:51 +08:00
2021-04-10 15:05:50 +08:00
}