77 lines
2.6 KiB
Go
77 lines
2.6 KiB
Go
|
package controllers
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"main/mvc/models"
|
|||
|
"net/http"
|
|||
|
"strconv"
|
|||
|
|
|||
|
"github.com/gin-gonic/gin"
|
|||
|
)
|
|||
|
|
|||
|
type СhangePostRequest struct {
|
|||
|
Postname string `form:"name" json:"name"`
|
|||
|
Tags string `form:"tags" json:"tags"`
|
|||
|
Body string `form:"body" json:"body"`
|
|||
|
}
|
|||
|
|
|||
|
func AddPost(tmplname string, group *gin.RouterGroup, s *models.Site) {
|
|||
|
group.POST(fmt.Sprintf("/%s", tmplname), func(c *gin.Context) {
|
|||
|
var requestData СhangePostRequest
|
|||
|
|
|||
|
// Привязка данных формы к структуре
|
|||
|
if err := c.ShouldBind(&requestData); err != nil {
|
|||
|
c.Redirect(http.StatusFound, "/index/1?Ошибка при привязке данных к структуре")
|
|||
|
return
|
|||
|
}
|
|||
|
models.AddPost(s.DB, "admin", requestData.Postname, requestData.Body, requestData.Tags)
|
|||
|
// Актуализация данных в ОЗУ
|
|||
|
s.Posts, _ = models.PostsListFromDB(s.DB)
|
|||
|
s.Tags = s.Posts.TagsMap()
|
|||
|
//
|
|||
|
c.Redirect(http.StatusFound, fmt.Sprintf("/post/%d?Пост создан", len(s.Posts)))
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func EditPost(tmplname string, group *gin.RouterGroup, s *models.Site) {
|
|||
|
group.POST(fmt.Sprintf("/%s/:id", tmplname), func(c *gin.Context) {
|
|||
|
postIndex, err := strconv.Atoi(c.Param("id")) // Получаем параметр из URL
|
|||
|
if err != nil {
|
|||
|
c.Redirect(http.StatusFound, "/index/1?Ошибка при получении номера страницы")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
var requestData СhangePostRequest
|
|||
|
|
|||
|
// Привязка данных формы к структуре
|
|||
|
if err := c.ShouldBind(&requestData); err != nil {
|
|||
|
c.Redirect(http.StatusFound, "/index/1?Ошибка при привязке данных к структуре")
|
|||
|
return
|
|||
|
}
|
|||
|
models.UpdatePost(s.DB, postIndex, "admin", requestData.Postname,
|
|||
|
requestData.Body, requestData.Tags)
|
|||
|
// Актуализация данных в ОЗУ
|
|||
|
s.Posts, _ = models.PostsListFromDB(s.DB)
|
|||
|
s.Tags = s.Posts.TagsMap()
|
|||
|
//
|
|||
|
c.Redirect(http.StatusFound, fmt.Sprintf("/post/%d?Пост обновлен", postIndex))
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
func DeletePost(tmplname string, group *gin.RouterGroup, s *models.Site) {
|
|||
|
group.POST(fmt.Sprintf("/%s/:id", tmplname), func(c *gin.Context) {
|
|||
|
postIndex, err := strconv.Atoi(c.Param("id")) // Получаем параметр из URL
|
|||
|
if err != nil {
|
|||
|
c.Redirect(http.StatusFound, "/index/1?Ошибка при получении номера страницы")
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
models.DelPost(s.DB, postIndex)
|
|||
|
// Актуализация данных в ОЗУ
|
|||
|
s.Posts, _ = models.PostsListFromDB(s.DB)
|
|||
|
s.Tags = s.Posts.TagsMap()
|
|||
|
//
|
|||
|
c.Redirect(http.StatusFound, "/index/1?Пост обновлен")
|
|||
|
})
|
|||
|
}
|