hikan.ru/mvc/controllers/post.go

77 lines
2.6 KiB
Go
Raw Permalink Normal View History

2025-02-02 16:43:55 +03:00
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?Пост обновлен")
})
}