Skip to content

Commit

Permalink
Merge pull request #13 from isd-sgcu/gear/joh-28-pet-and-like-endpoints
Browse files Browse the repository at this point in the history
Gear/joh 28 pet and like endpoints
  • Loading branch information
macgeargear authored Jan 6, 2024
2 parents 7737307 + cabac9b commit 4d75cf2
Show file tree
Hide file tree
Showing 22 changed files with 1,057 additions and 86 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mock-gen:
mockgen -source ./src/pkg/service/auth/auth.service.go -destination ./src/mocks/service/auth/auth.mock.go
mockgen -source ./src/pkg/service/user/user.service.go -destination ./src/mocks/service/user/user.mock.go
mockgen -source ./src/pkg/service/pet/pet.service.go -destination ./src/mocks/service/pet/pet.mock.go
mockgen -source ./src/pkg/service/like/like.service.go -destination ./src/mocks/service/like/like.mock.go
mockgen -source ./src/pkg/service/image/image.service.go -destination ./src/mocks/service/image/image.mock.go
mockgen -source ./src/app/validator/validator.go -destination ./src/mocks/validator/validator.mock.go
mockgen -source ./src/app/router/context.go -destination ./src/mocks/router/context.mock.go
Expand Down
4 changes: 3 additions & 1 deletion src/app/constant/error.constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ const UnauthorizedMessage = "Unauthorized"
const DuplicateEmailMessage = "Duplicate Email"
const InternalErrorMessage = "Internal Error"
const UnavailableServiceMessage = "Unavailable Service"
const InvalidIDMessage = "Invalid ID"
const InvalidArgumentMessage = "Invalid Argument"

const PetNotFoundMessage = "Pet not found"
const InvalidArgument = "Invalid Argument"
const UserNotFoundMessage = "User not found"
25 changes: 19 additions & 6 deletions src/app/dto/like.dto.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
package dto

import (
"github.com/google/uuid"
)
type LikeResponse struct {
UserID string `json:"user_id"`
PetID string `json:"pet_id"`
}

type FindLikeRequest struct {
UserID string `json:"user_id" validate:"required"`
}

type CreateLikeRequest struct {
UserID string `json:"user_id" validate:"required"`
PetID string `json:"pet_id" validate:"required"`
}

type DeleteLikeRequest struct {
Id string `json:"id" validate:"required"`
}

type LikeDto struct {
UserID uuid.UUID `json:"user_id" validate:"required"`
PetID uuid.UUID `json:"pet_id" validate:"required"`
type DeleteLikeResponse struct {
Success bool `json:"success"`
}
13 changes: 3 additions & 10 deletions src/app/handler/image/image.handler.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
package auth

import (
"github.com/isd-sgcu/johnjud-gateway/src/app/dto"
"github.com/isd-sgcu/johnjud-gateway/src/app/router"
"github.com/isd-sgcu/johnjud-gateway/src/app/validator"
proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1"
imageSvc "github.com/isd-sgcu/johnjud-gateway/src/pkg/service/image"
)

type Handler struct {
service Service
service imageSvc.Service
validate *validator.DtoValidator
}

type Service interface {
FindByPetId(string) ([]*proto.Image, *dto.ResponseErr)
Upload(*dto.ImageDto) (*proto.Image, *dto.ResponseErr)
Delete(string) (bool, *dto.ResponseErr)
}

func NewHandler(service Service, validate *validator.DtoValidator) *Handler {
func NewHandler(service imageSvc.Service, validate *validator.DtoValidator) *Handler {
return &Handler{service, validate}
}

Expand Down
102 changes: 89 additions & 13 deletions src/app/handler/like/like.handler.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,111 @@
package auth

import (
"net/http"
"strings"

"github.com/isd-sgcu/johnjud-gateway/src/app/constant"
"github.com/isd-sgcu/johnjud-gateway/src/app/dto"
"github.com/isd-sgcu/johnjud-gateway/src/app/router"
"github.com/isd-sgcu/johnjud-gateway/src/app/validator"
proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/backend/like/v1"
likeConst "github.com/isd-sgcu/johnjud-gateway/src/constant/like"
likeSvc "github.com/isd-sgcu/johnjud-gateway/src/pkg/service/like"
)

type Handler struct {
service Service
validate *validator.DtoValidator
}

type Service interface {
FindByUserId(string) ([]*proto.Like, *dto.ResponseErr)
Create(*dto.LikeDto) (*proto.Like, *dto.ResponseErr)
Delete(string) (bool, *dto.ResponseErr)
service likeSvc.Service
validate validator.IDtoValidator
}

func NewHandler(service Service, validate *validator.DtoValidator) *Handler {
func NewHandler(service likeSvc.Service, validate validator.IDtoValidator) *Handler {
return &Handler{service, validate}
}

func (h *Handler) FindByUserId(c *router.FiberCtx) {
func (h *Handler) FindByUserId(c router.IContext) {
id, err := c.Param("id")
if err != nil {
c.JSON(http.StatusBadRequest, dto.ResponseErr{
StatusCode: http.StatusInternalServerError,
Message: constant.InvalidIDMessage,
Data: nil,
})
return
}

response, respErr := h.service.FindByUserId(id)
if respErr != nil {
c.JSON(respErr.StatusCode, respErr)
return
}

c.JSON(http.StatusOK, dto.ResponseSuccess{
StatusCode: http.StatusOK,
Message: likeConst.FindLikeSuccessMessage,
Data: response,
})
return
}

func (h *Handler) Create(c *router.FiberCtx) {
func (h *Handler) Create(c router.IContext) {
request := &dto.CreateLikeRequest{}
err := c.Bind(request)
if err != nil {
c.JSON(http.StatusBadRequest, dto.ResponseErr{
StatusCode: http.StatusBadRequest,
Message: constant.BindingRequestErrorMessage + err.Error(),
Data: nil,
})
return
}

if err := h.validate.Validate(request); err != nil {
var errorMessage []string
for _, reqErr := range err {
errorMessage = append(errorMessage, reqErr.Message)
}
c.JSON(http.StatusBadRequest, dto.ResponseErr{
StatusCode: http.StatusBadRequest,
Message: constant.InvalidRequestBodyMessage + strings.Join(errorMessage, ", "),
Data: nil,
})
return
}

response, respErr := h.service.Create(request)
if respErr != nil {
c.JSON(respErr.StatusCode, respErr)
return
}

c.JSON(http.StatusCreated, dto.ResponseSuccess{
StatusCode: http.StatusCreated,
Message: likeConst.CreateLikeSuccessMessage,
Data: response,
})
return
}

func (h *Handler) Delete(c *router.FiberCtx) {
func (h *Handler) Delete(c router.IContext) {
id, err := c.Param("id")
if err != nil {
c.JSON(http.StatusBadRequest, dto.ResponseErr{
StatusCode: http.StatusBadRequest,
Message: err.Error(),
Data: nil,
})
return
}

res, errRes := h.service.Delete(id)
if errRes != nil {
c.JSON(errRes.StatusCode, errRes)
return
}

c.JSON(http.StatusOK, dto.ResponseSuccess{
StatusCode: http.StatusOK,
Message: likeConst.DelteLikeSuccessMessage,
Data: res,
})
return
}
Loading

0 comments on commit 4d75cf2

Please sign in to comment.