package handlers import ( "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/repositories" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/storage" "github.com/gin-gonic/gin" "strconv" ) type PostHandlers struct { repo repositories.PostRepository } func NewPostHandler(repo repositories.PostRepository) *PostHandlers { return &PostHandlers{repo: repo} } var log = logger.New(false) // GetPosts godoc // @Summary Get all posts // @Description Get all posts // @Tags posts // @Accept json // @Produce json // @Success 200 {object} []storage.PostReq // @Router /posts [get] func (h *PostHandlers) GetPosts(c *gin.Context) { var result []storage.PostReq result, err := h.repo.GetAll(c.Request.Context()) if err != nil { log.Error("error request: " + err.Error()) c.Status(500) } log.Info("200 OK GET /posts") c.JSON(200, result) } // GetPost godoc // @Summary Get post by id // @Description Get post by id // @Tags posts // @Accept json // @Param id path int true "Post ID" // @Produce json // @Success 200 {object} storage.PostReq // @Failure 400 {object} map[string]string "Invalid ID format" // @Failure 500 {object} map[string]string "Internal server error" // @Router /posts/{id} [get] func (h *PostHandlers) GetPost(c *gin.Context) { var result storage.PostReq id_p := c.Param("id") id, err := strconv.Atoi(id_p) if err != nil { log.Error("error request: " + err.Error()) c.Status(500) } result, err = h.repo.GetByID(c.Request.Context(), id) if err != nil { log.Error("error request: " + err.Error()) c.Status(500) } log.Info("200 OK GET /posts/" + id_p) c.JSON(200, result) // TODO: added validaton for 400 response } // CreatePost godoc // @Summary Create post // @Description Create new post // @Tags posts // @Accept json // @Produce json // @Param post body storage.PostCreate true "Post data" // @Success 200 {object} storage.PostReq // @Failure 400 {object} gin.H // @Router /posts [post] func (h *PostHandlers) CreatePost(c *gin.Context) { var req storage.PostCreate if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } post := storage.Post{ Title: req.Title, Content: req.Content, } if err := h.repo.Create(c.Request.Context(), post); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, post) } // UpdatePost godoc // @Summary Update post // @Description Update post // @Tags posts // @Accept json // @Param id path int true "Post ID" // @Param post body storage.PostCreate true "Post data" // @Produce json // @Success 200 {object} storage.PostCreate // @Router /posts/{id} [put] func (h *PostHandlers) UpdatePost(c *gin.Context) { id_p := c.Param("id") id, err := strconv.Atoi(id_p) if err != nil { log.Error("error request: " + err.Error()) c.Status(500) } var req storage.Post if err := c.ShouldBindJSON(&req); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } err = h.repo.Update(c.Request.Context(), id, req) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } c.JSON(200, req) log.Info("200 OK PUT /posts/" + id_p) } // DeletePost godoc // @Summary Delete post // @Description Delete post // @Tags posts // @Accept json // @Produce json // @Success 200 {object} storage.Post // @Router /posts/{id} [delete] func DeletePost(c *gin.Context) { log.Info("DeletePost") }