Skip to content

Commit d930007

Browse files
Merge pull request #29 from oleksandrkhmil/feature/refactor-post-handler
Feature/refactor post handler
2 parents e8f7135 + 484667e commit d930007

File tree

4 files changed

+54
-29
lines changed

4 files changed

+54
-29
lines changed

internal/server/handlers/post_handler.go

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,28 @@ import (
55
"strconv"
66

77
"github.com/nix-united/golang-echo-boilerplate/internal/models"
8-
"github.com/nix-united/golang-echo-boilerplate/internal/repositories"
98
"github.com/nix-united/golang-echo-boilerplate/internal/requests"
109
"github.com/nix-united/golang-echo-boilerplate/internal/responses"
11-
s "github.com/nix-united/golang-echo-boilerplate/internal/server"
12-
postservice "github.com/nix-united/golang-echo-boilerplate/internal/services/post"
1310
"github.com/nix-united/golang-echo-boilerplate/internal/services/token"
1411

1512
"github.com/golang-jwt/jwt/v5"
1613
"github.com/labstack/echo/v4"
1714
)
1815

16+
type postService interface {
17+
Create(post *models.Post)
18+
GetPosts(posts *[]models.Post)
19+
GetPost(post *models.Post, id int)
20+
Update(post *models.Post, updatePostRequest *requests.UpdatePostRequest)
21+
Delete(post *models.Post)
22+
}
23+
1924
type PostHandlers struct {
20-
server *s.Server
25+
postService postService
2126
}
2227

23-
func NewPostHandlers(server *s.Server) *PostHandlers {
24-
return &PostHandlers{server: server}
28+
func NewPostHandlers(postService postService) PostHandlers {
29+
return PostHandlers{postService: postService}
2530
}
2631

2732
// CreatePost godoc
@@ -37,7 +42,7 @@ func NewPostHandlers(server *s.Server) *PostHandlers {
3742
// @Failure 400 {object} responses.Error
3843
// @Security ApiKeyAuth
3944
// @Router /posts [post]
40-
func (p *PostHandlers) CreatePost(c echo.Context) error {
45+
func (p PostHandlers) CreatePost(c echo.Context) error {
4146
createPostRequest := new(requests.CreatePostRequest)
4247

4348
if err := c.Bind(createPostRequest); err != nil {
@@ -58,9 +63,7 @@ func (p *PostHandlers) CreatePost(c echo.Context) error {
5863
UserID: id,
5964
}
6065

61-
postRepository := repositories.NewPostRepository(p.server.DB)
62-
postService := postservice.NewPostService(postRepository)
63-
postService.Create(&post)
66+
p.postService.Create(&post)
6467

6568
return responses.MessageResponse(c, http.StatusCreated, "Post successfully created")
6669
}
@@ -76,20 +79,18 @@ func (p *PostHandlers) CreatePost(c echo.Context) error {
7679
// @Failure 404 {object} responses.Error
7780
// @Security ApiKeyAuth
7881
// @Router /posts/{id} [delete]
79-
func (p *PostHandlers) DeletePost(c echo.Context) error {
82+
func (p PostHandlers) DeletePost(c echo.Context) error {
8083
id, _ := strconv.Atoi(c.Param("id"))
8184

82-
post := models.Post{}
85+
post := new(models.Post)
8386

84-
postRepository := repositories.NewPostRepository(p.server.DB)
85-
postRepository.GetPost(&post, id)
87+
p.postService.GetPost(post, id)
8688

8789
if post.ID == 0 {
8890
return responses.ErrorResponse(c, http.StatusNotFound, "Post not found")
8991
}
9092

91-
postService := postservice.NewPostService(postRepository)
92-
postService.Delete(&post)
93+
p.postService.Delete(post)
9394

9495
return responses.MessageResponse(c, http.StatusNoContent, "Post deleted successfully")
9596
}
@@ -104,11 +105,10 @@ func (p *PostHandlers) DeletePost(c echo.Context) error {
104105
// @Success 200 {array} responses.PostResponse
105106
// @Security ApiKeyAuth
106107
// @Router /posts [get]
107-
func (p *PostHandlers) GetPosts(c echo.Context) error {
108+
func (p PostHandlers) GetPosts(c echo.Context) error {
108109
var posts []models.Post
109110

110-
postRepository := repositories.NewPostRepository(p.server.DB)
111-
postRepository.GetPosts(&posts)
111+
p.postService.GetPosts(&posts)
112112

113113
response := responses.NewPostResponse(posts)
114114
return responses.Response(c, http.StatusOK, response)
@@ -129,7 +129,7 @@ func (p *PostHandlers) GetPosts(c echo.Context) error {
129129
// @Failure 404 {object} responses.Error
130130
// @Security ApiKeyAuth
131131
// @Router /posts/{id} [put]
132-
func (p *PostHandlers) UpdatePost(c echo.Context) error {
132+
func (p PostHandlers) UpdatePost(c echo.Context) error {
133133
updatePostRequest := new(requests.UpdatePostRequest)
134134
id, _ := strconv.Atoi(c.Param("id"))
135135

@@ -143,15 +143,13 @@ func (p *PostHandlers) UpdatePost(c echo.Context) error {
143143

144144
post := models.Post{}
145145

146-
postRepository := repositories.NewPostRepository(p.server.DB)
147-
postRepository.GetPost(&post, id)
146+
p.postService.GetPost(&post, id)
148147

149148
if post.ID == 0 {
150149
return responses.ErrorResponse(c, http.StatusNotFound, "Post not found")
151150
}
152151

153-
postService := postservice.NewPostService(postRepository)
154-
postService.Update(&post, updatePostRequest)
152+
p.postService.Update(&post, updatePostRequest)
155153

156154
return responses.MessageResponse(c, http.StatusOK, "Post successfully updated")
157155
}

internal/server/routes/routes.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package routes
33
import (
44
"fmt"
55

6+
"github.com/nix-united/golang-echo-boilerplate/internal/repositories"
67
s "github.com/nix-united/golang-echo-boilerplate/internal/server"
78
"github.com/nix-united/golang-echo-boilerplate/internal/server/handlers"
9+
"github.com/nix-united/golang-echo-boilerplate/internal/services/post"
810
"github.com/nix-united/golang-echo-boilerplate/internal/services/token"
911

1012
"github.com/golang-jwt/jwt/v5"
@@ -15,7 +17,10 @@ import (
1517
)
1618

1719
func ConfigureRoutes(server *s.Server) {
18-
postHandler := handlers.NewPostHandlers(server)
20+
postRepository := repositories.NewPostRepository(server.DB)
21+
postService := post.NewPostService(postRepository)
22+
23+
postHandler := handlers.NewPostHandlers(postService)
1924
authHandler := handlers.NewAuthHandler(server)
2025
registerHandler := handlers.NewRegisterHandler(server)
2126

internal/services/post/service.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ func (s Service) Create(post *models.Post) {
2525
s.postRepository.Create(post)
2626
}
2727

28+
func (s Service) GetPosts(posts *[]models.Post) {
29+
s.postRepository.GetPosts(posts)
30+
}
31+
32+
func (s Service) GetPost(post *models.Post, id int) {
33+
s.postRepository.GetPost(post, id)
34+
}
35+
2836
func (s Service) Update(post *models.Post, updatePostRequest *requests.UpdatePostRequest) {
2937
post.Content = updatePostRequest.Content
3038
post.Title = updatePostRequest.Title

tests/post_test.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import (
55
"net/http"
66
"testing"
77

8+
"github.com/nix-united/golang-echo-boilerplate/internal/repositories"
89
"github.com/nix-united/golang-echo-boilerplate/internal/requests"
910
"github.com/nix-united/golang-echo-boilerplate/internal/server"
1011
"github.com/nix-united/golang-echo-boilerplate/internal/server/handlers"
12+
"github.com/nix-united/golang-echo-boilerplate/internal/services/post"
1113
"github.com/nix-united/golang-echo-boilerplate/internal/services/token"
1214
"github.com/nix-united/golang-echo-boilerplate/tests/helpers"
1315

@@ -51,16 +53,28 @@ func TestWalkPostsCrud(t *testing.T) {
5153
},
5254
}
5355
handlerFuncCreate := func(s *server.Server, c echo.Context) error {
54-
return handlers.NewPostHandlers(s).CreatePost(c)
56+
postRepository := repositories.NewPostRepository(s.DB)
57+
postService := post.NewPostService(postRepository)
58+
59+
return handlers.NewPostHandlers(postService).CreatePost(c)
5560
}
5661
handlerFuncGet := func(s *server.Server, c echo.Context) error {
57-
return handlers.NewPostHandlers(s).GetPosts(c)
62+
postRepository := repositories.NewPostRepository(s.DB)
63+
postService := post.NewPostService(postRepository)
64+
65+
return handlers.NewPostHandlers(postService).GetPosts(c)
5866
}
5967
handlerFuncUpdate := func(s *server.Server, c echo.Context) error {
60-
return handlers.NewPostHandlers(s).UpdatePost(c)
68+
postRepository := repositories.NewPostRepository(s.DB)
69+
postService := post.NewPostService(postRepository)
70+
71+
return handlers.NewPostHandlers(postService).UpdatePost(c)
6172
}
6273
handlerFuncDelete := func(s *server.Server, c echo.Context) error {
63-
return handlers.NewPostHandlers(s).DeletePost(c)
74+
postRepository := repositories.NewPostRepository(s.DB)
75+
postService := post.NewPostService(postRepository)
76+
77+
return handlers.NewPostHandlers(postService).DeletePost(c)
6478
}
6579

6680
claims := &token.JwtCustomClaims{

0 commit comments

Comments
 (0)