12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package authorized
- import (
- "encoding/json"
- "github.com/xinliangnote/go-gin-api/configs"
- "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"
- )
- // CacheAuthorizedData 缓存结构
- 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) {
- // 查询缓存
- cacheKey := configs.RedisKeyPrefixSignature + key
- if !s.cache.Exists(cacheKey) {
- // 查询调用方信息
- authorizedInfo, err := authorized.NewQueryBuilder().
- WhereIsDeleted(mysql.EqualPredicate, -1).
- WhereBusinessKey(mysql.EqualPredicate, key).
- First(s.db.GetDbR().WithContext(ctx.RequestContext()))
- if err != nil {
- return nil, err
- }
- // 查询调用方授权 API 信息
- authorizedApiInfo, err := authorized_api.NewQueryBuilder().
- WhereIsDeleted(mysql.EqualPredicate, -1).
- WhereBusinessKey(mysql.EqualPredicate, key).
- OrderById(false).
- QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
- if err != nil {
- return nil, err
- }
- // 设置缓存 data
- cacheData = new(CacheAuthorizedData)
- cacheData.Key = key
- cacheData.Secret = authorizedInfo.BusinessSecret
- cacheData.IsUsed = authorizedInfo.IsUsed
- cacheData.Apis = make([]cacheApiData, len(authorizedApiInfo))
- 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()))
- if err != nil {
- return nil, err
- }
- return cacheData, nil
- }
- value, err := s.cache.Get(cacheKey, redis.WithTrace(ctx.RequestContext().Trace))
- if err != nil {
- return nil, err
- }
- cacheData = new(CacheAuthorizedData)
- err = json.Unmarshal([]byte(value), cacheData)
- if err != nil {
- return nil, err
- }
- return
- }
|