| package auth |
| |
| import ( |
| "context" |
| "encoding/json" |
| |
| "github.com/answerdev/answer/internal/base/constant" |
| "github.com/answerdev/answer/internal/base/data" |
| "github.com/answerdev/answer/internal/base/reason" |
| "github.com/answerdev/answer/internal/entity" |
| "github.com/answerdev/answer/internal/service/auth" |
| "github.com/segmentfault/pacman/errors" |
| ) |
| |
| // authRepo auth repository |
| type authRepo struct { |
| data *data.Data |
| } |
| |
| // GetUserCacheInfo get user cache info |
| func (ar *authRepo) GetUserCacheInfo(ctx context.Context, accessToken string) (userInfo *entity.UserCacheInfo, err error) { |
| userInfoCache, err := ar.data.Cache.GetString(ctx, constant.UserTokenCacheKey+accessToken) |
| if err != nil { |
| return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| userInfo = &entity.UserCacheInfo{} |
| err = json.Unmarshal([]byte(userInfoCache), userInfo) |
| if err != nil { |
| return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return userInfo, nil |
| } |
| |
| // SetUserCacheInfo set user cache info |
| func (ar *authRepo) SetUserCacheInfo(ctx context.Context, accessToken string, userInfo *entity.UserCacheInfo) (err error) { |
| userInfoCache, err := json.Marshal(userInfo) |
| if err != nil { |
| return err |
| } |
| err = ar.data.Cache.SetString(ctx, constant.UserTokenCacheKey+accessToken, |
| string(userInfoCache), constant.UserTokenCacheTime) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // RemoveUserCacheInfo remove user cache info |
| func (ar *authRepo) RemoveUserCacheInfo(ctx context.Context, accessToken string) (err error) { |
| err = ar.data.Cache.Del(ctx, constant.UserTokenCacheKey+accessToken) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // SetUserStatus set user status |
| func (ar *authRepo) SetUserStatus(ctx context.Context, userID string, userInfo *entity.UserCacheInfo) (err error) { |
| userInfoCache, err := json.Marshal(userInfo) |
| if err != nil { |
| return err |
| } |
| err = ar.data.Cache.SetString(ctx, constant.UserStatusChangedCacheKey+userID, |
| string(userInfoCache), constant.UserStatusChangedCacheTime) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // GetUserStatus get user status |
| func (ar *authRepo) GetUserStatus(ctx context.Context, userID string) (userInfo *entity.UserCacheInfo, err error) { |
| userInfoCache, err := ar.data.Cache.GetString(ctx, constant.UserStatusChangedCacheKey+userID) |
| if err != nil { |
| return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| userInfo = &entity.UserCacheInfo{} |
| err = json.Unmarshal([]byte(userInfoCache), userInfo) |
| if err != nil { |
| return nil, errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return userInfo, nil |
| } |
| |
| // RemoveUserStatus remove user status |
| func (ar *authRepo) RemoveUserStatus(ctx context.Context, userID string) (err error) { |
| err = ar.data.Cache.Del(ctx, constant.UserStatusChangedCacheKey+userID) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // GetBackyardUserCacheInfo get backyard user cache info |
| func (ar *authRepo) GetBackyardUserCacheInfo(ctx context.Context, accessToken string) (userInfo *entity.UserCacheInfo, err error) { |
| userInfoCache, err := ar.data.Cache.GetString(ctx, constant.AdminTokenCacheKey+accessToken) |
| if err != nil { |
| err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| return |
| } |
| userInfo = &entity.UserCacheInfo{} |
| err = json.Unmarshal([]byte(userInfoCache), userInfo) |
| if err != nil { |
| return nil, err |
| } |
| return userInfo, nil |
| } |
| |
| // SetBackyardUserCacheInfo set backyard user cache info |
| func (ar *authRepo) SetBackyardUserCacheInfo(ctx context.Context, accessToken string, userInfo *entity.UserCacheInfo) (err error) { |
| userInfoCache, err := json.Marshal(userInfo) |
| if err != nil { |
| return err |
| } |
| |
| err = ar.data.Cache.SetString(ctx, constant.AdminTokenCacheKey+accessToken, string(userInfoCache), |
| constant.AdminTokenCacheTime) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // RemoveBackyardUserCacheInfo remove backyard user cache info |
| func (ar *authRepo) RemoveBackyardUserCacheInfo(ctx context.Context, accessToken string) (err error) { |
| err = ar.data.Cache.Del(ctx, constant.AdminTokenCacheKey+accessToken) |
| if err != nil { |
| return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() |
| } |
| return nil |
| } |
| |
| // NewAuthRepo new repository |
| func NewAuthRepo(data *data.Data) auth.AuthRepo { |
| return &authRepo{ |
| data: data, |
| } |
| } |