添加文章模板的后端实现

master
DESKTOP-4RNDQIC\29019 2020-08-24 02:08:26 +08:00
parent 1c2ff37630
commit aeb0b55a43
11 changed files with 468 additions and 330 deletions

View File

@ -2,10 +2,9 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="7cf7b6b3-0082-44ef-bb0f-bfcc57e19eb1" name="Default Changelist" comment=""> <list default="true" id="7cf7b6b3-0082-44ef-bb0f-bfcc57e19eb1" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/fork.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/controller/blog.go" beforeDir="false" afterPath="$PROJECT_DIR$/controller/blog.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/main.go" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/main.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/model/blog.go" beforeDir="false" afterPath="$PROJECT_DIR$/model/blog.go" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -54,10 +53,11 @@
<property name="go.import.settings.migrated" value="true" /> <property name="go.import.settings.migrated" value="true" />
<property name="go.sdk.automatically.set" value="true" /> <property name="go.sdk.automatically.set" value="true" />
<property name="go.tried.to.enable.integration.vgo.integrator" value="true" /> <property name="go.tried.to.enable.integration.vgo.integrator" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../DroneIntegratedManagementServer" /> <property name="last_opened_file_path" value="$PROJECT_DIR$/../gobase" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="settings.editor.selected.configurable" value="go.sdk" /> <property name="settings.editor.selected.configurable" value="go.sdk" />
</component> </component>
<component name="RunManager"> <component name="RunManager" selected="Go Build.background">
<configuration name="background" type="GoApplicationRunConfiguration" factoryName="Go Application"> <configuration name="background" type="GoApplicationRunConfiguration" factoryName="Go Application">
<module name="background" /> <module name="background" />
<working_directory value="$PROJECT_DIR$/" /> <working_directory value="$PROJECT_DIR$/" />
@ -70,6 +70,26 @@
<output_directory value="$PROJECT_DIR$/" /> <output_directory value="$PROJECT_DIR$/" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="fork2" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true">
<module name="background" />
<working_directory value="$PROJECT_DIR$/" />
<parameters value="background.exe" />
<kind value="FILE" />
<filePath value="$PROJECT_DIR$/fork.go" />
<package value="background" />
<directory value="$PROJECT_DIR$/" />
<output_directory value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<list>
<item itemvalue="Go Build.background" />
<item itemvalue="Go Build.fork2" />
</list>
<recent_temporary>
<list>
<item itemvalue="Go Build.fork2" />
</list>
</recent_temporary>
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="2" /> <option name="version" value="2" />
@ -91,30 +111,30 @@
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state x="767" y="429" key="#Go_Modules/0.40.2048.1112@0.40.2048.1112" timestamp="1595431702688" /> <state x="767" y="429" key="#Go_Modules/0.40.2048.1112@0.40.2048.1112" timestamp="1595431702688" />
<state x="479" y="251" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1595432372558"> <state x="479" y="251" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1595778748175">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state x="479" y="251" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.40.2048.1112@0.40.2048.1112" timestamp="1595432372558" /> <state x="479" y="251" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.40.2048.1112@0.40.2048.1112" timestamp="1595778748175" />
<state x="805" y="351" key="FileChooserDialogImpl" timestamp="1595431879732"> <state x="805" y="351" key="FileChooserDialogImpl" timestamp="1595857317209">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state x="805" y="351" key="FileChooserDialogImpl/0.40.2048.1112@0.40.2048.1112" timestamp="1595431879732" /> <state x="805" y="351" key="FileChooserDialogImpl/0.40.2048.1112@0.40.2048.1112" timestamp="1595857317209" />
<state width="2005" height="305" key="GridCell.Tab.0.bottom" timestamp="1595746777201"> <state width="2005" height="305" key="GridCell.Tab.0.bottom" timestamp="1595778772403">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state width="2005" height="305" key="GridCell.Tab.0.bottom/0.40.2048.1112@0.40.2048.1112" timestamp="1595746777201" /> <state width="2005" height="305" key="GridCell.Tab.0.bottom/0.40.2048.1112@0.40.2048.1112" timestamp="1595778772403" />
<state width="2005" height="305" key="GridCell.Tab.0.center" timestamp="1595746777200"> <state width="2005" height="305" key="GridCell.Tab.0.center" timestamp="1595778772403">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state width="2005" height="305" key="GridCell.Tab.0.center/0.40.2048.1112@0.40.2048.1112" timestamp="1595746777200" /> <state width="2005" height="305" key="GridCell.Tab.0.center/0.40.2048.1112@0.40.2048.1112" timestamp="1595778772403" />
<state width="2005" height="305" key="GridCell.Tab.0.left" timestamp="1595746777200"> <state width="2005" height="305" key="GridCell.Tab.0.left" timestamp="1595778772403">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state width="2005" height="305" key="GridCell.Tab.0.left/0.40.2048.1112@0.40.2048.1112" timestamp="1595746777200" /> <state width="2005" height="305" key="GridCell.Tab.0.left/0.40.2048.1112@0.40.2048.1112" timestamp="1595778772403" />
<state width="2005" height="305" key="GridCell.Tab.0.right" timestamp="1595746777200"> <state width="2005" height="305" key="GridCell.Tab.0.right" timestamp="1595778772403">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state width="2005" height="305" key="GridCell.Tab.0.right/0.40.2048.1112@0.40.2048.1112" timestamp="1595746777200" /> <state width="2005" height="305" key="GridCell.Tab.0.right/0.40.2048.1112@0.40.2048.1112" timestamp="1595778772403" />
<state width="2005" height="376" key="GridCell.Tab.1.bottom" timestamp="1595433941254"> <state width="2005" height="376" key="GridCell.Tab.1.bottom" timestamp="1595433941254">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
@ -135,9 +155,9 @@
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state x="526" y="240" key="SettingsEditor/0.40.2048.1112@0.40.2048.1112" timestamp="1595432383541" /> <state x="526" y="240" key="SettingsEditor/0.40.2048.1112@0.40.2048.1112" timestamp="1595432383541" />
<state x="687" y="283" width="672" height="678" key="search.everywhere.popup" timestamp="1595431850294"> <state x="687" y="283" width="672" height="678" key="search.everywhere.popup" timestamp="1595757093391">
<screen x="0" y="40" width="2048" height="1112" /> <screen x="0" y="40" width="2048" height="1112" />
</state> </state>
<state x="687" y="283" width="672" height="678" key="search.everywhere.popup/0.40.2048.1112@0.40.2048.1112" timestamp="1595431850294" /> <state x="687" y="283" width="672" height="678" key="search.everywhere.popup/0.40.2048.1112@0.40.2048.1112" timestamp="1595757093391" />
</component> </component>
</project> </project>

17
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,17 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {},
"args": []
}
]
}

42
11.yaml Normal file
View File

@ -0,0 +1,42 @@
listen_api: 4596
runmode: debug
max_conn: 121
logs:
dir: /var/log/user
file: user.log
level: 1
savefile: false
redis1:
addr: 49.235.25.67:16379
password: ~
db: 1
mysql:
addr: 49.235.25.67
user: caiyu
password: 12345678
db: background
max_open: 100
MaxIdle: 99
elasticsearch:
address: http://hyrtc.net:9200
mysql1:
addr: 49.235.25.67
user: caiyu
password: 12345678
db: background
max_open: 100
MaxIdle: 99
mongo:
addr: 49.235.25.67
port: 27017
user: root
password: root
db: test
max_open: 100
MaxIdle: 99
ca_cert: ""
client_cert: ""
client_key: ""
test_arr:
- 1
- 23

View File

@ -5,94 +5,95 @@ import (
"background/logs" "background/logs"
"background/model" "background/model"
"fmt" "fmt"
"strconv"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"qiniupkg.com/x/log.v7" "qiniupkg.com/x/log.v7"
"strconv"
) )
func GetPageParaFromQuery(c *gin.Context) (int,int){ func GetPageParaFromQuery(c *gin.Context) (int, int) {
limit := c.Query("limit") limit := c.Query("limit")
offset := c.Query("offset") offset := c.Query("offset")
iLmit,e := strconv.Atoi(limit) iLmit, e := strconv.Atoi(limit)
if nil != e{ if nil != e {
return 0,0 return 0, 0
} }
iOffset,e := strconv.Atoi(offset) iOffset, e := strconv.Atoi(offset)
if nil != e{ if nil != e {
return 0,0 return 0, 0
} }
return iLmit,iOffset return iLmit, iOffset
} }
func GetArticles(c *gin.Context) { func GetArticles(c *gin.Context) {
type ReqArticles struct { type ReqArticles struct {
Name string `json:"name"` Name string `json:"name"`
Type int32 `json:"types"` Type int32 `json:"types"`
} }
var req ReqArticles var req ReqArticles
rsp := RespBase{"ERR",-1,nil} rsp := RespBase{"ERR", -1, nil}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
article := []model.Doc{} article := []model.Doc{}
limit,offset := GetPageParaFromQuery(c) limit, offset := GetPageParaFromQuery(c)
public := c.Query("is_public") public := c.Query("is_public")
var sql string var sql string
if req.Name != ""{ if req.Name != "" {
if req.Type == 110{ if req.Type == 110 {
is_public := 0 is_public := 0
if public == "true"{ if public == "true" {
is_public = 0 is_public = 0
}else{ } else {
is_public = 1 is_public = 1
} }
sql = "select * from doc where doc.title like '%%%s%%' and is_public = %d limit %d offset %d " sql = "select * from doc where doc.title like '%%%s%%' and is_public = %d limit %d offset %d "
sql = fmt.Sprintf(sql,req.Name,is_public,limit,offset*limit) sql = fmt.Sprintf(sql, req.Name, is_public, limit, offset*limit)
}else{ } else {
is_public := 0 is_public := 0
if public == "true" { if public == "true" {
is_public = 0 is_public = 0
}else{ } else {
is_public = 1 is_public = 1
} }
sql = fmt.Sprintf("select * from doc where doc.title like '%%%s%%' and doc.type = %d and is_public = %d limit %d offset %d ", sql = fmt.Sprintf("select * from doc where doc.title like '%%%s%%' and doc.type = %d and is_public = %d limit %d offset %d ",
req.Name,req.Type,is_public,limit,offset*limit) req.Name, req.Type, is_public, limit, offset*limit)
} }
}else{ } else {
if req.Type == 110{ if req.Type == 110 {
is_public := 0 is_public := 0
if public == "true" { if public == "true" {
is_public = 1 is_public = 1
}else{ } else {
is_public = 0 is_public = 0
} }
sql = fmt.Sprintf("SELECT doc.id,doc.author,LEFT(doc.content,50) as content,doc.title from doc where is_public = %d " + sql = fmt.Sprintf("SELECT doc.id,doc.author,LEFT(doc.content,50) as content,doc.title from doc where is_public = %d "+
"order by id desc limit %d offset %d",is_public,limit,offset) "order by id desc limit %d offset %d", is_public, limit, offset)
}else{ } else {
is_public := 0 is_public := 0
if public == "true" { if public == "true" {
is_public = 1 is_public = 1
}else{ } else {
is_public = 0 is_public = 0
} }
sql = fmt.Sprintf("SELECT doc.id,doc.author,LEFT(doc.content,50) as content,doc.title,doc.type from doc where doc.type = %d and is_public = %d " + sql = fmt.Sprintf("SELECT doc.id,doc.author,LEFT(doc.content,50) as content,doc.title,doc.type from doc where doc.type = %d and is_public = %d "+
" order by id desc limit %d offset %d",req.Type,is_public,limit,offset) " order by id desc limit %d offset %d", req.Type, is_public, limit, offset)
} }
} }
log.Print(sql) log.Print(sql)
e = db.GetMysqlClient().Query2(sql,&article) e = db.GetMysqlClient().Query2(sql, &article)
if nil != e{ if nil != e {
logs.Error(e.Error(),sql) logs.Error(e.Error(), sql)
return return
} }
for k,_ := range article{ for k, _ := range article {
article[k].Content += "..." article[k].Content += "..."
} }
rsp.Data = article rsp.Data = article
@ -101,21 +102,21 @@ func GetArticles(c *gin.Context) {
rsp.Msg = "OK" rsp.Msg = "OK"
} }
func GetArticleCount(c *gin.Context) { func GetArticleCount(c *gin.Context) {
resp := RespBase{Msg:"FAIL",Status: 211} resp := RespBase{Msg: "FAIL", Status: 211}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
query := fmt.Sprintf("select count(*) as cnt from doc") query := fmt.Sprintf("select count(*) as cnt from doc")
type Cnt struct { type Cnt struct {
Cnt int64 `sql:"cnt" json:"cnt"` Cnt int64 `sql:"cnt" json:"cnt"`
} }
cnt := []Cnt{}; cnt := []Cnt{}
e := db.GetMysqlClient().Query2(query,&cnt) e := db.GetMysqlClient().Query2(query, &cnt)
if nil != e{ if nil != e {
log.Print(e.Error()) log.Print(e.Error())
return return
} }
@ -124,32 +125,32 @@ func GetArticleCount(c *gin.Context) {
resp.Msg = "OK" resp.Msg = "OK"
} }
func GetArticle(c *gin.Context) { func GetArticle(c *gin.Context) {
resp := RespBase{Msg:"FAIL",Status: 211} resp := RespBase{Msg: "FAIL", Status: 211}
sid := c.Param("id") sid := c.Param("id")
var id int var id int
var err error var err error
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
if sid == ""{ if sid == "" {
return return
}else{ } else {
id,err = strconv.Atoi(sid) id, err = strconv.Atoi(sid)
if nil != err{ if nil != err {
return return
} }
} }
query := fmt.Sprintf("select * from doc where doc.id = '%d'",id) query := fmt.Sprintf("select * from doc where doc.id = '%d'", id)
docs := []model.Doc{} docs := []model.Doc{}
e := db.GetMysqlClient().Query2(query,&docs) e := db.GetMysqlClient().Query2(query, &docs)
if nil != e{ if nil != e {
log.Print(e.Error()) log.Print(e.Error())
return return
} }
if len(docs) > 0{ if len(docs) > 0 {
resp.Data = docs[0] resp.Data = docs[0]
resp.Status = 0 resp.Status = 0
resp.Msg = "OK" resp.Msg = "OK"
@ -157,40 +158,40 @@ func GetArticle(c *gin.Context) {
} }
func UpdateArtilce(c *gin.Context) { func UpdateArtilce(c *gin.Context) {
rsp := RespBase{Msg:"FAIL", Status:210,} rsp := RespBase{Msg: "FAIL", Status: 210}
type ReqUpdateArticle struct { type ReqUpdateArticle struct {
Id int64 `json:"id"` Id int64 `json:"id"`
Title string `json:"title"` Title string `json:"title"`
Content string `json:"content"` Content string `json:"content"`
author string `json:"author"` author string `json:"author"`
Type int64 `json:"type"` Type int64 `json:"type"`
IsPublic int `json:"is_public"` IsPublic int `json:"is_public"`
} }
var req ReqUpdateArticle var req ReqUpdateArticle
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
er := c.BindJSON(&req) er := c.BindJSON(&req)
if nil != er{ if nil != er {
logs.Error(er.Error()) logs.Error(er.Error())
return return
} }
if req.Title == ""{ if req.Title == "" {
rsp.Msg = "title required" rsp.Msg = "title required"
return return
} }
e := model.UpdateDoc( e := model.UpdateDoc(
model.Doc{ model.Doc{
Type:req.Type, Type: req.Type,
Title:req.Title, Title: req.Title,
Content:req.Content, Content: req.Content,
Author:req.author, Author: req.author,
ID:req.Id, ID: req.Id,
IsPublic:req.IsPublic, IsPublic: req.IsPublic,
}, },
) )
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -199,44 +200,44 @@ func UpdateArtilce(c *gin.Context) {
} }
func SearchArticle(c *gin.Context) { func SearchArticle(c *gin.Context) {
rsp := RespBase{Msg:"FAIL", Status:210,} rsp := RespBase{Msg: "FAIL", Status: 210}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
} }
func AddArticle(c *gin.Context) { func AddArticle(c *gin.Context) {
rsp := RespBase{Msg:"FAIL", Status:210,} rsp := RespBase{Msg: "FAIL", Status: 210}
type ReqAddArticle struct { type ReqAddArticle struct {
Id int64 `json:"id"` Id int64 `json:"id"`
Title string `json:"title"` Title string `json:"title"`
Content string `json:"content"` Content string `json:"content"`
author string `json:"author"` author string `json:"author"`
Type int64 `json:"type"` Type int64 `json:"type"`
Ispublic int `json:"is_public"` Ispublic int `json:"is_public"`
} }
var req ReqAddArticle var req ReqAddArticle
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
er := c.BindJSON(&req) er := c.BindJSON(&req)
if nil != er{ if nil != er {
logs.Error(er.Error()) logs.Error(er.Error())
return return
} }
if req.Title == ""{ if req.Title == "" {
rsp.Msg = "title required" rsp.Msg = "title required"
return return
} }
e := model.CreateDoc( e := model.CreateDoc(
model.Doc{ model.Doc{
Type:req.Type, Type: req.Type,
Title:req.Title, Title: req.Title,
Content:req.Content, Content: req.Content,
Author:req.author, Author: req.author,
IsPublic:req.Ispublic, IsPublic: req.Ispublic,
}, },
) )
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -244,28 +245,27 @@ func AddArticle(c *gin.Context) {
rsp.Status = 0 rsp.Status = 0
} }
func ArticlesType(c *gin.Context) {
func ArticlesType(c *gin.Context) { rsp := RespBase{Msg: "FAIL", Status: 210}
rsp := RespBase{Msg:"FAIL", Status:210,}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
rsp.Data = model.GetArticlesType() rsp.Data = model.GetArticlesType()
rsp.Msg = "OK" rsp.Msg = "OK"
rsp.Status = 0 rsp.Status = 0
} }
func DeleteArticleType(c *gin.Context) { func DeleteArticleType(c *gin.Context) {
rsp := RespBase{Msg:"Fail",Status:210} rsp := RespBase{Msg: "Fail", Status: 210}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
sid :=c.Query("id") sid := c.Query("id")
if sid == ""{ if sid == "" {
return return
} }
id ,e := strconv.Atoi(sid) id, e := strconv.Atoi(sid)
if nil != e{ if nil != e {
log.Print(e.Error()) log.Print(e.Error())
return return
} }
@ -273,39 +273,39 @@ func DeleteArticleType(c *gin.Context) {
rsp.Msg = "OK" rsp.Msg = "OK"
rsp.Status = 0 rsp.Status = 0
} }
func AddArticleType(c *gin.Context) { func AddArticleType(c *gin.Context) {
rsp := RespBase{Msg:"Fail",Status:210} rsp := RespBase{Msg: "Fail", Status: 210}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
typeName :=c.Query("name") typeName := c.Query("name")
group := c.Query("group") group := c.Query("group")
groupid,e := strconv.Atoi(group) groupid, e := strconv.Atoi(group)
if nil != e{ if nil != e {
return return
} }
id := c.Query("id") id := c.Query("id")
if id != ""{ if id != "" {
if typeName == ""{ if typeName == "" {
return return
} }
articleType := model.ArticleType{ articleType := model.ArticleType{
Id: 0, Id: 0,
Name: typeName, Name: typeName,
Group: int32(groupid), Group: int32(groupid),
} }
rsp.Data = model.UpdateArticleType(articleType) rsp.Data = model.UpdateArticleType(articleType)
rsp.Msg = "OK" rsp.Msg = "OK"
rsp.Status = 0 rsp.Status = 0
}else{ } else {
if typeName == ""{ if typeName == "" {
return return
} }
articleType := model.ArticleType{ articleType := model.ArticleType{
Id: 0, Id: 0,
Name: typeName, Name: typeName,
Group: int32(groupid), Group: int32(groupid),
} }
rsp.Data = model.AddArticleType(articleType) rsp.Data = model.AddArticleType(articleType)
rsp.Msg = "OK" rsp.Msg = "OK"
@ -313,41 +313,40 @@ func AddArticleType(c *gin.Context) {
} }
} }
func DeleteArticle(c *gin.Context) { func DeleteArticle(c *gin.Context) {
rsp := RespBase{Msg:"FAIL", Status:210,} rsp := RespBase{Msg: "FAIL", Status: 210}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
sid := c.Param("id") sid := c.Param("id")
id,err := strconv.Atoi(sid) id, err := strconv.Atoi(sid)
if nil != err{ if nil != err {
rsp.Status = -234 rsp.Status = -234
c.JSON(200,rsp) c.JSON(200, rsp)
} }
err = model.DeleteDoc(int64(id)) err = model.DeleteDoc(int64(id))
if nil != err{ if nil != err {
rsp.Status = -234 rsp.Status = -234
c.JSON(200,rsp) c.JSON(200, rsp)
} }
rsp.Data = id rsp.Data = id
rsp.Status = 0 rsp.Status = 0
rsp.Msg = "OK" rsp.Msg = "OK"
} }
func ArticlesTypes(c *gin.Context) {
func ArticlesTypes(c *gin.Context) { resp := RespBase{"unkown error", -231, nil}
resp := RespBase{"unkown error",-231,nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
type DocType struct { type DocType struct {
Id int64 `sql:"id"` Id int64 `sql:"id"`
TypeName string `sql:"type_name"` TypeName string `sql:"type_name"`
} }
docTypes := []DocType{} docTypes := []DocType{}
e := db.GetMysqlClient().Query2("select * from doc_type", e := db.GetMysqlClient().Query2("select * from doc_type",
&docTypes) &docTypes)
if nil != e{ if nil != e {
log.Print(e.Error()) log.Print(e.Error())
return return
} }
@ -356,20 +355,20 @@ func ArticlesTypes(c *gin.Context) {
resp.Status = 0 resp.Status = 0
} }
func CreateMemo(c *gin.Context) { func CreateMemo(c *gin.Context) {
resp := RespBase{"unkown error",-231,nil} resp := RespBase{"unkown error", -231, nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
var req model.Memo var req model.Memo
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
resp.Msg = "wrong input" resp.Msg = "wrong input"
return return
} }
e = model.CreateMemo(req) e = model.CreateMemo(req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -378,20 +377,19 @@ func CreateMemo(c *gin.Context) {
resp.Status = 0 resp.Status = 0
} }
func UpdateMemo(c *gin.Context) {
func UpdateMemo(c *gin.Context) { resp := RespBase{"unkown error", -231, nil}
resp := RespBase{"unkown error",-231,nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
var req model.Memo var req model.Memo
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
resp.Msg = "wrong input" resp.Msg = "wrong input"
return return
} }
e = model.UpdateMemo(req) e = model.UpdateMemo(req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -401,12 +399,12 @@ func UpdateMemo(c *gin.Context) {
} }
func GetDocGroup(c *gin.Context) { func GetDocGroup(c *gin.Context) {
rsp := RespBase{"ERR",-1,nil} rsp := RespBase{"ERR", -1, nil}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
group,e := model.GetAllGroup() group, e := model.GetAllGroup()
if nil != e{ if nil != e {
log.Print(e.Error()) log.Print(e.Error())
return return
} }
@ -414,32 +412,41 @@ func GetDocGroup(c *gin.Context) {
rsp.Status = 0 rsp.Status = 0
rsp.Msg = "OK" rsp.Msg = "OK"
} }
func GetMemos(c *gin.Context) {
rsp := RespBase{"ERR",-1,nil} func GetTemplates(c *gin.Context) {
rsp := RespBase{"ERR", -1, nil}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}()
}
func GetMemos(c *gin.Context) {
rsp := RespBase{"ERR", -1, nil}
defer func() {
c.JSON(200, rsp)
}() }()
type ReqMemos struct { type ReqMemos struct {
Title string `json:"title"` Title string `json:"title"`
} }
req := ReqMemos{} req := ReqMemos{}
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
limit,offset := GetPageParaFromQuery(c) limit, offset := GetPageParaFromQuery(c)
if limit != 0 && offset != 0{ if limit != 0 && offset != 0 {
dat, e := model.GetMemos(req.Title,10,0) dat, e := model.GetMemos(req.Title, 10, 0)
if nil != e{ if nil != e {
return return
} }
rsp.Data = dat rsp.Data = dat
rsp.Status = 0 rsp.Status = 0
rsp.Msg = "OK" rsp.Msg = "OK"
}else { } else {
dat, e := model.GetMemos(req.Title,10,0) dat, e := model.GetMemos(req.Title, 10, 0)
if nil != e{ if nil != e {
return return
} }
rsp.Data = dat rsp.Data = dat
@ -448,15 +455,17 @@ func GetMemos(c *gin.Context) {
} }
} }
func GetDocTemplate(c *gin.Context) {
}
func GetMemo(c *gin.Context) { func GetMemo(c *gin.Context) {
rsp := RespBase{"ERR",-1,nil} rsp := RespBase{"ERR", -1, nil}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
id := c.Query("id") id := c.Query("id")
dat, e := model.ReadMemo(int32(db.Atoi(id))) dat, e := model.ReadMemo(int32(db.Atoi(id)))
if nil != e{ if nil != e {
return return
} }
rsp.Msg = "OK" rsp.Msg = "OK"
@ -464,21 +473,21 @@ func GetMemo(c *gin.Context) {
rsp.Data = dat rsp.Data = dat
} }
func DeleteMemos(c *gin.Context) { func DeleteMemos(c *gin.Context) {
resp := RespBase{"unkown error",-231,nil} resp := RespBase{"unkown error", -231, nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
type DelReq struct { type DelReq struct {
Id int32 `json:"id"` Id int32 `json:"id"`
} }
var req DelReq var req DelReq
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
resp.Msg = "wrong input" resp.Msg = "wrong input"
return return
} }
e = model.DeleteMemo(req.Id) e = model.DeleteMemo(req.Id)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }

View File

@ -3,25 +3,26 @@ package controller
import ( import (
"background/logs" "background/logs"
"background/model" "background/model"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"qiniupkg.com/x/log.v7" "qiniupkg.com/x/log.v7"
) )
func AddHardware(c *gin.Context) { func AddHardware(c *gin.Context) {
resp := RespBase{"unkown error",-231,nil} resp := RespBase{"unkown error", -231, nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
var hardware model.Hardware var hardware model.Hardware
e := c.BindJSON(&hardware) e := c.BindJSON(&hardware)
if nil != e{ if nil != e {
log.Print(e) log.Print(e)
print(e) print(e)
return return
} }
e = hardware.CreateHardware() e = hardware.CreateHardware()
if nil != e{ if nil != e {
resp.Status = -100 resp.Status = -100
resp.Msg = e.Error() resp.Msg = e.Error()
log.Print(e) log.Print(e)
@ -32,17 +33,17 @@ func AddHardware(c *gin.Context) {
resp.Status = 0 resp.Status = 0
} }
func DeleteHardWare(c *gin.Context) { func DeleteHardWare(c *gin.Context) {
resp := RespBase{"unkown error",-231,nil} resp := RespBase{"unkown error", -231, nil}
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
name := c.Query("name") name := c.Query("name")
if name == ""{ if name == "" {
return return
} }
e := model.DeleteHardware(name) e := model.DeleteHardware(name)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -51,20 +52,20 @@ func DeleteHardWare(c *gin.Context) {
resp.Data = nil resp.Data = nil
} }
func UpdateHardWare(c *gin.Context) { func UpdateHardWare(c *gin.Context) {
} }
func ReadHardWare(c *gin.Context) { func ReadHardWare(c *gin.Context) {
rsp := RespBase{"ERR",-1,nil} rsp := RespBase{"ERR", -1, nil}
defer func() { defer func() {
c.JSON(200,rsp) c.JSON(200, rsp)
}() }()
limit,offset := GetPageParaFromQuery(c) limit, offset := GetPageParaFromQuery(c)
log.Print(limit,offset) log.Print(limit, offset)
hardware,e := model.GetHardwares(limit,offset) hardware, e := model.GetHardwares(limit, offset)
if nil != e{ if nil != e {
return return
} }
rsp.Data = hardware rsp.Data = hardware

View File

@ -0,0 +1,19 @@
package helper
import (
"background/controller/params"
"github.com/gin-gonic/gin"
)
func GetPageParam(c *gin.Context) (int, int) {
var limit, offset int
var ok bool
limit, ok = c.Keys[params.K_OFFSET].(int)
if !ok {
}
offset, ok = c.Keys[params.K_OFFSET].(int)
if !ok {
}
return limit, offset
}

5
controller/params/params Normal file
View File

@ -0,0 +1,5 @@
package params
const K_OFFSET = "offset"
const K_LIMIT = "limit"

View File

@ -1,16 +1,17 @@
package controller package controller
import ( import (
"background/config"
"background/db"
"background/logs"
"background/model"
"background/redis"
"background/utils" "background/utils"
"bytes" "bytes"
"crypto/md5" "crypto/md5"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/fatih/structs"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
"github.com/tommy351/gin-sessions"
"io" "io"
"log" "log"
"math/rand" "math/rand"
@ -20,15 +21,14 @@ import (
"strconv" "strconv"
"strings" "strings"
"time" "time"
"background/config"
"background/db" "github.com/fatih/structs"
"background/logs" "github.com/gin-gonic/gin"
"background/model" _ "github.com/go-sql-driver/mysql"
"background/redis" sessions "github.com/tommy351/gin-sessions"
) )
type UserController struct { type UserController struct {
} }
type ReqSendEmailCode struct { type ReqSendEmailCode struct {
@ -80,8 +80,8 @@ func (this *UserController) SetUser(c *gin.Context) {
} }
func (this *UserController) ModifyPasswd(c *gin.Context) { func (this *UserController) ModifyPasswd(c *gin.Context) {
type ReqModifyPasswd struct{ type ReqModifyPasswd struct {
id int `json:"id"` id int `json:"id"`
UserName string `json:"user_name"` UserName string `json:"user_name"`
Password string `json:"password"` Password string `json:"password"`
} }
@ -91,16 +91,16 @@ func (this *UserController) ModifyPasswd(c *gin.Context) {
resp.Msg = "err" resp.Msg = "err"
defer func() { defer func() {
c.JSON(200,resp) c.JSON(200, resp)
}() }()
e := c.BindJSON(&req) e := c.BindJSON(&req)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
e = model.ModyfyPassword(req.UserName,req.Password) e = model.ModyfyPassword(req.UserName, req.Password)
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return return
} }
@ -137,7 +137,6 @@ func (this *UserController) GetUser(c *gin.Context) {
resp.Data = users resp.Data = users
} }
func (this *UserController) Users(c *gin.Context) { func (this *UserController) Users(c *gin.Context) {
var statuscode int var statuscode int
var resp RespBase var resp RespBase
@ -169,7 +168,6 @@ func (this *UserController) Users(c *gin.Context) {
resp.Data = dat resp.Data = dat
} }
func (this *UserController) SerarchUsers(c *gin.Context) { func (this *UserController) SerarchUsers(c *gin.Context) {
var statuscode int var statuscode int
var resp RespBase var resp RespBase
@ -234,7 +232,6 @@ func DefaultOption(c *gin.Context) {
}() }()
} }
func (this *UserController) Login(c *gin.Context) { func (this *UserController) Login(c *gin.Context) {
type LoginReq struct { type LoginReq struct {
RememberMe int32 `json:"remember_me"` RememberMe int32 `json:"remember_me"`
@ -258,7 +255,7 @@ func (this *UserController) Login(c *gin.Context) {
h.Write([]byte(req.UserPwd)) // 需要加密的字符串为 123456 h.Write([]byte(req.UserPwd)) // 需要加密的字符串为 123456
passmd5 := h.Sum(nil) passmd5 := h.Sum(nil)
var result []model.Users var result []model.Users
query := fmt.Sprintf("select * from users where user_name = '%s'",req.UserName) query := fmt.Sprintf("select * from users where user_name = '%s'", req.UserName)
er := db.GetMysqlClient().Query2(query, er := db.GetMysqlClient().Query2(query,
&result) &result)
logs.Debug("sql query:" + query) logs.Debug("sql query:" + query)
@ -395,7 +392,7 @@ func (this *UserController) Register(c *gin.Context) {
func (this *UserController) Logout(c *gin.Context) { func (this *UserController) Logout(c *gin.Context) {
token := c.Param("token") token := c.Param("token")
log.Print("logout token is ",token) log.Print("logout token is ", token)
var resp RespBase var resp RespBase
config.RedisOne().Del(token) config.RedisOne().Del(token)
resp.Msg = "退出成功" resp.Msg = "退出成功"

View File

@ -7,48 +7,62 @@ import (
"crypto/x509" "crypto/x509"
"database/sql" "database/sql"
"fmt" "fmt"
"github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql"
"gopkg.in/mgo.v2"
"gopkg.in/olivere/elastic.v7"
"io/ioutil" "io/ioutil"
"log" "log"
"os" "os"
"github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"gopkg.in/mgo.v2"
"gopkg.in/olivere/elastic.v7"
) )
var gEla ElkEngine var gEla ElkEngine
var gDb Database var gDb Database
var blogDb Database var blogDb Database
var gMongo *mgo.Session var gMongo *mgo.Session
var gElkEngine ElkEngine var gElkEngine ElkEngine
var gOrm *gorm.DB
func Init() { func Init() {
var e error
mysqlconf := config.GetMysqlConfig() mysqlconf := config.GetMysqlConfig()
blogConf := config.GetMysqlBlogConfig()
//InitMongoDb() //InitMongoDb()
fmt.Print("api runmode is " + config.ApiConfig().RunMode) log.Print("api runmode is " + config.ApiConfig().RunMode)
if config.ApiConfig().RunMode == "debug"{ if config.ApiConfig().RunMode == "debug" {
blogDb = Database{Type: string(""), DB: initMysqlTLS(blogConf)} gDb = Database{Type: string(""), DB: initMysql(mysqlconf)}
}else{ sqls := fmt.Sprintf("%s:%s@(%s)/%s?charset=utf8&parseTime=True&loc=Local",
blogDb = Database{Type: string(""), DB: initMysqlTLS(blogConf)} mysqlconf.UserName, mysqlconf.Password, mysqlconf.Addr,
} mysqlconf.Db)
if config.ApiConfig().RunMode == "debug"{ log.Print(sqls)
gDb = Database{Type: string(""), DB: initMysqlTLS(mysqlconf)} gOrm, e = gorm.Open("mysql", sqls)
}else{ if nil != e {
gDb = Database{Type: string(""), DB: initMysqlTLS(mysqlconf)} log.Print(e.Error())
os.Exit(-1)
}
} else {
sqls := fmt.Sprintf("%s:%s@/%s?charset=utf8&parseTime=True&loc=Local", mysqlconf.UserName, mysqlconf.Password,
mysqlconf.Db)
gOrm, e = gorm.Open("mysql", sqls)
if nil != e {
log.Print(e.Error())
os.Exit(-1)
}
} }
InitELK() InitELK()
} }
func InitELK() { func InitELK() {
var e error var e error
elkconf := config.GetElkConfig() elkconf := config.GetElkConfig()
log.Print(elkconf) log.Print(elkconf)
gElkEngine.cli,e = elastic.NewClient( gElkEngine.cli, e = elastic.NewClient(
elastic.SetURL(elkconf.Address), elastic.SetURL(elkconf.Address),
// Must turn off sniff in docker // Must turn off sniff in docker
elastic.SetSniff(false),) elastic.SetSniff(false))
if nil != e{ if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
gElkEngine.cli = nil gElkEngine.cli = nil
} }
@ -72,7 +86,7 @@ func initMysql(mysqlconf *config.MysqlConfig) *sql.DB {
fmt.Println(e.Error()) fmt.Println(e.Error())
os.Exit(200) os.Exit(200)
} }
return _db return _db
} }
func initMysqlTLS(mysqlconf *config.MysqlConfig) *sql.DB { func initMysqlTLS(mysqlconf *config.MysqlConfig) *sql.DB {
@ -91,8 +105,8 @@ func initMysqlTLS(mysqlconf *config.MysqlConfig) *sql.DB {
} }
clientCert = append(clientCert, certs) clientCert = append(clientCert, certs)
mysql.RegisterTLSConfig("custom", &tls.Config{ mysql.RegisterTLSConfig("custom", &tls.Config{
RootCAs: rootCertPool, RootCAs: rootCertPool,
Certificates: clientCert, Certificates: clientCert,
InsecureSkipVerify: true, InsecureSkipVerify: true,
}) })
cnn := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?charset=utf8&tls=custom", mysqlconf.UserName, mysqlconf.Password, cnn := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?charset=utf8&tls=custom", mysqlconf.UserName, mysqlconf.Password,
@ -108,22 +122,22 @@ func initMysqlTLS(mysqlconf *config.MysqlConfig) *sql.DB {
fmt.Println(e.Error()) fmt.Println(e.Error())
os.Exit(200) os.Exit(200)
} }
return _db return _db
} }
func initMongoDb(conf *config.MongoConfig) *mgo.Session{ func initMongoDb(conf *config.MongoConfig) *mgo.Session {
var url string var url string
if conf.UserName == ""{ if conf.UserName == "" {
url = fmt.Sprintf("mongodb://%s:%d/%s",conf.Addr,conf.Port,conf.Db) url = fmt.Sprintf("mongodb://%s:%d/%s", conf.Addr, conf.Port, conf.Db)
}else{ } else {
url = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s",conf.UserName,conf.Password,conf.Addr,conf.Port,conf.Db) url = fmt.Sprintf("mongodb://%s:%s@%s:%d/%s", conf.UserName, conf.Password, conf.Addr, conf.Port, conf.Db)
} }
log.Print("connect to url " + url) log.Print("connect to url " + url)
logs.Debug("connect to url " + url) logs.Debug("connect to url " + url)
mgo,err := mgo.Dial(url) mgo, err := mgo.Dial(url)
if nil != err{ if nil != err {
logs.Error(err.Error()) logs.Error(err.Error())
return nil return nil
} }
@ -133,20 +147,23 @@ func initMongoDb(conf *config.MongoConfig) *mgo.Session{
func GetMysqlClient() *Database { func GetMysqlClient() *Database {
return &gDb return &gDb
} }
func GetBlogMysql() *Database{ func GetBlogMysql() *Database {
return &blogDb return &blogDb
} }
func GetMongoDb() *mgo.Session { func GetMongoDb() *mgo.Session {
return gMongo return gMongo
} }
func InitMongoDb() { func InitMongoDb() {
mongoConf := config.GetMongoDBConfig() mongoConf := config.GetMongoDBConfig()
gMongo = initMongoDb(mongoConf) gMongo = initMongoDb(mongoConf)
if gMongo == nil{ if gMongo == nil {
log.Print("error mongo initial") log.Print("error mongo initial")
os.Exit(25) os.Exit(25)
} }
} }
func GetElastic() *ElkEngine{ func GetElastic() *ElkEngine {
return &gElkEngine return &gElkEngine
} }
func GetOrm() *gorm.DB {
return gOrm
}

62
main.go
View File

@ -8,12 +8,14 @@ import (
_ "background/docs" _ "background/docs"
"background/logs" "background/logs"
"background/model" "background/model"
"github.com/gin-gonic/gin"
"github.com/swaggo/files" // swagger embed files
"github.com/swaggo/gin-swagger" // gin-swagger middleware
"github.com/tommy351/gin-sessions"
"log" "log"
"os"
"strconv" "strconv"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files" // swagger embed files
ginSwagger "github.com/swaggo/gin-swagger" // gin-swagger middleware
sessions "github.com/tommy351/gin-sessions"
) )
// @title 大厅功能api // @title 大厅功能api
@ -22,28 +24,27 @@ import (
// @BasePath /api/v1 // @BasePath /api/v1
var ( var (
userController = controller.UserController{} userController = controller.UserController{}
mailContoller = controller.MailController{} mailContoller = controller.MailController{}
fileController = controller.FileController{} fileController = controller.FileController{}
webhookController = controller.WebHookController{} webhookController = controller.WebHookController{}
) )
func CORSMiddleware(c *gin.Context) { func CORSMiddleware(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE") c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
if config.ApiConfig().RunMode == "release"{ if config.ApiConfig().RunMode == "release" {
c.Writer.Header().Set("Access-Control-Allow-Origin", "https://testingcloud.club") c.Writer.Header().Set("Access-Control-Allow-Origin", "https://testingcloud.club")
}else{ } else {
c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:8080") c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:8080")
} }
c.Writer.Header().Set("Access-Control-Max-Age", "86400") c.Writer.Header().Set("Access-Control-Max-Age", "86400")
c.Writer.Header().Set("Access-Control-Allow-Headers", c.Writer.Header().Set("Access-Control-Allow-Headers",
"X-Requested-With," + "X-Requested-With,"+
" Content-Type, Origin, Authorization," + " Content-Type, Origin, Authorization,"+
"Accept,Client-Security-Token, Accept-Encoding," + "Accept,Client-Security-Token, Accept-Encoding,"+
"x-access-token,Access-Control-Request-Method," + "x-access-token,Access-Control-Request-Method,"+
"Access-Control-Request-Headers") "Access-Control-Request-Headers")
c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length") c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
@ -79,9 +80,9 @@ func InitRedisConfig() {
} }
} }
func InitElasticSearch(){ func InitElasticSearch() {
e := db.GetElastic().CreateIndex("hardware",model.HardwareTypeMapping()) e := db.GetElastic().CreateIndex("hardware", model.HardwareTypeMapping())
if nil != e{ if nil != e {
} }
} }
@ -90,6 +91,8 @@ func InitLogs() {
logs.Init(config.GetLogConfig().Dir, config.GetLogConfig().File, config.GetLogConfig().Level, config.GetLogConfig().SaveFile) logs.Init(config.GetLogConfig().Dir, config.GetLogConfig().File, config.GetLogConfig().Level, config.GetLogConfig().SaveFile)
} }
func main() { func main() {
log.Print("gid is", os.Getegid())
InitConfig() InitConfig()
InitLogs() InitLogs()
InitRedisConfig() InitRedisConfig()
@ -136,7 +139,7 @@ func main() {
api.POST("/articles", controller.GetArticles) // 获取所有文章 api.POST("/articles", controller.GetArticles) // 获取所有文章
api.PUT("/article", controller.AddArticle) // 添加文章 api.PUT("/article", controller.AddArticle) // 添加文章
api.PUT("/article_search", controller.SearchArticle) // 添加文章 api.PUT("/article_search", controller.SearchArticle) // 添加文章
api.GET("/article_type", controller.ArticlesType) //获取所有文章分类 api.GET("/article_type", controller.ArticlesType) //获取所有文章分类
api.PUT("/article_type", controller.AddArticleType) api.PUT("/article_type", controller.AddArticleType)
api.DELETE("/article_type", controller.DeleteArticleType) api.DELETE("/article_type", controller.DeleteArticleType)
@ -156,16 +159,23 @@ func main() {
api.GET("/filelist", fileController.FileList) // 文件列表 api.GET("/filelist", fileController.FileList) // 文件列表
api.GET("/fileType", fileController.FileType) // 文件类型 api.GET("/fileType", fileController.FileType) // 文件类型
api.PUT("/memo", controller.CreateMemo) // 备忘录新建 api.PUT("/memo", controller.CreateMemo) // 备忘录新建
api.POST("/memo", controller.UpdateMemo) // 备忘录更新 api.POST("/memo", controller.UpdateMemo) // 备忘录更新
api.POST("/memos", controller.GetMemos) // 备忘录批量 api.POST("/memos", controller.GetMemos) // 备忘录批量
api.POST("/delmemo", controller.DeleteMemos) //删除备忘录 api.POST("/delmemo", controller.DeleteMemos) //删除备忘录
api.GET("/memo", controller.GetMemo) // 单独读取 api.GET("/memo", controller.GetMemo) // 单独读取
api.GET("doc_groups",controller.GetDocGroup) // 获取所有的文章分组 api.GET("doc_groups", controller.GetDocGroup) // 获取所有的文章分组
api.GET("templates", controller.GetDocTemplate) // 获取所有文章的模板
api.GET("doc_versions", nil) // 获取文章的某个版本
} }
hookapi := r.Group("hookapi") hookapi := r.Group("hookapi")
{ {
hookapi.POST("/push_hook/:repo",webhookController.PushHook) hookapi.POST("/push_hook/:repo", webhookController.PushHook)
}
openapi := r.Group("openapi")
{
openapi.POST("negotiate")
} }
e := r.Run(":" + strconv.Itoa(config.GetPort())) e := r.Run(":" + strconv.Itoa(config.GetPort()))
if nil != e { if nil != e {

View File

@ -4,28 +4,29 @@ import (
"background/db" "background/db"
"background/logs" "background/logs"
"fmt" "fmt"
"qiniupkg.com/x/log.v7"
"strings" "strings"
"qiniupkg.com/x/log.v7"
) )
type Doc struct { type Doc struct {
ID int64 `sql:"id" json:"id"` ID int64 `sql:"id" json:"id"`
Title string `sql:"title" json:"title"` Title string `sql:"title" json:"title"`
Type int64 `sql:"type" json:"type"` Type int64 `sql:"type" json:"type"`
Content string `sql:"content" json:"content"` Content string `sql:"content" json:"content"`
Author string `sql:"author" json:"author"` Author string `sql:"author" json:"author"`
IsPublic int `sql:"is_public" json:"is_public"` IsPublic int `sql:"is_public" json:"is_public"`
} }
type DocGroup struct { type DocGroup struct {
Int int32 `sql:"int"` Int int32 `sql:"int"`
Name string `sql:"name"` Name string `sql:"name"`
} }
type ArticleType struct { type ArticleType struct {
Id int64 `sql:"id" json:"id"` Id int64 `sql:"id" json:"id"`
Name string `sql:"type_name" json:"type_name"` Name string `sql:"type_name" json:"type_name"`
Author string `sql:"author" json:"author"` Author string `sql:"author" json:"author"`
Group int32 `sql:"group" json:"group"` Group int32 `sql:"group" json:"group"`
GroupName string `json:"group_name"` GroupName string `json:"group_name"`
} }
@ -33,11 +34,11 @@ func GetArticlesType() []ArticleType {
ret := []ArticleType{} ret := []ArticleType{}
sql := fmt.Sprintf("select * from doc_type") sql := fmt.Sprintf("select * from doc_type")
e := db.GetBlogMysql().Query2(sql, &ret) e := db.GetBlogMysql().Query2(sql, &ret)
for k,_ := range ret{ for k, _ := range ret {
group := []DocGroup{} group := []DocGroup{}
sql = fmt.Sprintf("select * from doc_group where doc_group.int = %d",ret[k].Group) sql = fmt.Sprintf("select * from doc_group where doc_group.int = %d", ret[k].Group)
db.GetBlogMysql().Query2(sql, &group) db.GetBlogMysql().Query2(sql, &group)
if len(group) > 0{ if len(group) > 0 {
ret[k].GroupName = group[0].Name ret[k].GroupName = group[0].Name
} }
} }
@ -60,7 +61,7 @@ func CreateDoc(doc Doc) error {
DUAL DUAL
WHERE WHERE
NOT EXISTS ( SELECT * FROM doc WHERE doc.title = '%s' );`, doc.Title, strings.Replace(doc.Content, "'", "\\'", -1), NOT EXISTS ( SELECT * FROM doc WHERE doc.title = '%s' );`, doc.Title, strings.Replace(doc.Content, "'", "\\'", -1),
doc.Author, doc.Type,doc.IsPublic,doc.Title) doc.Author, doc.Type, doc.IsPublic, doc.Title)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
@ -69,10 +70,10 @@ func CreateDoc(doc Doc) error {
return nil return nil
} }
func UpdateDoc(doc Doc) error{ func UpdateDoc(doc Doc) error {
sql := fmt.Sprintf(`update doc set doc.author = '%s' ,doc.title = '%s',doc.type = '%d',doc.content = '%s' where doc.id = '%d'; `, sql := fmt.Sprintf(`update doc set doc.author = '%s' ,doc.title = '%s',doc.type = '%d',doc.content = '%s' where doc.id = '%d'; `,
doc.Author, doc.Title, doc.Type, doc.Author, doc.Title, doc.Type,
strings.Replace(doc.Content, "'", "\\'", -1),doc.ID) strings.Replace(doc.Content, "'", "\\'", -1), doc.ID)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
@ -81,8 +82,8 @@ func UpdateDoc(doc Doc) error{
return nil return nil
} }
func DeleteDoc(id int64) error{ func DeleteDoc(id int64) error {
sql := fmt.Sprintf(`delete from doc where id = %d`,id) sql := fmt.Sprintf(`delete from doc where id = %d`, id)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
@ -91,8 +92,8 @@ func DeleteDoc(id int64) error{
return nil return nil
} }
func AddArticleType(t ArticleType) error{ func AddArticleType(t ArticleType) error {
sql := fmt.Sprintf("insert into doc_type(id,type_name,`group`) values ('%d','%s','%d')",t.Id,t.Name,t.Group) sql := fmt.Sprintf("insert into doc_type(id,type_name,`group`) values ('%d','%s','%d')", t.Id, t.Name, t.Group)
log.Print(sql) log.Print(sql)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
@ -101,8 +102,8 @@ func AddArticleType(t ArticleType) error{
} }
return nil return nil
} }
func UpdateArticleType(t ArticleType) error{ func UpdateArticleType(t ArticleType) error {
sql := fmt.Sprintf("update doc_type set type_name = '%s' and group = '%d' where id = %d",t.Name,t.Group,t.Id) sql := fmt.Sprintf("update doc_type set type_name = '%s' and group = '%d' where id = %d", t.Name, t.Group, t.Id)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
@ -111,8 +112,8 @@ func UpdateArticleType(t ArticleType) error{
return nil return nil
} }
func DeleteArticleType(id int32) error { func DeleteArticleType(id int32) error {
sql := fmt.Sprintf("delete from doc_type where id = '%d'",id) sql := fmt.Sprintf("delete from doc_type where id = '%d'", id)
_, e := db.GetMysqlClient().Query(sql) _, e := db.GetMysqlClient().Query(sql)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
@ -121,24 +122,24 @@ func DeleteArticleType(id int32) error {
return nil return nil
} }
func GetAllDocs() ([]Doc,error) { func GetAllDocs() ([]Doc, error) {
ret := []Doc{} ret := []Doc{}
sql := fmt.Sprintf("select * from doc") sql := fmt.Sprintf("select * from doc")
e := db.GetMysqlClient().Query2(sql,&ret) e := db.GetMysqlClient().Query2(sql, &ret)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return nil,e return nil, e
} }
return ret,nil return ret, nil
} }
func GetAllGroup() ([]DocGroup,error) { func GetAllGroup() ([]DocGroup, error) {
ret := []DocGroup{} ret := []DocGroup{}
sql := fmt.Sprintf("select * from doc_group") sql := fmt.Sprintf("select * from doc_group")
e := db.GetMysqlClient().Query2(sql,&ret) e := db.GetMysqlClient().Query2(sql, &ret)
if nil != e { if nil != e {
logs.Error(e.Error()) logs.Error(e.Error())
return nil,e return nil, e
} }
return ret,nil return ret, nil
} }