package my import ( "Gwen/http/request/admin" "Gwen/http/response" "Gwen/service" "encoding/json" "github.com/gin-gonic/gin" "gorm.io/gorm" ) type AddressBook struct{} func (ct *AddressBook) BatchCreateFromPeers(c *gin.Context) { f := &admin.BatchCreateFromPeersForm{} if err := c.ShouldBindJSON(f); err != nil { response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error()) return } u := service.AllService.UserService.CurUser(c) if f.CollectionId != 0 { collection := service.AllService.AddressBookService.CollectionInfoById(f.CollectionId) if collection.Id == 0 { response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound")) return } if collection.UserId != u.Id { response.Fail(c, 101, response.TranslateMsg(c, "NoAccess")) return } } if len(f.PeerIds) == 0 { response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")) return } pl := int64(len(f.PeerIds)) peers := service.AllService.PeerService.List(1, uint(pl), func(tx *gorm.DB) { tx.Where("row_id in ?", f.PeerIds) tx.Where("user_id = ?", u.Id) }) if peers.Total == 0 || pl != peers.Total { response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound")) return } tags, _ := json.Marshal(f.Tags) for _, peer := range peers.Peers { ab := service.AllService.AddressBookService.FromPeer(peer) ab.Tags = tags ab.CollectionId = f.CollectionId ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(u.Id, ab.Id, ab.CollectionId) if ex.RowId != 0 { continue } service.AllService.AddressBookService.Create(ab) } response.Success(c, nil) }