survey_token.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package survey_token
  2. import (
  3. "fmt"
  4. "surveyService/cache"
  5. "surveyService/response"
  6. "surveyService/util"
  7. "surveyService/validators"
  8. "time"
  9. jsoniter "github.com/json-iterator/go"
  10. "gogs.uu.mdfitnesscao.com/hys/sdk"
  11. )
  12. var json = jsoniter.ConfigCompatibleWithStandardLibrary
  13. type Mechanism struct {
  14. *sdk.AuthMechanism
  15. }
  16. func InitMechanism(authMechanism *sdk.AuthMechanism) *Mechanism {
  17. return &Mechanism{authMechanism}
  18. }
  19. // 生成一个临时凭证
  20. func (m *Mechanism) GenerateSurveyToken(surveyId, surveyResultId, extra string, expired int64) string {
  21. var tokenData = &validators.SurveyToken{
  22. Extra: extra,
  23. SurveyId: surveyId,
  24. MechanismId: m.Mechanism.ID,
  25. SurveyResultId: surveyResultId,
  26. }
  27. token := util.RandString(12)
  28. cacheKey := fmt.Sprintf("survey-result:token:%s", token)
  29. expiredAt := time.Duration(expired) * time.Second
  30. // 保存到redis
  31. cacheErr := cache.Instance().Put(cacheKey, tokenData, expiredAt)
  32. if cacheErr != nil {
  33. return ""
  34. }
  35. return token
  36. }
  37. // 重新修改凭证里存储的数据
  38. func RenewSurveyToken(token string, renewSurveyToken *validators.SurveyToken, expired int64) *response.ErrCode {
  39. tokenData, getErr := GetSurveyTokenData(token)
  40. if getErr != nil {
  41. return getErr
  42. }
  43. var renewTokenData = &validators.SurveyToken{
  44. Extra: tokenData.Extra,
  45. SurveyId: tokenData.SurveyId,
  46. MechanismId: tokenData.MechanismId,
  47. SurveyResultId: renewSurveyToken.SurveyResultId,
  48. }
  49. cacheKey := fmt.Sprintf("survey-result:token:%s", token)
  50. expiredAt := time.Duration(expired) * time.Second
  51. // 保存到redis
  52. cacheErr := cache.Instance().Put(cacheKey, renewTokenData, expiredAt)
  53. if cacheErr != nil {
  54. return &response.ErrCode{
  55. Msg: "数据更新失败",
  56. Code: response.ERROR,
  57. }
  58. }
  59. return nil
  60. }
  61. // 获取临时凭证的数据
  62. func GetSurveyTokenData(token string) (*validators.SurveyToken, *response.ErrCode) {
  63. cacheKey := fmt.Sprintf("survey-result:token:%s", token)
  64. var tokenData *validators.SurveyToken
  65. tokenDataStr, cacheErr := cache.Instance().Get(cacheKey)
  66. if cacheErr != nil {
  67. return nil, &response.ErrCode{
  68. Msg: "无效的凭证信息",
  69. Code: response.ERROR,
  70. }
  71. }
  72. json.UnmarshalFromString(tokenDataStr, &tokenData)
  73. return tokenData, nil
  74. }
  75. // 移除临时凭证
  76. func RemoveSurveyToken(token string) {
  77. cacheKey := fmt.Sprintf("survey-result:token:%s", token)
  78. cache.Instance().Delete(cacheKey)
  79. }