wbw_index.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package mint
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "strconv"
  7. "time"
  8. "github.com/gin-gonic/gin"
  9. "github.com/go-pg/pg/v10"
  10. "github.com/go-redis/redis/v8"
  11. )
  12. type WbwIndex struct {
  13. Id int `form:"id" json:"id" `
  14. ChannelId int `form:"channel_id" json:"channel_id"`
  15. BookId int `form:"book_id" json:"book_id"`
  16. Paragraph int `form:"paragraph" json:"paragraph"`
  17. OwnerId int
  18. CreatedAt time.Time
  19. }
  20. type WbwIndexHolder struct {
  21. Data []WbwIndex
  22. }
  23. func (i *WbwIndexHolder) UnmarshalJSON(b []byte) error {
  24. return json.Unmarshal(b, &i.Data)
  25. }
  26. //display a list of all wbws
  27. func WbwIndexsIndex(db *pg.DB) gin.HandlerFunc {
  28. return func(c *gin.Context) {
  29. active := c.Query("active")
  30. // TODO 补充业务逻辑
  31. var wbws []Wbw
  32. switch active {
  33. case "channel":
  34. //某channel
  35. channel := c.Query("channel")
  36. book := c.Query("book")
  37. paragraph := c.Query("paragraph")
  38. err := db.Model(&wbws).Column("id", "book_id", "paragraph", "sn", "data", "lang", "status").Where("channel = ?", channel).Where("book_id = ?", book).Where("paragraph = ?", paragraph).First()
  39. //errors.Is(err, gorm.ErrRecordNotFound)
  40. if err != nil {
  41. panic(err)
  42. }
  43. case "blockid":
  44. //某句子所有channel记录
  45. blockid := c.Query("blockid")
  46. err := db.Model(&wbws).Column("id", "book_id", "paragraph", "sn", "data", "lang", "status").Where("wbws_index_id = ?", blockid).Select()
  47. if err != nil {
  48. panic(err)
  49. }
  50. }
  51. c.JSON(http.StatusOK, gin.H{
  52. "status": "succes",
  53. "message": "",
  54. "data": wbws,
  55. })
  56. }
  57. }
  58. //create new wbw
  59. func WbwIndexsCreate(db *pg.DB) gin.HandlerFunc {
  60. return func(c *gin.Context) {
  61. //channel := c.Query("channel")
  62. var form WbwHolder
  63. if err := c.ShouldBindJSON(&form); err != nil {
  64. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  65. return
  66. }
  67. //TODO 查询权限
  68. tx, err := db.Begin()
  69. if err != nil {
  70. panic(err)
  71. }
  72. defer tx.Rollback()
  73. stmt, err := tx.Prepare("INSERT INTO wbw( channel_id, book_id,paragraph,sn,word,data,lang,status,editor_id,owner_id ) VALUES( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10)")
  74. if err != nil {
  75. panic(err)
  76. }
  77. defer stmt.Close()
  78. for _, value := range form.Data {
  79. _, err = stmt.Exec(value.ChannelId, value.BookId, value.Paragraph, value.Sn, value.Word, value.Data, value.Lang, value.Status, 1, 1)
  80. if err != nil {
  81. panic(err)
  82. }
  83. }
  84. err = tx.Commit()
  85. if err != nil {
  86. panic(err)
  87. }
  88. //建立成功
  89. c.JSON(http.StatusOK, gin.H{
  90. "status": "succes",
  91. "message": "",
  92. "data": form.Data,
  93. })
  94. }
  95. }
  96. //display a specific Wbw
  97. func WbwIndexsShow(db *pg.DB, rdb *redis.Client) gin.HandlerFunc {
  98. return func(c *gin.Context) {
  99. id, err := strconv.Atoi(c.Param("id"))
  100. if err != nil {
  101. panic(err)
  102. }
  103. fmt.Println("get wbw id=" + c.Param("id"))
  104. rkey := "wbw://id"
  105. n, err := rdb.Exists(ctx, rkey).Result()
  106. if err != nil {
  107. fmt.Println(err)
  108. } else if n == 0 {
  109. fmt.Println("redis key not exist")
  110. } else {
  111. fmt.Println("redis key exist")
  112. val, err := rdb.HGetAll(ctx, rkey).Result()
  113. if err != nil || val == nil {
  114. //有错误或者没查到
  115. fmt.Println("redis error")
  116. } else {
  117. fmt.Println("redis no error")
  118. c.JSON(http.StatusOK, gin.H{
  119. "data": val,
  120. })
  121. return
  122. }
  123. }
  124. wbw := &Wbw{Id: id}
  125. err = db.Model(wbw).Column("id", "uid", "name", "description", "description_type", "owner_id", "setting", "status", "version", "updated_at").WherePK().Select()
  126. if err != nil {
  127. panic(err)
  128. }
  129. c.JSON(http.StatusOK, gin.H{
  130. "data": wbw,
  131. })
  132. //写入redis
  133. rdb.HSet(ctx, rkey, id, wbw)
  134. }
  135. }
  136. //delete a specific wbw
  137. func WbwIndexsDestroy(db *pg.DB, rdb *redis.Client) gin.HandlerFunc {
  138. return func(c *gin.Context) {
  139. id, err := strconv.Atoi(c.Param("id"))
  140. if err != nil {
  141. panic(err)
  142. }
  143. wbw := &Wbw{
  144. Id: int(id),
  145. }
  146. //删之前获取 course_id
  147. _, err = db.Model(wbw).WherePK().Delete()
  148. if err != nil {
  149. panic(err)
  150. }
  151. //删除article_list表相关项目
  152. c.JSON(http.StatusOK, gin.H{
  153. "message": c.Param("id"),
  154. })
  155. rkey := "wbw://id/" + c.Param("id")
  156. rdb.Del(ctx, rkey)
  157. }
  158. }