Browse Source

add batch add ab from peer
add batch update ab tags

lejianwen 1 year ago
parent
commit
8c0ac5621a

+ 68 - 0
http/controller/admin/addressBook.go

@@ -6,6 +6,7 @@ import (
6 6
 	"Gwen/http/response"
7 7
 	"Gwen/model"
8 8
 	"Gwen/service"
9
+	"encoding/json"
9 10
 	_ "encoding/json"
10 11
 	"github.com/gin-gonic/gin"
11 12
 	"gorm.io/gorm"
@@ -327,3 +328,70 @@ func (ct *AddressBook) ShareByWebClient(c *gin.Context) {
327 328
 		"share_token": m.ShareToken,
328 329
 	})
329 330
 }
331
+
332
+func (ct *AddressBook) BatchCreateFromPeers(c *gin.Context) {
333
+	f := &admin.BatchCreateFromPeersForm{}
334
+	if err := c.ShouldBindJSON(f); err != nil {
335
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
336
+		return
337
+	}
338
+	u := service.AllService.UserService.CurUser(c)
339
+
340
+	if f.CollectionId != 0 {
341
+		collection := service.AllService.AddressBookService.CollectionInfoById(f.CollectionId)
342
+		if collection.Id == 0 {
343
+			response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
344
+			return
345
+		}
346
+		if collection.UserId != u.Id {
347
+			response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
348
+			return
349
+		}
350
+	}
351
+
352
+	peers := service.AllService.PeerService.List(1, 999, func(tx *gorm.DB) {
353
+		tx.Where("row_id in ?", f.PeerIds)
354
+		tx.Where("user_id = ?", u.Id)
355
+	})
356
+	if peers.Total == 0 {
357
+		response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
358
+		return
359
+	}
360
+
361
+	tags, _ := json.Marshal(f.Tags)
362
+	for _, peer := range peers.Peers {
363
+		ab := service.AllService.AddressBookService.FromPeer(peer)
364
+		ab.Tags = tags
365
+		ab.CollectionId = f.CollectionId
366
+		ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(u.Id, ab.Id, ab.CollectionId)
367
+		if ex.RowId != 0 {
368
+			continue
369
+		}
370
+		service.AllService.AddressBookService.Create(ab)
371
+	}
372
+	response.Success(c, nil)
373
+}
374
+
375
+func (ct *AddressBook) BatchUpdateTags(c *gin.Context) {
376
+	f := &admin.BatchUpdateTagsForm{}
377
+	if err := c.ShouldBindJSON(f); err != nil {
378
+		response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
379
+		return
380
+	}
381
+	u := service.AllService.UserService.CurUser(c)
382
+
383
+	abs := service.AllService.AddressBookService.List(1, 999, func(tx *gorm.DB) {
384
+		tx.Where("row_id in ?", f.RowIds)
385
+		tx.Where("user_id = ?", u.Id)
386
+	})
387
+	if abs.Total == 0 {
388
+		response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
389
+		return
390
+	}
391
+	err := service.AllService.AddressBookService.BatchUpdateTags(abs.AddressBooks, f.Tags)
392
+	if err != nil {
393
+		response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
394
+		return
395
+	}
396
+	response.Success(c, nil)
397
+}

+ 10 - 0
http/request/admin/addressBook.go

@@ -122,3 +122,13 @@ type AddressBookCollectionRuleQuery struct {
122 122
 	IsMy         int `form:"is_my"`
123 123
 	PageQuery
124 124
 }
125
+
126
+type BatchCreateFromPeersForm struct {
127
+	CollectionId uint     `json:"collection_id"`
128
+	PeerIds      []uint   `json:"peer_ids"`
129
+	Tags         []string `json:"tags"`
130
+}
131
+type BatchUpdateTagsForm struct {
132
+	RowIds []uint   `json:"row_ids"`
133
+	Tags   []string `json:"tags"`
134
+}

+ 3 - 0
http/router/admin.go

@@ -107,9 +107,12 @@ func AddressBookBind(rg *gin.RouterGroup) {
107 107
 		aR.POST("/update", cont.Update)
108 108
 		aR.POST("/delete", cont.Delete)
109 109
 		aR.POST("/shareByWebClient", cont.ShareByWebClient)
110
+		aR.POST("/batchCreateFromPeers", cont.BatchCreateFromPeers)
111
+		aR.POST("/batchUpdateTags", cont.BatchUpdateTags)
110 112
 
111 113
 		arp := aR.Use(middleware.AdminPrivilege())
112 114
 		arp.POST("/batchCreate", cont.BatchCreate)
115
+
113 116
 	}
114 117
 }
115 118
 func PeerBind(rg *gin.RouterGroup) {

+ 20 - 0
service/addressBook.go

@@ -3,6 +3,7 @@ package service
3 3
 import (
4 4
 	"Gwen/global"
5 5
 	"Gwen/model"
6
+	"encoding/json"
6 7
 	"github.com/google/uuid"
7 8
 	"gorm.io/gorm"
8 9
 	"strings"
@@ -116,6 +117,16 @@ func (s *AddressBookService) List(page, pageSize uint, where func(tx *gorm.DB))
116 117
 	return
117 118
 }
118 119
 
120
+func (s *AddressBookService) FromPeer(peer *model.Peer) (a *model.AddressBook) {
121
+	a = &model.AddressBook{}
122
+	a.Id = peer.Id
123
+	a.Username = peer.Username
124
+	a.Hostname = peer.Hostname
125
+	a.UserId = peer.UserId
126
+	a.Platform = s.PlatformFromOs(peer.Os)
127
+	return a
128
+}
129
+
119 130
 // Create 创建
120 131
 func (s *AddressBookService) Create(u *model.AddressBook) error {
121 132
 	res := global.DB.Create(u).Error
@@ -318,3 +329,12 @@ func (s *AddressBookService) CheckCollectionOwner(uid uint, cid uint) bool {
318 329
 	p := s.CollectionInfoById(cid)
319 330
 	return p.UserId == uid
320 331
 }
332
+
333
+func (s *AddressBookService) BatchUpdateTags(abs []*model.AddressBook, tags []string) error {
334
+	ids := make([]uint, 0)
335
+	for _, ab := range abs {
336
+		ids = append(ids, ab.RowId)
337
+	}
338
+	tagsv, _ := json.Marshal(tags)
339
+	return global.DB.Model(&model.AddressBook{}).Where("row_id in ?", ids).Update("tags", tagsv).Error
340
+}