Added GetAllOffset. Post controller completed.

This commit is contained in:
KamilM1205 2025-09-20 19:34:17 +04:00
parent 5b18009658
commit 41944884b4
12 changed files with 229 additions and 71 deletions

View file

@ -9,6 +9,7 @@ import (
"58team_blog/internal/interfaces/api/responses"
"log"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
@ -31,10 +32,10 @@ func CreatePostController(service *services.PostService) PostController {
// @Tags post
// @Accept json
// @Produce json
// @Param request body requests.CreatePostRequest true "Post data"
// @Success 200 {object} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Failure 500 {object} responses.ErrorResponse
// @Param request body requests.CreatePostRequest true "Post data"
// @Success 200 {object} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Failure 500 {object} responses.ErrorResponse
// @Router /post [post]
func (r *PostController) Post(c *gin.Context) {
var request requests.CreatePostRequest
@ -42,7 +43,7 @@ func (r *PostController) Post(c *gin.Context) {
if err := c.BindJSON(&request); err != nil {
log.Println(err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "BadRequest")
c.IndentedJSON(resp.ErrorCode, resp)
c.JSON(resp.ErrorCode, resp)
return
}
@ -50,7 +51,7 @@ func (r *PostController) Post(c *gin.Context) {
if err != nil {
log.Println(err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Incorrect user id")
c.IndentedJSON(resp.ErrorCode, resp)
c.JSON(resp.ErrorCode, resp)
return
}
@ -65,13 +66,13 @@ func (r *PostController) Post(c *gin.Context) {
if err != nil {
log.Println(err)
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
c.IndentedJSON(resp.ErrorCode, resp)
c.JSON(resp.ErrorCode, resp)
return
}
response := dto.ResponseFromPostResult(res)
c.IndentedJSON(http.StatusOK, response)
c.JSON(http.StatusOK, response)
}
// GetAllPost godoc
@ -80,15 +81,15 @@ func (r *PostController) Post(c *gin.Context) {
// @Description Return first 5 posts
// @Tags post
// @Produce json
// @Success 200 {array} responses.GetListPostResponseItem
// @Failure 500 {object} responses.ErrorResponse
// @Success 200 {array} responses.GetListPostResponseItem
// @Failure 500 {object} responses.ErrorResponse
// @Router /post [get]
func (r *PostController) GetAll(c *gin.Context) {
result, err := r.service.GetAll()
if err != nil {
log.Println(err)
resp := responses.CreateErrorResponse(http.StatusInternalServerError, "Internal server error")
c.IndentedJSON(resp.ErrorCode, resp)
c.JSON(resp.ErrorCode, resp)
return
}
@ -98,26 +99,48 @@ func (r *PostController) GetAll(c *gin.Context) {
}
// GetAllWithOffsetPost godoc
// @Summary Get posts after offset
// @Description return 5 posts after first offset posts
// @Tags post
// @Param offset query int true "Offset of posts"
// @Produce json
// @Success 200 {array} responses.GetListPostResponseItem
// @Router /post/{offset} [get]
//
// @Summary Get posts after offset
// @Description return 5 posts after first offset posts
// @Tags post
// @Param offset path int true "Offset of posts"
// @Produce json
// @Success 200 {array} responses.GetListPostResponseItem
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/offset/{offset} [get]
func (r *PostController) GetAllWithOffset(c *gin.Context) {
offset_param := c.Param("offset")
offset, err := strconv.Atoi(offset_param)
if err != nil {
log.Println("Post get all with offset error: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
result, err := r.service.GetAllOffset(offset)
if err != nil {
log.Println("Post get all with offset error: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
res := dto.ResponseFromPostGetAllResult(result)
c.JSON(http.StatusOK, res)
}
// GetByIdPost godoc
// @Summary Get post by id
// @Description get post by id
// @Tags post
// @Param id query string true "Id of post"
// @Produce json
// @Success 200 {array} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/{id} [get]
//
// @Summary Get post by id
// @Description get post by id
// @Tags post
// @Param id path string true "Id of post"
// @Produce json
// @Success 200 {array} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/{id} [get]
func (r *PostController) GetById(c *gin.Context) {
id := c.Param("id")
@ -147,36 +170,86 @@ func (r *PostController) GetById(c *gin.Context) {
}
// PutPost godoc
// @Summary Update post content
// @Description update post content
// @Tags post
// @Param id query string true "Id of post"
//
// @Param request body requests.PutPostRequest true "Post data"
// @Summary Update post content
// @Description update post content
// @Tags post
// @Param id path string true "Id of post"
//
// @Produce json
// @Success 200 {object} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/{id} [put]
// @Param request body requests.PutPostRequest true "Post data"
//
// @Produce json
// @Success 200 {object} responses.PostResponse
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/{id} [put]
func (r *PostController) Put(c *gin.Context) {
var request requests.PutPostRequest
id := c.Param("id")
id_valid, err := uuid.Parse(id)
if err != nil {
log.Println("Post: invalid post id: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
if err := c.BindJSON(request); err != nil {
log.Println("Post request error: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
cmd := commands.UpdatePostCommand{
Id: id_valid,
Title: request.Title,
Description: request.Description,
Content: request.Content,
}
post, err := r.service.Update(cmd)
if err != nil {
log.Println("Post service error: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
response := dto.ResponseFromPostResult(post)
c.JSON(http.StatusOK, response)
}
// Delete godoc
// @Summary Delete post
// @Description Delete post by id
// @Tags post
// @Param id query string true "Id of post"
// @Produce json
// @Success 200
// @Router /post/{id} [delete]
//
// @Summary Delete post
// @Description Delete post by id
// @Tags post
// @Param id path string true "Id of post"
// @Produce json
// @Success 200
// @Failure 400 {object} responses.ErrorResponse
// @Router /post/{id} [delete]
func (r *PostController) Delete(c *gin.Context) {
id := c.Param("id")
id_valid, err := uuid.Parse(id)
if err != nil {
log.Println("Post: invalid post id: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
cmd := commands.DeletePostCommand{
Id: id_valid,
}
err = r.service.Delete(cmd)
if err != nil {
log.Println("Post delete error: ", err)
resp := responses.CreateErrorResponse(http.StatusBadRequest, "Bad request")
c.JSON(resp.ErrorCode, resp)
return
}
c.Status(http.StatusOK)
}

View file

@ -19,9 +19,9 @@ func CreateUserController(service *services.UserService) UserController {
// @Summary Create new user
// @Description Creates new user in system
// @Param path query string true "Path to image"
// @Produce
// @Success 200
// @Router /images/{path} [get]
// @Produce json
// @Success 200
// @Router /images/{path} [get]
func (r *UserController) Post(c *gin.Context) {
// TODO: return image
panic("Not implemented")