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