优化项目管理

This commit is contained in:
marvzhang
2020-02-02 14:04:38 +08:00
parent 024f9ac3b2
commit 18c8dd6253
6 changed files with 103 additions and 18 deletions

View File

@@ -232,6 +232,7 @@ func main() {
// 项目
{
authGroup.GET("/projects", routes.GetProjectList) // 列表
authGroup.GET("/projects/tags", routes.GetProjectTags) // 项目标签
authGroup.PUT("/projects", routes.PutProject) //修改
authGroup.POST("/projects/:id", routes.PostProject) // 新增
authGroup.DELETE("/projects/:id", routes.DeleteProject) //删除

View File

@@ -2,6 +2,7 @@ package routes
import (
"crawlab/constants"
"crawlab/database"
"crawlab/model"
"github.com/gin-gonic/gin"
"github.com/globalsign/mgo/bson"
@@ -9,15 +10,23 @@ import (
)
func GetProjectList(c *gin.Context) {
tag := c.Query("tag")
// 筛选条件
query := bson.M{}
if tag != "" {
query["tags"] = tag
}
// 获取列表
projects, err := model.GetProjectList(nil, 0, "+_id")
projects, err := model.GetProjectList(query, 0, "+_id")
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
// 获取总数
total, err := model.GetProjectListTotal(nil)
total, err := model.GetProjectListTotal(query)
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
@@ -34,18 +43,20 @@ func GetProjectList(c *gin.Context) {
}
// 获取未被分配的爬虫数量
noProject := model.Project{
Id: bson.ObjectIdHex(constants.ObjectIdNull),
Name: "No Project",
Description: "Not assigned to any project",
if tag == "" {
noProject := model.Project{
Id: bson.ObjectIdHex(constants.ObjectIdNull),
Name: "No Project",
Description: "Not assigned to any project",
}
spiders, err := noProject.GetSpiders()
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
noProject.Spiders = spiders
projects = append(projects, noProject)
}
spiders, err := noProject.GetSpiders()
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
noProject.Spiders = spiders
projects = append(projects, noProject)
c.JSON(http.StatusOK, ListResponse{
Status: "ok",
@@ -117,3 +128,45 @@ func DeleteProject(c *gin.Context) {
Message: "success",
})
}
func GetProjectTags(c *gin.Context) {
type Result struct {
Tag string `json:"tag" bson:"tag"`
}
s, col := database.GetCol("projects")
defer s.Close()
pipeline := []bson.M{
{
"$unwind": "$tags",
},
{
"$group": bson.M{
"_id": "$tags",
},
},
{
"$sort": bson.M{
"_id": 1,
},
},
{
"$addFields": bson.M{
"tag": "$_id",
},
},
}
var items []Result
if err := col.Pipe(pipeline).All(&items); err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
c.JSON(http.StatusOK, Response{
Status: "ok",
Message: "success",
Data: items,
})
}