From c52ee4d80de792008522edfb3f06d67b20df4cb5 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 19 十月 2023 11:38:42 +0800
Subject: [PATCH] 同步用户只同步当前登录用户
---
middleware/user.go | 10 +++++-----
service/lru.go | 12 ++++++------
middleware/jwt.go | 2 +-
model/user.go | 10 +++++++---
4 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/middleware/jwt.go b/middleware/jwt.go
index 240bf09..6fae7ea 100644
--- a/middleware/jwt.go
+++ b/middleware/jwt.go
@@ -107,7 +107,7 @@
}
userInfo := service.GetUserBaseCache(claims.UserId)
if userInfo == nil {
- SyncUserInfo()
+ SyncUserInfo(claims.UserId)
userInfo = service.GetUserBaseCache(claims.UserId)
}
claims.CrmUserId = userInfo.UserId
diff --git a/middleware/user.go b/middleware/user.go
index f1e4487..1f0caac 100644
--- a/middleware/user.go
+++ b/middleware/user.go
@@ -59,11 +59,11 @@
return rsp.Result
}
-func SyncUserInfo() {
+func SyncUserInfo(uuid string) {
cli := user.NewUserServiceClient(userConn)
-
- var users []*user.User
-
+ var users = []*user.User{
+ {Uuid: uuid},
+ }
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := cli.SyncUser(ctx, &user.UserRequest{Users: users})
@@ -75,7 +75,7 @@
fmt.Printf("Synced: %v, Message: %s", r.List, r.Message)
for _, member := range r.List {
- err = model.NewUserSearch(nil).FirstOrCreate(model.User{
+ err = model.NewUserSearch(nil).Upsert(model.User{
UUID: member.Uuid,
Username: member.Username,
UserType: constvar.UserType(member.Usertype),
diff --git a/model/user.go b/model/user.go
index 925d6d7..318a24b 100644
--- a/model/user.go
+++ b/model/user.go
@@ -5,13 +5,14 @@
"aps_crm/pkg/mysqlx"
"fmt"
"gorm.io/gorm"
+ "gorm.io/gorm/clause"
)
type (
// User token閲岃竟鎶婄敤鎴稩D銆佺埗鐢ㄦ埛ID銆佽鑹查兘甯︿笂
User struct {
ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
- UUID string `json:"uuid" gorm:"primaryKey;type:varchar(255);comment:鐢ㄦ埛ID"`
+ UUID string `json:"uuid" gorm:"unique;type:varchar(255);comment:鐢ㄦ埛ID"`
Username string `json:"username" gorm:"index;type:varchar(255);comment:鐢ㄦ埛鐧诲綍鍚�"`
UserType constvar.UserType `json:"userType" gorm:"type:int(11);comment:鐢ㄦ埛绫诲瀷 1瓒呯骇绠$悊鍛� 2涓昏处鎴� 3瀛愯处鎴�"`
Password string `json:"-" gorm:"type:varchar(255);comment:鐢ㄦ埛鐧诲綍瀵嗙爜"`
@@ -277,10 +278,13 @@
return records, nil
}
-func (slf *UserSearch) FirstOrCreate(record User) error {
+func (slf *UserSearch) Upsert(record User) error {
var db = slf.build()
- if err := db.FirstOrCreate(&User{}, record).Error; err != nil {
+ if err := db.Clauses(clause.OnConflict{
+ Columns: []clause.Column{{Name: "uuid"}},
+ DoUpdates: clause.AssignmentColumns([]string{"uuid", "username", "user_type", "nick_name"}),
+ }).Create(&record).Error; err != nil {
return fmt.Errorf("first or create err: %v, record: %+v", err, record)
}
diff --git a/service/lru.go b/service/lru.go
index b212997..a09d09f 100644
--- a/service/lru.go
+++ b/service/lru.go
@@ -5,19 +5,19 @@
"time"
)
-type userBaseInfo struct {
+type UserBaseInfo struct {
UserId int
NickName string
}
-var userCache *expirable.LRU[string, *userBaseInfo]
+var userCache *expirable.LRU[string, *UserBaseInfo]
func init() {
//make cache with 5 minutes TTL and 100 max keys
- userCache = expirable.NewLRU[string, *userBaseInfo](100, nil, time.Minute*5)
+ userCache = expirable.NewLRU[string, *UserBaseInfo](100, nil, time.Minute*5)
}
-func GetUserBaseCache(adminUserId string) *userBaseInfo {
+func GetUserBaseCache(adminUserId string) *UserBaseInfo {
userCache, ok := userCache.Get(adminUserId)
if !ok {
userService := UserService{}
@@ -25,7 +25,7 @@
if err != nil {
return nil
}
- baseInfo := &userBaseInfo{
+ baseInfo := &UserBaseInfo{
UserId: userRecord.ID,
NickName: userRecord.NickName,
}
@@ -35,6 +35,6 @@
return userCache
}
-func SetUserBaseCache(adminUserId string, user *userBaseInfo) {
+func SetUserBaseCache(adminUserId string, user *UserBaseInfo) {
_ = userCache.Add(adminUserId, user)
}
--
Gitblit v1.8.0