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?Пост обновлен")
|
||
})
|
||
}
|