2025-01-28 18:43:37 +03:00

92 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Controller that handles everything d1xxe blog related features.
Under the hood it operates with repositories.Blog to get all information from
local database.
In a nutshell it's pretty simple.
*/
package controllers
import (
"context"
"fmt"
"log"
"net/http"
"strconv"
"github.com/dixxe/personal-website/iternal/pkg/repositories"
"github.com/dixxe/personal-website/web/templates"
"github.com/go-chi/chi/v5"
)
// This controller passes all posts in database in template and responds with page with all size-reduced posts.
func GetShowBlog(w http.ResponseWriter, r *http.Request) {
posts, err := repositories.Blog.GetAllValues()
if err != nil {
component := templates.ErrorPage(500, "Ошибка при обработке базы данных.")
// For some reason I can't set status code for request x-x
log.Println(err)
component.Render(context.Background(), w)
return
}
component := templates.ShowBlogPage(posts)
component.Render(context.Background(), w)
}
// This controller looks for specific post in database and handles all possible errors. Responds with page with post.
func GetPost(w http.ResponseWriter, r *http.Request) {
id, err := strconv.Atoi(chi.URLParam(r, "id"))
if err != nil {
component := templates.ErrorPage(500, "Не удалось преобразовать id в целое число.")
log.Println(err)
component.Render(context.Background(), w)
return
}
post, err := repositories.Blog.GetValueByID(id)
if err != nil {
component := templates.ErrorPage(404, "Не удалось найти нужный пост.")
log.Println(err)
component.Render(context.Background(), w)
return
}
component := templates.ShowPost(post)
component.Render(context.Background(), w)
}
// Controller that handles post creation. Responds with 200 if everything OK
func PostCreatePost(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // Populating form.
header := r.FormValue("header") // To get value you need to specify name="header" in the form.
content := r.FormValue("content")
// Creating a new post with 0 Id, don't worry database handles id assignment
// itself. And in the InsertValue() method I don't use Post.Id value
newPost := repositories.Post{Id: 0, Header: header, Content: content}
// Process database is async way. WARNING errors are NOT HANDLED
go repositories.Blog.InsertValue(newPost)
fmt.Println("Created post")
}
// Controller that handles post deletion. Responds with 200 if everything is OK
func PostDeletePost(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
id, err := strconv.Atoi(r.FormValue("id"))
if err != nil {
component := templates.ErrorPage(500, "Ошибка при переводе id (int) в string.")
r.Response.StatusCode = 500
log.Println(err)
component.Render(context.Background(), w)
}
// Process database is async way. WARNING errors are NOT HANDLED
go repositories.Blog.DeleteValueByID(id)
}