fix: status updates are performed when the user status is inconsistent

This commit is contained in:
LinkinStar 2022-10-20 18:21:38 +08:00
parent c8da6a3087
commit 2672230e31
4 changed files with 33 additions and 2 deletions

View File

@ -91,7 +91,8 @@ func (uc *UserController) GetOtherUserInfoByUsername(ctx *gin.Context) {
// @Router /answer/api/v1/user/status [get]
func (uc *UserController) GetUserStatus(ctx *gin.Context) {
userID := middleware.GetLoginUserIDFromContext(ctx)
resp, err := uc.userService.GetUserStatus(ctx, userID)
token := middleware.ExtractToken(ctx)
resp, err := uc.userService.GetUserStatus(ctx, userID, token)
handler.HandleResponse(ctx, err, resp)
}

View File

@ -43,6 +43,14 @@ func (ar *authRepo) GetUserStatus(ctx context.Context, userID string) (userInfo
return userInfo, nil
}
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
}
func (ar *authRepo) SetUserCacheInfo(ctx context.Context, accessToken string, userInfo *entity.UserCacheInfo) (err error) {
userInfoCache, err := json.Marshal(userInfo)
if err != nil {

View File

@ -14,6 +14,7 @@ type AuthRepo interface {
SetUserCacheInfo(ctx context.Context, accessToken string, userInfo *entity.UserCacheInfo) error
RemoveUserCacheInfo(ctx context.Context, accessToken string) (err error)
GetUserStatus(ctx context.Context, userID string) (userInfo *entity.UserCacheInfo, err error)
RemoveUserStatus(ctx context.Context, userID string) (err error)
GetCmsUserCacheInfo(ctx context.Context, accessToken string) (userInfo *entity.UserCacheInfo, err error)
SetCmsUserCacheInfo(ctx context.Context, accessToken string, userInfo *entity.UserCacheInfo) error
RemoveCmsUserCacheInfo(ctx context.Context, accessToken string) (err error)
@ -56,6 +57,17 @@ func (as *AuthService) SetUserCacheInfo(ctx context.Context, userInfo *entity.Us
return accessToken, err
}
func (as *AuthService) UpdateUserCacheInfo(ctx context.Context, token string, userInfo *entity.UserCacheInfo) (err error) {
err = as.authRepo.SetUserCacheInfo(ctx, token, userInfo)
if err != nil {
return err
}
if err := as.authRepo.RemoveUserStatus(ctx, userInfo.UserID); err != nil {
log.Error(err)
}
return
}
func (as *AuthService) RemoveUserCacheInfo(ctx context.Context, accessToken string) (err error) {
return as.authRepo.RemoveUserCacheInfo(ctx, accessToken)
}

View File

@ -65,7 +65,7 @@ func (us *UserService) GetUserInfoByUserID(ctx context.Context, token, userID st
}
// GetUserStatus get user info by user id
func (us *UserService) GetUserStatus(ctx context.Context, userID string) (resp *schema.GetUserStatusResp, err error) {
func (us *UserService) GetUserStatus(ctx context.Context, userID, token string) (resp *schema.GetUserStatusResp, err error) {
resp = &schema.GetUserStatusResp{}
if len(userID) == 0 {
return resp, nil
@ -77,6 +77,16 @@ func (us *UserService) GetUserStatus(ctx context.Context, userID string) (resp *
if !exist {
return nil, errors.BadRequest(reason.UserNotFound)
}
userCacheInfo := &entity.UserCacheInfo{
UserID: userID,
UserStatus: userInfo.Status,
EmailStatus: userInfo.MailStatus,
}
err = us.authService.UpdateUserCacheInfo(ctx, token, userCacheInfo)
if err != nil {
return nil, err
}
resp = &schema.GetUserStatusResp{
Status: schema.UserStatusShow[userInfo.Status],
}