addressBook.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. package admin
  2. import (
  3. "Gwen/global"
  4. "Gwen/http/request/admin"
  5. "Gwen/http/response"
  6. "Gwen/model"
  7. "Gwen/service"
  8. "encoding/json"
  9. _ "encoding/json"
  10. "github.com/gin-gonic/gin"
  11. "gorm.io/gorm"
  12. "strconv"
  13. )
  14. type AddressBook struct {
  15. }
  16. // Detail 地址簿
  17. // @Tags 地址簿
  18. // @Summary 地址簿详情
  19. // @Description 地址簿详情
  20. // @Accept json
  21. // @Produce json
  22. // @Param id path int true "ID"
  23. // @Success 200 {object} response.Response{data=model.AddressBook}
  24. // @Failure 500 {object} response.Response
  25. // @Router /admin/address_book/detail/{id} [get]
  26. // @Security token
  27. func (ct *AddressBook) Detail(c *gin.Context) {
  28. id := c.Param("id")
  29. iid, _ := strconv.Atoi(id)
  30. t := service.AllService.AddressBookService.InfoByRowId(uint(iid))
  31. u := service.AllService.UserService.CurUser(c)
  32. if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
  33. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  34. return
  35. }
  36. if t.RowId > 0 {
  37. response.Success(c, t)
  38. return
  39. }
  40. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  41. return
  42. }
  43. // Create 创建地址簿
  44. // @Tags 地址簿
  45. // @Summary 创建地址簿
  46. // @Description 创建地址簿
  47. // @Accept json
  48. // @Produce json
  49. // @Param body body admin.AddressBookForm true "地址簿信息"
  50. // @Success 200 {object} response.Response{data=model.AddressBook}
  51. // @Failure 500 {object} response.Response
  52. // @Router /admin/address_book/create [post]
  53. // @Security token
  54. func (ct *AddressBook) Create(c *gin.Context) {
  55. f := &admin.AddressBookForm{}
  56. if err := c.ShouldBindJSON(f); err != nil {
  57. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  58. return
  59. }
  60. errList := global.Validator.ValidStruct(c, f)
  61. if len(errList) > 0 {
  62. response.Fail(c, 101, errList[0])
  63. return
  64. }
  65. t := f.ToAddressBook()
  66. u := service.AllService.UserService.CurUser(c)
  67. if !service.AllService.UserService.IsAdmin(u) || t.UserId == 0 {
  68. t.UserId = u.Id
  69. }
  70. if t.CollectionId > 0 && !service.AllService.AddressBookService.CheckCollectionOwner(t.UserId, t.CollectionId) {
  71. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  72. return
  73. }
  74. ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(t.UserId, t.Id, t.CollectionId)
  75. if ex.RowId > 0 {
  76. response.Fail(c, 101, response.TranslateMsg(c, "ItemExists"))
  77. return
  78. }
  79. err := service.AllService.AddressBookService.Create(t)
  80. if err != nil {
  81. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  82. return
  83. }
  84. response.Success(c, nil)
  85. }
  86. // BatchCreate 批量创建地址簿
  87. // @Tags 地址簿
  88. // @Summary 批量创建地址簿
  89. // @Description 批量创建地址簿
  90. // @Accept json
  91. // @Produce json
  92. // @Param body body admin.AddressBookForm true "地址簿信息"
  93. // @Success 200 {object} response.Response{data=model.AddressBook}
  94. // @Failure 500 {object} response.Response
  95. // @Router /admin/address_book/create [post]
  96. // @Security token
  97. func (ct *AddressBook) BatchCreate(c *gin.Context) {
  98. f := &admin.AddressBookForm{}
  99. if err := c.ShouldBindJSON(f); err != nil {
  100. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  101. return
  102. }
  103. errList := global.Validator.ValidStruct(c, f)
  104. if len(errList) > 0 {
  105. response.Fail(c, 101, errList[0])
  106. return
  107. }
  108. //创建标签
  109. for _, fu := range f.UserIds {
  110. if fu == 0 {
  111. continue
  112. }
  113. for _, ft := range f.Tags {
  114. exTag := service.AllService.TagService.InfoByUserIdAndNameAndCollectionId(fu, ft, 0)
  115. if exTag.Id == 0 {
  116. service.AllService.TagService.Create(&model.Tag{
  117. UserId: fu,
  118. Name: ft,
  119. })
  120. }
  121. }
  122. }
  123. ts := f.ToAddressBooks()
  124. for _, t := range ts {
  125. if t.UserId == 0 {
  126. continue
  127. }
  128. ex := service.AllService.AddressBookService.InfoByUserIdAndId(t.UserId, t.Id)
  129. if ex.RowId == 0 {
  130. service.AllService.AddressBookService.Create(t)
  131. }
  132. }
  133. response.Success(c, nil)
  134. }
  135. // List 列表
  136. // @Tags 地址簿
  137. // @Summary 地址簿列表
  138. // @Description 地址簿列表
  139. // @Accept json
  140. // @Produce json
  141. // @Param page query int false "页码"
  142. // @Param page_size query int false "页大小"
  143. // @Param user_id query int false "用户id"
  144. // @Param is_my query int false "是否是我的"
  145. // @Success 200 {object} response.Response{data=model.AddressBookList}
  146. // @Failure 500 {object} response.Response
  147. // @Router /admin/address_book/list [get]
  148. // @Security token
  149. func (ct *AddressBook) List(c *gin.Context) {
  150. query := &admin.AddressBookQuery{}
  151. if err := c.ShouldBindQuery(query); err != nil {
  152. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  153. return
  154. }
  155. u := service.AllService.UserService.CurUser(c)
  156. if !service.AllService.UserService.IsAdmin(u) || query.IsMy == 1 {
  157. query.UserId = int(u.Id)
  158. }
  159. res := service.AllService.AddressBookService.List(query.Page, query.PageSize, func(tx *gorm.DB) {
  160. tx.Preload("Collection", func(txc *gorm.DB) *gorm.DB {
  161. return txc.Select("id,name")
  162. })
  163. if query.Id != "" {
  164. tx.Where("id like ?", "%"+query.Id+"%")
  165. }
  166. if query.UserId > 0 {
  167. tx.Where("user_id = ?", query.UserId)
  168. }
  169. if query.Username != "" {
  170. tx.Where("username like ?", "%"+query.Username+"%")
  171. }
  172. if query.Hostname != "" {
  173. tx.Where("hostname like ?", "%"+query.Hostname+"%")
  174. }
  175. if query.CollectionId != nil && *query.CollectionId >= 0 {
  176. tx.Where("collection_id = ?", query.CollectionId)
  177. }
  178. })
  179. abCIds := make([]uint, 0)
  180. for _, ab := range res.AddressBooks {
  181. abCIds = append(abCIds, ab.CollectionId)
  182. }
  183. //获取地址簿名称
  184. //cRes := service.AllService.AddressBookService.ListCollection(1, 999, func(tx *gorm.DB) {
  185. // tx.Where("id in ?", abCIds)
  186. //})
  187. //
  188. response.Success(c, res)
  189. }
  190. // Update 编辑
  191. // @Tags 地址簿
  192. // @Summary 地址簿编辑
  193. // @Description 地址簿编辑
  194. // @Accept json
  195. // @Produce json
  196. // @Param body body admin.AddressBookForm true "地址簿信息"
  197. // @Success 200 {object} response.Response{data=model.AddressBook}
  198. // @Failure 500 {object} response.Response
  199. // @Router /admin/address_book/update [post]
  200. // @Security token
  201. func (ct *AddressBook) Update(c *gin.Context) {
  202. f := &admin.AddressBookForm{}
  203. if err := c.ShouldBindJSON(f); err != nil {
  204. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  205. return
  206. }
  207. errList := global.Validator.ValidStruct(c, f)
  208. if len(errList) > 0 {
  209. response.Fail(c, 101, errList[0])
  210. return
  211. }
  212. if f.RowId == 0 {
  213. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  214. return
  215. }
  216. t := f.ToAddressBook()
  217. u := service.AllService.UserService.CurUser(c)
  218. if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
  219. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  220. return
  221. }
  222. if t.CollectionId > 0 && !service.AllService.AddressBookService.CheckCollectionOwner(t.UserId, t.CollectionId) {
  223. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  224. return
  225. }
  226. err := service.AllService.AddressBookService.UpdateAll(t)
  227. if err != nil {
  228. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  229. return
  230. }
  231. response.Success(c, nil)
  232. }
  233. // Delete 删除
  234. // @Tags 地址簿
  235. // @Summary 地址簿删除
  236. // @Description 地址簿删除
  237. // @Accept json
  238. // @Produce json
  239. // @Param body body admin.AddressBookForm true "地址簿信息"
  240. // @Success 200 {object} response.Response
  241. // @Failure 500 {object} response.Response
  242. // @Router /admin/address_book/delete [post]
  243. // @Security token
  244. func (ct *AddressBook) Delete(c *gin.Context) {
  245. f := &admin.AddressBookForm{}
  246. if err := c.ShouldBindJSON(f); err != nil {
  247. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  248. return
  249. }
  250. id := f.RowId
  251. errList := global.Validator.ValidVar(c, id, "required,gt=0")
  252. if len(errList) > 0 {
  253. response.Fail(c, 101, errList[0])
  254. return
  255. }
  256. t := service.AllService.AddressBookService.InfoByRowId(f.RowId)
  257. if t.RowId == 0 {
  258. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  259. return
  260. }
  261. u := service.AllService.UserService.CurUser(c)
  262. if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
  263. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  264. return
  265. }
  266. if u.Id > 0 {
  267. err := service.AllService.AddressBookService.Delete(t)
  268. if err == nil {
  269. response.Success(c, nil)
  270. return
  271. }
  272. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  273. return
  274. }
  275. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  276. }
  277. // ShareByWebClient
  278. // @Tags 地址簿
  279. // @Summary 地址簿分享
  280. // @Description 地址簿分享
  281. // @Accept json
  282. // @Produce json
  283. // @Param body body admin.ShareByWebClientForm true "地址簿信息"
  284. // @Success 200 {object} response.Response
  285. // @Failure 500 {object} response.Response
  286. // @Router /admin/address_book/share [post]
  287. // @Security token
  288. func (ct *AddressBook) ShareByWebClient(c *gin.Context) {
  289. f := &admin.ShareByWebClientForm{}
  290. if err := c.ShouldBindJSON(f); err != nil {
  291. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  292. return
  293. }
  294. errList := global.Validator.ValidStruct(c, f)
  295. if len(errList) > 0 {
  296. response.Fail(c, 101, errList[0])
  297. return
  298. }
  299. u := service.AllService.UserService.CurUser(c)
  300. ab := service.AllService.AddressBookService.InfoByUserIdAndId(u.Id, f.Id)
  301. if ab.RowId == 0 {
  302. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  303. return
  304. }
  305. m := f.ToShareRecord()
  306. m.UserId = u.Id
  307. err := service.AllService.AddressBookService.ShareByWebClient(m)
  308. if err != nil {
  309. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  310. return
  311. }
  312. response.Success(c, &gin.H{
  313. "share_token": m.ShareToken,
  314. })
  315. }
  316. func (ct *AddressBook) BatchCreateFromPeers(c *gin.Context) {
  317. f := &admin.BatchCreateFromPeersForm{}
  318. if err := c.ShouldBindJSON(f); err != nil {
  319. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  320. return
  321. }
  322. u := service.AllService.UserService.CurUser(c)
  323. if f.CollectionId != 0 {
  324. collection := service.AllService.AddressBookService.CollectionInfoById(f.CollectionId)
  325. if collection.Id == 0 {
  326. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  327. return
  328. }
  329. if collection.UserId != u.Id {
  330. response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
  331. return
  332. }
  333. }
  334. peers := service.AllService.PeerService.List(1, 999, func(tx *gorm.DB) {
  335. tx.Where("row_id in ?", f.PeerIds)
  336. tx.Where("user_id = ?", u.Id)
  337. })
  338. if peers.Total == 0 {
  339. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  340. return
  341. }
  342. tags, _ := json.Marshal(f.Tags)
  343. for _, peer := range peers.Peers {
  344. ab := service.AllService.AddressBookService.FromPeer(peer)
  345. ab.Tags = tags
  346. ab.CollectionId = f.CollectionId
  347. ex := service.AllService.AddressBookService.InfoByUserIdAndIdAndCid(u.Id, ab.Id, ab.CollectionId)
  348. if ex.RowId != 0 {
  349. continue
  350. }
  351. service.AllService.AddressBookService.Create(ab)
  352. }
  353. response.Success(c, nil)
  354. }
  355. func (ct *AddressBook) BatchUpdateTags(c *gin.Context) {
  356. f := &admin.BatchUpdateTagsForm{}
  357. if err := c.ShouldBindJSON(f); err != nil {
  358. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  359. return
  360. }
  361. u := service.AllService.UserService.CurUser(c)
  362. abs := service.AllService.AddressBookService.List(1, 999, func(tx *gorm.DB) {
  363. tx.Where("row_id in ?", f.RowIds)
  364. tx.Where("user_id = ?", u.Id)
  365. })
  366. if abs.Total == 0 {
  367. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  368. return
  369. }
  370. err := service.AllService.AddressBookService.BatchUpdateTags(abs.AddressBooks, f.Tags)
  371. if err != nil {
  372. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  373. return
  374. }
  375. response.Success(c, nil)
  376. }