hikan.ru/mvc/controllers/post.go

77 lines
2.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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