channel.go 3.5 KB

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