channel.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package service
  2. import (
  3. "context"
  4. "dsbqj-admin/model/mongo/channel"
  5. "dsbqj-admin/pkg/serializer"
  6. "github.com/kamva/mgm/v3"
  7. "go.mongodb.org/mongo-driver/bson"
  8. "go.mongodb.org/mongo-driver/bson/primitive"
  9. "go.mongodb.org/mongo-driver/mongo/options"
  10. )
  11. // ChannelListService 渠道列表
  12. type ChannelListService struct {
  13. Name string `form:"name" json:"name"`
  14. PageIndex int `form:"pageIndex" json:"pageIndex"`
  15. PageSize int `form:"pageSize" json:"pageSize"`
  16. }
  17. func (s *ChannelListService) List() (interface{}, error) {
  18. if s.PageIndex < 1 {
  19. s.PageIndex = 1
  20. }
  21. if s.PageSize < 1 {
  22. s.PageSize = 10
  23. }
  24. filter := bson.M{}
  25. if s.Name != "" {
  26. filter["$or"] = []bson.M{
  27. {"name": bson.M{"$regex": s.Name, "$options": "i"}},
  28. {"code": bson.M{"$regex": s.Name, "$options": "i"}},
  29. }
  30. }
  31. coll := mgm.Coll(&channel.Channel{})
  32. // 查询总数
  33. total, err := coll.CountDocuments(context.Background(), filter)
  34. if err != nil {
  35. return nil, err
  36. }
  37. // 分页查询
  38. skip := int64((s.PageIndex - 1) * s.PageSize)
  39. opts := options.Find().SetSkip(skip).SetLimit(int64(s.PageSize)).SetSort(bson.M{"created_at": -1})
  40. var list []channel.Channel
  41. err = coll.SimpleFindWithCtx(context.Background(), &list, filter, opts)
  42. if err != nil {
  43. return nil, err
  44. }
  45. return serializer.BuildChannelList(list, int(total)), nil
  46. }
  47. // ChannelCreateService 渠道新增
  48. type ChannelCreateService struct {
  49. Name string `json:"name" binding:"required"`
  50. Code string `json:"code" binding:"required"`
  51. Description string `json:"description"`
  52. Status *bool `json:"status"`
  53. }
  54. func (s *ChannelCreateService) Create() error {
  55. c := &channel.Channel{
  56. Name: s.Name,
  57. Code: s.Code,
  58. Description: s.Description,
  59. Status: true,
  60. }
  61. if s.Status != nil {
  62. c.Status = *s.Status
  63. }
  64. return mgm.Coll(c).Create(c)
  65. }
  66. // ChannelUpdateService 渠道修改
  67. type ChannelUpdateService struct {
  68. ID string `json:"id" binding:"required"`
  69. Name *string `json:"name"`
  70. Code *string `json:"code"`
  71. Description *string `json:"description"`
  72. Status *bool `json:"status"`
  73. }
  74. func (s *ChannelUpdateService) Update() error {
  75. objectID, err := primitive.ObjectIDFromHex(s.ID)
  76. if err != nil {
  77. return err
  78. }
  79. updateDoc := bson.M{}
  80. if s.Name != nil {
  81. updateDoc["name"] = *s.Name
  82. }
  83. if s.Code != nil {
  84. updateDoc["code"] = *s.Code
  85. }
  86. if s.Description != nil {
  87. updateDoc["description"] = *s.Description
  88. }
  89. if s.Status != nil {
  90. updateDoc["status"] = *s.Status
  91. }
  92. if len(updateDoc) == 0 {
  93. return nil
  94. }
  95. _, err = mgm.Coll(&channel.Channel{}).UpdateOne(
  96. context.Background(),
  97. bson.M{"_id": objectID},
  98. bson.M{"$set": updateDoc},
  99. )
  100. return err
  101. }
  102. // ChannelDeleteService 渠道删除
  103. type ChannelDeleteService struct {
  104. IDs []string `json:"ids" binding:"required"`
  105. }
  106. func (s *ChannelDeleteService) Delete() error {
  107. objectIDs := make([]primitive.ObjectID, 0, len(s.IDs))
  108. for _, id := range s.IDs {
  109. oid, err := primitive.ObjectIDFromHex(id)
  110. if err != nil {
  111. continue
  112. }
  113. objectIDs = append(objectIDs, oid)
  114. }
  115. if len(objectIDs) == 0 {
  116. return nil
  117. }
  118. _, err := mgm.Coll(&channel.Channel{}).DeleteMany(
  119. context.Background(),
  120. bson.M{"_id": bson.M{"$in": objectIDs}},
  121. )
  122. return err
  123. }