visuddhinanda 4 лет назад
Родитель
Сommit
4eeb31e2b5
4 измененных файлов с 137 добавлено и 22 удалено
  1. 19 4
      api/main.go
  2. 58 17
      api/mint/article.go
  3. 45 1
      api/mint/article_list.go
  4. 15 0
      api/mint/redis.go

+ 19 - 4
api/main.go

@@ -5,6 +5,7 @@ import (
 	"github.com/go-pg/pg/v10"
 	"github.com/iapt-platform/mint"
 	"fmt"
+    "github.com/go-redis/redis/v8"
 )
 
 func main() {
@@ -19,6 +20,13 @@ func main() {
 
 	rt := gin.Default()
 
+	rdb := redis.NewClient(&redis.Options{
+        Addr:     "localhost:6379",
+        Password: "", // no password set
+        DB:       0,  // use default DB
+    })
+
+
 	// TODO 在这里进行http mount
 
 	rt.GET("/demo/user/:id", mint.GetDemo(db))
@@ -56,15 +64,15 @@ func main() {
 
 	//文章
 	//根据id查询
-	rt.GET("/api/article/:aid",mint.GetArticle(db))
+	rt.GET("/api/article/:aid",mint.GetArticle(db,rdb))
 	//输入标题查询符合条件的 title% 
 	rt.GET("/api/article/title/:title",mint.GetArticleByTitle(db))
 	//新建课
 	rt.PUT("/api/article",mint.PutArticle(db))
 	//修改
-	rt.POST("/api/article",mint.PostAritcle(db))//改
+	rt.POST("/api/article",mint.PostAritcle(db,rdb))//改
 	//删除
-	rt.DELETE("/api/article/:aid",mint.DeleteArticle(db))
+	rt.DELETE("/api/article/:aid",mint.DeleteArticle(db,rdb))
 
 	//文集
 	//根据id查询
@@ -78,9 +86,16 @@ func main() {
 	//删除
 	rt.DELETE("/api/collection/:cid",mint.DeleteCollection(db))
 
-	rt.GET("/api/article_list/:cid",mint.GetCollectionArticleList(db))//改
+	//文章列表
+	rt.GET("/api/article_list/collection/:cid",mint.GetCollectionArticleList(db))//改
 	//修改
 	rt.POST("/api/article_list/article/:aid",mint.PostArticleListByArticle(db))//改
 
+
+	rt.DELETE("/api/article_list",mint.DeleteArticleInList(db,rdb))
+	rt.DELETE("/api/article_list/article/:aid",mint.DeleteArticleInList(db,rdb))
+	rt.DELETE("/api/article_list/collection/:cid",mint.DeleteCollectionInList(db,rdb))
+
 	rt.Run()
 }
+

+ 58 - 17
api/mint/article.go

@@ -6,8 +6,13 @@ import (
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/go-pg/pg/v10"
+	"github.com/go-redis/redis/v8"
+	"context"
 	"time"
 )
+var ctx = context.Background()
+
+
 /*
     id SERIAL PRIMARY KEY,
     uuid         VARCHAR (36) ,
@@ -28,36 +33,66 @@ import (
 type Article struct {
 	Id     int `form:"id" json:"id" binding:"required"`
 	Title string `form:"title" json:"title" binding:"required"`
-	Subtitle string `form:"subtitle" json:"subtitle" binding:"required"`
-	Summary string `form:"summary" json:"summary" binding:"required"`
-	Content string `form:"content" json:"content" binding:"required"`
+	Subtitle string `form:"subtitle" json:"subtitle"`
+	Summary string `form:"summary" json:"summary"`
+	Content string `form:"content" json:"content"`
 	OwnerId int
-	Setting string `form:"setting" json:"setting" binding:"required"`
-	Status int `form:"status" json:"status" binding:"required"`
+	Setting string `form:"setting" json:"setting"`
+	Status int `form:"status" json:"status"`
 	Version int
     DeletedAt time.Time
     CreatedAt time.Time
     UpdatedAt time.Time
 }
 //查询
-func GetArticle(db *pg.DB) gin.HandlerFunc {
+func GetArticle(db *pg.DB, rdb *redis.Client) gin.HandlerFunc {
 	return func(c *gin.Context) {
 		lid,err := strconv.ParseInt(c.Param("aid"),10,64)
 		if err != nil {
 			panic(err)
 		}
-		fmt.Println("get lesson")
-		// TODO 在这里进行db操作
-		// Select user by primary key.
+		fmt.Println("get article")
+		rkey := "article://"+c.Param("aid")
+		n, err := rdb.Exists(ctx,rkey).Result()
+		if err != nil  {
+			fmt.Println(err)
+		}else if n == 0 {
+			fmt.Println("redis key not exist")
+		}else{
+			fmt.Println("redis key exist")
+			val, err := rdb.HGetAll(ctx, rkey).Result()
+			if err != nil || val == nil {
+				//有错误或者没查到
+				fmt.Println("redis error")
+					
+			}else{
+				fmt.Println("redis no error")
+				c.JSON(http.StatusOK, gin.H{
+					"data": val,
+				})
+				return
+			}	
+		}
+
 		article := &Article{Id: int(lid)}
-		err = db.Model(article).WherePK().Select()
+		err = db.Model(article).Column("id","title","subtitle","content","owner_id","setting","status","version","updated_at").WherePK().Select()
 		if err != nil {
 			panic(err)
-		}
-		
+		}			
 		c.JSON(http.StatusOK, gin.H{
-			"message": "article-"+article.Title,
+			"data": article,
 		})
+		//写入redis
+		rdb.HSet(ctx,rkey,"id",article.Id)
+		rdb.HSet(ctx,rkey,"title",article.Title)
+		rdb.HSet(ctx,rkey,"subtitle",article.Subtitle)
+		rdb.HSet(ctx,rkey,"content",article.Content)
+		rdb.HSet(ctx,rkey,"owner_id",article.OwnerId)
+		rdb.HSet(ctx,rkey,"setting",article.Setting)
+		rdb.HSet(ctx,rkey,"status",article.Status)
+		rdb.HSet(ctx,rkey,"version",article.Version)
+		rdb.HSet(ctx,rkey,"updated_at",article.UpdatedAt)
+			
 	}
 }
 
@@ -110,7 +145,7 @@ func PutArticle(db *pg.DB) gin.HandlerFunc{
 
 
 //修改
-func PostAritcle(db *pg.DB) gin.HandlerFunc{
+func PostAritcle(db *pg.DB,rdb *redis.Client) gin.HandlerFunc{
 	return func(c *gin.Context){
 		var form Article
 
@@ -126,14 +161,16 @@ func PostAritcle(db *pg.DB) gin.HandlerFunc{
 		c.JSON(http.StatusOK,gin.H{
 			"message":"update ok",
 		})
+		rkey := "article://"+strconv.Itoa(form.Id)
+		rdb.Del(ctx,rkey)
 	}
 }
 
 
 //删
-func DeleteArticle(db *pg.DB) gin.HandlerFunc{
+func DeleteArticle(db *pg.DB ,rdb *redis.Client) gin.HandlerFunc{
 	return func(c *gin.Context){
-		id,err := strconv.ParseInt(c.Param("aid"),10,64)
+		id,err := strconv.Atoi(c.Param("aid"))
 		if err != nil {
 			panic(err)
 		}
@@ -145,9 +182,13 @@ func DeleteArticle(db *pg.DB) gin.HandlerFunc{
 		if err != nil {
 			panic(err)
 		}
-		
+		//TODO 删除article_list表相关项目
 		c.JSON(http.StatusOK,gin.H{
 			"message":"delete "+c.Param("lid"),
 		})
+
+		rkey := "article://"+c.Param("aid")
+		rdb.Del(ctx,rkey)
+
 	}
 }

+ 45 - 1
api/mint/article_list.go

@@ -7,8 +7,10 @@ import (
 	"github.com/go-pg/pg/v10"
 	"time"
 	"encoding/json"
-
+	"github.com/go-redis/redis/v8"
 )
+
+
 type ArticleList struct {
 	Id     int `form:"id" json:"id"`
 	CollectionId int `form:"collection_id" json:"collection_id" binding:"required"`
@@ -91,4 +93,46 @@ func PostArticleListByArticle(db *pg.DB) gin.HandlerFunc{
 	}
 }
 
+//删
+func DeleteArticleInList(db *pg.DB ,rdb *redis.Client) gin.HandlerFunc{
+	return func(c *gin.Context){
+		id,err := strconv.Atoi(c.Param("aid"))
+		if err != nil {
+			panic(err)
+		}
+		//删之前获取 course_id
+		_, err = db.Model((*ArticleList)(nil)).Where("article_id = ?",id).Delete()
+		if err != nil {
+			panic(err)
+		}
+		//TODO 删除article_list表相关项目
+		c.JSON(http.StatusOK,gin.H{
+			"message":"delete "+c.Param("aid"),
+		})
+
+		rkey := "article_list://"+c.Param("aid")
+		rdb.Del(ctx,rkey)
 
+	}
+}
+//删
+func DeleteCollectionInList(db *pg.DB ,rdb *redis.Client) gin.HandlerFunc{
+	return func(c *gin.Context){
+		id,err := strconv.Atoi(c.Param("cid"))
+		if err != nil {
+			panic(err)
+		}
+		//删之前获取 course_id
+		_, err = db.Model((*ArticleList)(nil)).Where("collection_id = ?",id).Delete()
+		if err != nil {
+			panic(err)
+		}
+		//TODO 删除article_list表相关项目
+		c.JSON(http.StatusOK,gin.H{
+			"message":"delete "+c.Param("cid"),
+		})
+
+		rkey := "article_list://collection_"+c.Param("cid")
+		rdb.Del(ctx,rkey)
+	}
+}

+ 15 - 0
api/mint/redis.go

@@ -0,0 +1,15 @@
+package mint
+
+import (
+	"github.com/go-redis/redis/v8"
+)
+
+
+func RedisConnect() *redis.Client{
+    rdb := redis.NewClient(&redis.Options{
+        Addr:     "localhost:6379",
+        Password: "", // no password set
+        DB:       0,  // use default DB
+    })
+	return(rdb)
+}