material.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package daytask
  2. import (
  3. "app/commons/model/entity"
  4. "app/commons/services"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // MaterialCategories 素材分类列表
  8. func (s *Server) MaterialCategories(c *gin.Context) {
  9. ctx := s.FromContext(c)
  10. db := s.DB()
  11. var categories []entity.DtMaterialCategory
  12. db.Where("status = ?", 1).
  13. Order("sort ASC, id ASC").
  14. Find(&categories)
  15. ctx.OK(gin.H{
  16. "list": categories,
  17. })
  18. }
  19. // MaterialList 素材列表
  20. func (s *Server) MaterialList(c *gin.Context) {
  21. ctx := s.FromContext(c)
  22. db := s.DB()
  23. groupId := ctx.QueryInt64("groupId", 0)
  24. materialType := ctx.QueryString("type", "")
  25. paging := &services.Pagination{
  26. Current: ctx.QueryInt64("current", 1),
  27. Size: ctx.QueryInt64("size", 20),
  28. }
  29. // 查询系统内部分组ID(banner、task_icon、category_icon),这些分组的素材不对用户展示
  30. var excludeGroupIds []int64
  31. db.Table("dt_material_group").
  32. Where("code IN ?", []string{"banner", "task_icon", "category_icon"}).
  33. Pluck("id", &excludeGroupIds)
  34. query := db.Model(&entity.DtMaterial{}).Where("status = ?", 1)
  35. if groupId > 0 {
  36. query = query.Where("group_id = ?", groupId)
  37. } else if len(excludeGroupIds) > 0 {
  38. query = query.Where("group_id NOT IN ?", excludeGroupIds)
  39. }
  40. if materialType != "" {
  41. query = query.Where("type = ?", materialType)
  42. }
  43. query.Count(&paging.Total)
  44. paging.Computer()
  45. type MaterialInfo struct {
  46. Id int64 `json:"id"`
  47. Name string `json:"name"`
  48. Url string `json:"url"`
  49. Content string `json:"content"`
  50. Type string `json:"type"`
  51. CreatedAt int64 `json:"createdAt"`
  52. }
  53. materials := make([]*MaterialInfo, 0)
  54. query.Select("id, name, url, content, type, created_at").
  55. Order("sort ASC, id DESC").
  56. Offset(int(paging.Start)).
  57. Limit(int(paging.Size)).
  58. Scan(&materials)
  59. ctx.OK(gin.H{
  60. "list": materials,
  61. "paging": paging,
  62. })
  63. }
  64. // MaterialDetail 素材详情
  65. func (s *Server) MaterialDetail(c *gin.Context) {
  66. ctx := s.FromContext(c)
  67. db := s.DB()
  68. type Req struct {
  69. Id int64 `json:"id" form:"id" binding:"required"`
  70. }
  71. var req Req
  72. if err := c.ShouldBind(&req); err != nil {
  73. ctx.Fail("invalid_params")
  74. return
  75. }
  76. var material entity.DtMaterial
  77. if err := db.Where("id = ? AND status = ?", req.Id, 1).First(&material).Error; err != nil {
  78. ctx.Fail("material_not_found")
  79. return
  80. }
  81. ctx.OK(gin.H{
  82. "id": material.Id,
  83. "name": material.Name,
  84. "url": material.Url,
  85. "content": material.Content,
  86. "type": material.Type,
  87. "createdAt": material.CreatedAt,
  88. })
  89. }
  90. // MaterialLike 素材点赞
  91. func (s *Server) MaterialLike(c *gin.Context) {
  92. ctx := s.FromContext(c)
  93. db := s.DB()
  94. type Req struct {
  95. Id int64 `json:"id" form:"id" binding:"required"`
  96. }
  97. var req Req
  98. if err := c.ShouldBind(&req); err != nil {
  99. ctx.Fail("invalid_params")
  100. return
  101. }
  102. var material entity.DtMaterial
  103. if err := db.Where("id = ? AND status = ?", req.Id, 1).First(&material).Error; err != nil {
  104. ctx.Fail("material_not_found")
  105. return
  106. }
  107. ctx.OK(gin.H{
  108. "success": true,
  109. })
  110. }