Skip to content

Commit

Permalink
Merge pull request #13 from oleksandrkhmil/feature/refactor-post-service
Browse files Browse the repository at this point in the history
Feature/refactor post service
  • Loading branch information
oleksandrkhmil authored Jan 17, 2025
2 parents fed38e9 + 59d34c4 commit 35ca3b2
Show file tree
Hide file tree
Showing 3 changed files with 437 additions and 35 deletions.
75 changes: 40 additions & 35 deletions internal/service/post_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,89 +4,94 @@ import (
"net/http"

"github.com/nix-united/golang-gin-boilerplate/internal/model"
"github.com/nix-united/golang-gin-boilerplate/internal/repository"
)

type PostServiceI interface {
CreatePost(title, content string, userID uint) (*model.Post, *RestError)
GetAll(posts *[]model.Post) *RestError
GetByID(id int, post *model.Post) *RestError
Create(post *model.Post) *RestError
Save(post *model.Post) *RestError
Delete(post *model.Post) *RestError
//go:generate mockgen -source=$GOFILE -destination=post_service_mock_test.go -package=${GOPACKAGE}_test -typed=true

type postRepository interface {
GetAll(posts *[]model.Post) error
GetByID(id int, post *model.Post) error
Create(post *model.Post) error
Save(post *model.Post) error
Delete(post *model.Post) error
}

type PostService struct {
PostRepository repository.PostRepositoryI
postRepository postRepository
}

func (service *PostService) GetAll(posts *[]model.Post) *RestError {
if err := service.PostRepository.GetAll(posts); err != nil {
return &RestError{
func NewPostService(postRepository postRepository) PostService {
return PostService{postRepository: postRepository}
}

func (s PostService) CreatePost(title, content string, userID uint) (*model.Post, *RestError) {
post := &model.Post{
Title: title,
Content: content,
UserID: userID,
}

if err := s.postRepository.Create(post); err != nil {
return nil, &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}
return nil

return post, nil
}

func (service *PostService) GetByID(id int, post *model.Post) *RestError {
if err := service.PostRepository.GetByID(id, post); err != nil {
func (s PostService) Create(post *model.Post) *RestError {
if err := s.postRepository.Create(post); err != nil {
return &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}

return nil
}

func (service *PostService) Create(post *model.Post) *RestError {
if err := service.PostRepository.Create(post); err != nil {
func (s PostService) GetAll(posts *[]model.Post) *RestError {
if err := s.postRepository.GetAll(posts); err != nil {
return &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}

return nil
}

func (service *PostService) Save(post *model.Post) *RestError {
if err := service.PostRepository.Save(post); err != nil {
func (s PostService) GetByID(id int, post *model.Post) *RestError {
if err := s.postRepository.GetByID(id, post); err != nil {
return &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}

return nil
}

func (service *PostService) Delete(post *model.Post) *RestError {
if err := service.PostRepository.Delete(post); err != nil {
func (s PostService) Save(post *model.Post) *RestError {
if err := s.postRepository.Save(post); err != nil {
return &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}

return nil
}

func (service *PostService) CreatePost(title, content string, userID uint) (*model.Post, *RestError) {
post := &model.Post{
Title: title,
Content: content,
UserID: userID,
}

if err := service.PostRepository.Create(post); err != nil {
return nil, &RestError{
func (s PostService) Delete(post *model.Post) *RestError {
if err := s.postRepository.Delete(post); err != nil {
return &RestError{
Status: http.StatusInternalServerError,
Error: err,
}
}

return post, nil
}

func NewPostService(postRepo repository.PostRepositoryI) PostServiceI {
return &PostService{PostRepository: postRepo}
return nil
}
230 changes: 230 additions & 0 deletions internal/service/post_service_mock_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 35ca3b2

Please sign in to comment.