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