addressBook.go 9.4 KB

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