From 8fa42dc2077bc3ad299d07e045a1b9a369b7c333 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:53:03 +0700 Subject: [PATCH 01/34] chore --- src/app/handler/pet/pet.handler_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/handler/pet/pet.handler_test.go b/src/app/handler/pet/pet.handler_test.go index 1039e89..26318e6 100644 --- a/src/app/handler/pet/pet.handler_test.go +++ b/src/app/handler/pet/pet.handler_test.go @@ -16,6 +16,7 @@ import ( errConst "github.com/isd-sgcu/johnjud-gateway/src/app/constant" utils "github.com/isd-sgcu/johnjud-gateway/src/app/utils/pet" + petConst "github.com/isd-sgcu/johnjud-gateway/src/constant/pet" petProto "github.com/isd-sgcu/johnjud-go-proto/johnjud/backend/pet/v1" imgProto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" From 0571338ee27debd14e339ab10dff3ef25dd7d18a Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:03:41 +0700 Subject: [PATCH 02/34] chore --- src/app/constant/error.constant.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/constant/error.constant.go b/src/app/constant/error.constant.go index 6b9a24a..5e378d3 100644 --- a/src/app/constant/error.constant.go +++ b/src/app/constant/error.constant.go @@ -13,3 +13,4 @@ const InvalidArgumentMessage = "Invalid Argument" const PetNotFoundMessage = "Pet not found" const UserNotFoundMessage = "User not found" +const ImageNotFoundMessage = "Image not found" From 65c4ce21186ab5f736299cfd7ce127fd81b1e78c Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:03:45 +0700 Subject: [PATCH 03/34] fix: image dto --- src/app/dto/image.dto.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/dto/image.dto.go b/src/app/dto/image.dto.go index f30947a..154a926 100644 --- a/src/app/dto/image.dto.go +++ b/src/app/dto/image.dto.go @@ -1,7 +1,11 @@ package dto -type ImageDto struct { +type UploadImageRequest struct { Filename string `json:"filename" validate:"required"` Data []byte `json:"data" validate:"required"` PetId string `json:"pet_id" validate:"required"` } + +type DeleteImageResponse struct { + Success bool `json:"success"` +} From 94a7e3bf68debbbaa50dcc53100c98d26a1fb27a Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:03:53 +0700 Subject: [PATCH 04/34] fix: image response dto --- src/app/dto/pet.dto.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/dto/pet.dto.go b/src/app/dto/pet.dto.go index 24c9fd0..29b7367 100644 --- a/src/app/dto/pet.dto.go +++ b/src/app/dto/pet.dto.go @@ -5,8 +5,9 @@ import ( ) type ImageResponse struct { - Id string `json:"id"` - Url string `json:"url"` + Id string `json:"id"` + Url string `json:"url"` + ObjectKey string `json:"object_key"` } type PetResponse struct { From 4b3f1ee69434f10690c5f0161f2e24aacfcc79d7 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:04:31 +0700 Subject: [PATCH 05/34] chore --- src/app/dto/image.dto.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/dto/image.dto.go b/src/app/dto/image.dto.go index 154a926..458e218 100644 --- a/src/app/dto/image.dto.go +++ b/src/app/dto/image.dto.go @@ -1,5 +1,11 @@ package dto +type ImageResponse struct { + Id string `json:"id"` + Url string `json:"url"` + ObjectKey string `json:"object_key"` +} + type UploadImageRequest struct { Filename string `json:"filename" validate:"required"` Data []byte `json:"data" validate:"required"` From 555e4e6185bb97729e01b5ec90ce094002a988bb Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:04:32 +0700 Subject: [PATCH 06/34] chore --- src/app/dto/pet.dto.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/app/dto/pet.dto.go b/src/app/dto/pet.dto.go index 29b7367..39a77ff 100644 --- a/src/app/dto/pet.dto.go +++ b/src/app/dto/pet.dto.go @@ -4,12 +4,6 @@ import ( "github.com/isd-sgcu/johnjud-gateway/src/constant/pet" ) -type ImageResponse struct { - Id string `json:"id"` - Url string `json:"url"` - ObjectKey string `json:"object_key"` -} - type PetResponse struct { Id string `json:"id"` Type string `json:"type"` From e9f88a6fcb0782b510959c6917ed89a7ea5d1fba Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:04:45 +0700 Subject: [PATCH 07/34] feat: image handler --- src/app/handler/image/image.handler.go | 76 +++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/src/app/handler/image/image.handler.go b/src/app/handler/image/image.handler.go index 7e496cb..4e0336a 100644 --- a/src/app/handler/image/image.handler.go +++ b/src/app/handler/image/image.handler.go @@ -1,6 +1,12 @@ package auth import ( + "fmt" + "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" imageSvc "github.com/isd-sgcu/johnjud-gateway/src/pkg/service/image" @@ -8,21 +14,87 @@ import ( type Handler struct { service imageSvc.Service - validate *validator.DtoValidator + validate validator.IDtoValidator } -func NewHandler(service imageSvc.Service, validate *validator.DtoValidator) *Handler { +func NewHandler(service imageSvc.Service, validate validator.IDtoValidator) *Handler { return &Handler{service, validate} } func (h *Handler) FindByPetId(c *router.FiberCtx) { + id, err := c.ID() + if err != nil { + c.JSON(http.StatusBadRequest, dto.ResponseErr{ + StatusCode: http.StatusInternalServerError, + Message: constant.InvalidIDMessage, + Data: nil, + }) + return + } + + response, respErr := h.service.FindByPetId(id) + if respErr != nil { + c.JSON(respErr.StatusCode, respErr) + return + } + c.JSON(http.StatusOK, response) + return } func (h *Handler) Upload(c *router.FiberCtx) { + request := &dto.UploadImageRequest{} + err := c.Bind(request) + fmt.Println("request: ", 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.Upload(request) + if respErr != nil { + c.JSON(respErr.StatusCode, respErr) + return + } + + c.JSON(http.StatusCreated, response) + return } func (h *Handler) Delete(c *router.FiberCtx) { + id, err := c.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, res.Success) + return } From 4cfea264bc547da87e16c8b9f30b5fa6b1ddada8 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:04:48 +0700 Subject: [PATCH 08/34] feat: image service --- src/app/service/image/image.service.go | 122 +++++++++++++++++++++++-- 1 file changed, 116 insertions(+), 6 deletions(-) diff --git a/src/app/service/image/image.service.go b/src/app/service/image/image.service.go index 6ff8668..05c1bc4 100644 --- a/src/app/service/image/image.service.go +++ b/src/app/service/image/image.service.go @@ -1,8 +1,17 @@ package image import ( + "context" + "net/http" + "time" + + "github.com/isd-sgcu/johnjud-gateway/src/app/constant" "github.com/isd-sgcu/johnjud-gateway/src/app/dto" + utils "github.com/isd-sgcu/johnjud-gateway/src/app/utils/image" proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" + "github.com/rs/zerolog/log" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) type Service struct { @@ -15,14 +24,115 @@ func NewService(client proto.ImageServiceClient) *Service { } } -func (s *Service) FindByPetId(string) ([]*proto.Image, *dto.ResponseErr) { - return nil, nil +func (s *Service) FindByPetId(petId string) ([]*dto.ImageResponse, *dto.ResponseErr) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + res, errRes := s.client.FindByPetId(ctx, &proto.FindImageByPetIdRequest{PetId: petId}) + if errRes != nil { + st, _ := status.FromError(errRes) + log.Error(). + Str("service", "image"). + Str("module", "find by pet id"). + Msg(st.Message()) + switch st.Code() { + case codes.NotFound: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusNotFound, + Message: constant.PetNotFoundMessage, + Data: nil, + } + case codes.Unavailable: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusServiceUnavailable, + Message: constant.UnavailableServiceMessage, + Data: nil, + } + default: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusInternalServerError, + Message: constant.InternalErrorMessage, + Data: nil, + } + } + } + return utils.ProtoToDtoList(res.Images), nil } -func (s *Service) Upload(in *dto.ImageDto) (*proto.Image, *dto.ResponseErr) { - return nil, nil +func (s *Service) Upload(in *dto.UploadImageRequest) (*dto.ImageResponse, *dto.ResponseErr) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + request := utils.CreateDtoToProto(in) + res, errRes := s.client.Upload(ctx, request) + if errRes != nil { + st, _ := status.FromError(errRes) + log.Error(). + Err(errRes). + Str("service", "image"). + Str("module", "upload"). + Msg(st.Message()) + switch st.Code() { + case codes.InvalidArgument: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusBadRequest, + Message: constant.InvalidArgumentMessage, + Data: nil, + } + case codes.Unavailable: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusServiceUnavailable, + Message: constant.UnavailableServiceMessage, + Data: nil, + } + default: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusInternalServerError, + Message: constant.InternalErrorMessage, + Data: nil, + } + } + } + return utils.ProtoToDto(res.Image), nil } -func (s *Service) Delete(id string) (bool, *dto.ResponseErr) { - return false, nil +func (s *Service) Delete(id string) (*dto.DeleteImageResponse, *dto.ResponseErr) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + request := &proto.DeleteImageRequest{ + Id: id, + } + + res, errRes := s.client.Delete(ctx, request) + if errRes != nil { + st, _ := status.FromError(errRes) + log.Error(). + Err(errRes). + Str("service", "image"). + Str("module", "delete"). + Msg(st.Message()) + switch st.Code() { + case codes.NotFound: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusNotFound, + Message: constant.ImageNotFoundMessage, + Data: nil, + } + case codes.Unavailable: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusServiceUnavailable, + Message: constant.UnavailableServiceMessage, + Data: nil, + } + default: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusInternalServerError, + Message: constant.InternalErrorMessage, + Data: nil, + } + } + } + return &dto.DeleteImageResponse{ + Success: res.Success, + }, nil } From 7b586b095d9ce65f1d6146da9ae50c1cd4488062 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:04:53 +0700 Subject: [PATCH 09/34] feat: image utils --- src/app/utils/image/image.utils.go | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/app/utils/image/image.utils.go diff --git a/src/app/utils/image/image.utils.go b/src/app/utils/image/image.utils.go new file mode 100644 index 0000000..705c34f --- /dev/null +++ b/src/app/utils/image/image.utils.go @@ -0,0 +1,54 @@ +package image + +import ( + "fmt" + + "github.com/isd-sgcu/johnjud-gateway/src/app/dto" + imageProto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" +) + +func ProtoToDto(in *imageProto.Image) *dto.ImageResponse { + return &dto.ImageResponse{ + Id: in.Id, + Url: in.ImageUrl, + ObjectKey: in.ObjectKey, + } +} + +func ProtoToDtoList(in []*imageProto.Image) []*dto.ImageResponse { + var res []*dto.ImageResponse + for _, i := range in { + res = append(res, &dto.ImageResponse{ + Id: i.Id, + Url: i.ImageUrl, + ObjectKey: i.ObjectKey, + }) + } + return res +} + +func CreateDtoToProto(in *dto.UploadImageRequest) *imageProto.UploadImageRequest { + return &imageProto.UploadImageRequest{ + Filename: in.Filename, + Data: in.Data, + PetId: in.PetId, + } +} + +func MockImageList(n int) [][]*imageProto.Image { + var imagesList [][]*imageProto.Image + for i := 0; i <= n; i++ { + var images []*imageProto.Image + for j := 0; j <= 3; j++ { + images = append(images, &imageProto.Image{ + Id: fmt.Sprintf("%v%v", i, j), + PetId: fmt.Sprintf("%v%v", i, j), + ImageUrl: fmt.Sprintf("%v%v", i, j), + ObjectKey: fmt.Sprintf("%v%v", i, j), + }) + } + imagesList = append(imagesList, images) + } + + return imagesList +} From 652b4629f87d608da1b11c872f0dbb590aba9c32 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:05:01 +0700 Subject: [PATCH 10/34] gen mock --- src/mocks/service/image/image.mock.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/mocks/service/image/image.mock.go b/src/mocks/service/image/image.mock.go index c09925a..d629982 100644 --- a/src/mocks/service/image/image.mock.go +++ b/src/mocks/service/image/image.mock.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: ./src/pkg/service/image/image.service.go +// +// Generated by this command: +// +// mockgen -source ./src/pkg/service/image/image.service.go -destination ./src/mocks/service/image/image.mock.go +// // Package mock_image is a generated GoMock package. package mock_image @@ -7,9 +12,8 @@ package mock_image import ( reflect "reflect" - gomock "github.com/golang/mock/gomock" dto "github.com/isd-sgcu/johnjud-gateway/src/app/dto" - v1 "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" + gomock "github.com/golang/mock/gomock" ) // MockService is a mock of Service interface. @@ -36,46 +40,46 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { } // Delete mocks base method. -func (m *MockService) Delete(arg0 string) (bool, *dto.ResponseErr) { +func (m *MockService) Delete(arg0 string) (*dto.DeleteImageResponse, *dto.ResponseErr) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Delete", arg0) - ret0, _ := ret[0].(bool) + ret0, _ := ret[0].(*dto.DeleteImageResponse) ret1, _ := ret[1].(*dto.ResponseErr) return ret0, ret1 } // Delete indicates an expected call of Delete. -func (mr *MockServiceMockRecorder) Delete(arg0 interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) Delete(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), arg0) } // FindByPetId mocks base method. -func (m *MockService) FindByPetId(arg0 string) ([]*v1.Image, *dto.ResponseErr) { +func (m *MockService) FindByPetId(arg0 string) ([]*dto.ImageResponse, *dto.ResponseErr) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "FindByPetId", arg0) - ret0, _ := ret[0].([]*v1.Image) + ret0, _ := ret[0].([]*dto.ImageResponse) ret1, _ := ret[1].(*dto.ResponseErr) return ret0, ret1 } // FindByPetId indicates an expected call of FindByPetId. -func (mr *MockServiceMockRecorder) FindByPetId(arg0 interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) FindByPetId(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FindByPetId", reflect.TypeOf((*MockService)(nil).FindByPetId), arg0) } // Upload mocks base method. -func (m *MockService) Upload(arg0 *dto.ImageDto) (*v1.Image, *dto.ResponseErr) { +func (m *MockService) Upload(arg0 *dto.UploadImageRequest) (*dto.ImageResponse, *dto.ResponseErr) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Upload", arg0) - ret0, _ := ret[0].(*v1.Image) + ret0, _ := ret[0].(*dto.ImageResponse) ret1, _ := ret[1].(*dto.ResponseErr) return ret0, ret1 } // Upload indicates an expected call of Upload. -func (mr *MockServiceMockRecorder) Upload(arg0 interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) Upload(arg0 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Upload", reflect.TypeOf((*MockService)(nil).Upload), arg0) } From fe8684323cf2058c5f86d3848c4f7fea9b571bc7 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:05:07 +0700 Subject: [PATCH 11/34] fix: image service interface --- src/pkg/service/image/image.service.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pkg/service/image/image.service.go b/src/pkg/service/image/image.service.go index 4b68d29..836ae59 100644 --- a/src/pkg/service/image/image.service.go +++ b/src/pkg/service/image/image.service.go @@ -2,11 +2,10 @@ package image import ( "github.com/isd-sgcu/johnjud-gateway/src/app/dto" - proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" ) type Service interface { - FindByPetId(string) ([]*proto.Image, *dto.ResponseErr) - Upload(*dto.ImageDto) (*proto.Image, *dto.ResponseErr) - Delete(string) (bool, *dto.ResponseErr) + FindByPetId(string) ([]*dto.ImageResponse, *dto.ResponseErr) + Upload(*dto.UploadImageRequest) (*dto.ImageResponse, *dto.ResponseErr) + Delete(string) (*dto.DeleteImageResponse, *dto.ResponseErr) } From 30deead463430440754639b563136f182d815aa1 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:31:57 +0700 Subject: [PATCH 12/34] chore --- src/app/dto/pet.dto.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/app/dto/pet.dto.go b/src/app/dto/pet.dto.go index 39a77ff..ab4304a 100644 --- a/src/app/dto/pet.dto.go +++ b/src/app/dto/pet.dto.go @@ -16,10 +16,10 @@ type PetResponse struct { Habit string `json:"habit"` Caption string `json:"caption"` Status pet.Status `json:"status"` - IsSterile *bool `json:"is_sterile"` - IsVaccinated *bool `json:"is_vaccinated"` - IsVisible *bool `json:"is_visible"` - IsClubPet *bool `json:"is_club_pet"` + IsSterile bool `json:"is_sterile"` + IsVaccinated bool `json:"is_vaccinated"` + IsVisible bool `json:"is_visible"` + IsClubPet bool `json:"is_club_pet"` Origin string `json:"origin"` Address string `json:"address"` Contact string `json:"contact"` @@ -38,10 +38,10 @@ type CreatePetRequest struct { Habit string `json:"habit" validate:"required"` Caption string `json:"caption"` Status pet.Status `json:"status" validate:"required" example:"findhome"` - IsSterile *bool `json:"is_sterile" validate:"required"` - IsVaccinated *bool `json:"is_vaccinated" validate:"required"` - IsVisible *bool `json:"is_visible" validate:"required"` - IsClubPet *bool `json:"is_club_pet" validate:"required"` + IsSterile bool `json:"is_sterile" validate:"required"` + IsVaccinated bool `json:"is_vaccinated" validate:"required"` + IsVisible bool `json:"is_visible" validate:"required"` + IsClubPet bool `json:"is_club_pet" validate:"required"` Origin string `json:"origin" validate:"required"` Address string `json:"address"` Contact string `json:"contact"` @@ -77,10 +77,10 @@ type UpdatePetRequest struct { Habit string `json:"habit"` Caption string `json:"caption"` Status pet.Status `json:"status"` - IsSterile *bool `json:"is_sterile"` - IsVaccinated *bool `json:"is_vaccinated"` - IsVisible *bool `json:"is_visible"` - IsClubPet *bool `json:"is_club_pet"` + IsSterile bool `json:"is_sterile"` + IsVaccinated bool `json:"is_vaccinated"` + IsVisible bool `json:"is_visible"` + IsClubPet bool `json:"is_club_pet"` Origin string `json:"origin"` Address string `json:"address"` Contact string `json:"contact"` From 81078627b5eafb99ac8c1a0babc784c47e4f7136 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:32:04 +0700 Subject: [PATCH 13/34] chore --- src/app/handler/pet/pet.handler_test.go | 8 ++++---- src/app/service/pet/pet.service_test.go | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/app/handler/pet/pet.handler_test.go b/src/app/handler/pet/pet.handler_test.go index 26318e6..87e1e12 100644 --- a/src/app/handler/pet/pet.handler_test.go +++ b/src/app/handler/pet/pet.handler_test.go @@ -94,10 +94,10 @@ func (t *PetHandlerTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: pet.Status(t.Pet.Status), - IsSterile: &t.Pet.IsSterile, - IsVaccinated: &t.Pet.IsVaccinated, - IsVisible: &t.Pet.IsVisible, - IsClubPet: &t.Pet.IsClubPet, + IsSterile: t.Pet.IsSterile, + IsVaccinated: t.Pet.IsVaccinated, + IsVisible: t.Pet.IsVisible, + IsClubPet: t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index a627d53..8048395 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -122,10 +122,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Images: []string{}, Status: pet.Status(t.Pet.Status), - IsSterile: &t.Pet.IsSterile, - IsVaccinated: &t.Pet.IsVaccinated, - IsVisible: &t.Pet.IsVisible, - IsClubPet: &t.Pet.IsClubPet, + IsSterile: t.Pet.IsSterile, + IsVaccinated: t.Pet.IsVaccinated, + IsVisible: t.Pet.IsVisible, + IsClubPet: t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, @@ -144,10 +144,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Images: []string{}, Status: pet.Status(t.Pet.Status), - IsSterile: &t.Pet.IsSterile, - IsVaccinated: &t.Pet.IsVaccinated, - IsVisible: &t.Pet.IsVisible, - IsClubPet: &t.Pet.IsClubPet, + IsSterile: t.Pet.IsSterile, + IsVaccinated: t.Pet.IsVaccinated, + IsVisible: t.Pet.IsVisible, + IsClubPet: t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, From d0af5f2e5deddda9e5a0fe1968531630ddd468a6 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:32:07 +0700 Subject: [PATCH 14/34] chore --- src/app/utils/pet/pet.utils.go | 48 +++++++++------------------------- 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/src/app/utils/pet/pet.utils.go b/src/app/utils/pet/pet.utils.go index 434f820..f47c9a2 100644 --- a/src/app/utils/pet/pet.utils.go +++ b/src/app/utils/pet/pet.utils.go @@ -40,10 +40,10 @@ func ProtoToDto(in *petproto.Pet, images []*imgproto.Image) *dto.PetResponse { Habit: in.Habit, Caption: in.Caption, Status: pet.Status(in.Status), - IsSterile: &in.IsSterile, - IsVaccinated: &in.IsVaccinated, - IsVisible: &in.IsVisible, - IsClubPet: &in.IsClubPet, + IsSterile: in.IsSterile, + IsVaccinated: in.IsVaccinated, + IsVisible: in.IsVisible, + IsClubPet: in.IsClubPet, Origin: in.Origin, Address: in.Address, Contact: in.Contact, @@ -67,10 +67,10 @@ func CreateDtoToProto(in *dto.CreatePetRequest) *petproto.CreatePetRequest { Caption: in.Caption, Images: []*imgproto.Image{}, Status: string(in.Status), - IsSterile: *in.IsSterile, - IsVaccinated: *in.IsVaccinated, - IsVisible: *in.IsVisible, - IsClubPet: *in.IsClubPet, + IsSterile: in.IsSterile, + IsVaccinated: in.IsVaccinated, + IsVisible: in.IsVisible, + IsClubPet: in.IsClubPet, Origin: in.Origin, Address: in.Address, Contact: in.Contact, @@ -101,30 +101,6 @@ func UpdateDtoToProto(id string, in *dto.UpdatePetRequest) *petproto.UpdatePetRe }, } - if in.IsClubPet == nil { - req.Pet.IsClubPet = false - } else { - req.Pet.IsClubPet = *in.IsClubPet - } - - if in.IsSterile == nil { - req.Pet.IsSterile = false - } else { - req.Pet.IsSterile = *in.IsSterile - } - - if in.IsVaccinated == nil { - req.Pet.IsVaccinated = false - } else { - req.Pet.IsVaccinated = *in.IsVaccinated - } - - if in.IsVisible == nil { - req.Pet.IsVisible = false - } else { - req.Pet.IsVisible = *in.IsVisible - } - return req } @@ -143,10 +119,10 @@ func ProtoToDtoList(in []*petproto.Pet, imagesList [][]*imgproto.Image) []*dto.P Habit: p.Habit, Caption: p.Caption, Status: pet.Status(p.Status), - IsSterile: &p.IsSterile, - IsVaccinated: &p.IsVaccinated, - IsVisible: &p.IsVisible, - IsClubPet: &p.IsClubPet, + IsSterile: p.IsSterile, + IsVaccinated: p.IsVaccinated, + IsVisible: p.IsVisible, + IsClubPet: p.IsClubPet, Origin: p.Origin, Address: p.Address, Contact: p.Contact, From fa33d73e97532fb7a671a7b673885b704f591d91 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:57:17 +0700 Subject: [PATCH 15/34] chore --- src/app/dto/pet.dto.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/app/dto/pet.dto.go b/src/app/dto/pet.dto.go index ab4304a..39a77ff 100644 --- a/src/app/dto/pet.dto.go +++ b/src/app/dto/pet.dto.go @@ -16,10 +16,10 @@ type PetResponse struct { Habit string `json:"habit"` Caption string `json:"caption"` Status pet.Status `json:"status"` - IsSterile bool `json:"is_sterile"` - IsVaccinated bool `json:"is_vaccinated"` - IsVisible bool `json:"is_visible"` - IsClubPet bool `json:"is_club_pet"` + IsSterile *bool `json:"is_sterile"` + IsVaccinated *bool `json:"is_vaccinated"` + IsVisible *bool `json:"is_visible"` + IsClubPet *bool `json:"is_club_pet"` Origin string `json:"origin"` Address string `json:"address"` Contact string `json:"contact"` @@ -38,10 +38,10 @@ type CreatePetRequest struct { Habit string `json:"habit" validate:"required"` Caption string `json:"caption"` Status pet.Status `json:"status" validate:"required" example:"findhome"` - IsSterile bool `json:"is_sterile" validate:"required"` - IsVaccinated bool `json:"is_vaccinated" validate:"required"` - IsVisible bool `json:"is_visible" validate:"required"` - IsClubPet bool `json:"is_club_pet" validate:"required"` + IsSterile *bool `json:"is_sterile" validate:"required"` + IsVaccinated *bool `json:"is_vaccinated" validate:"required"` + IsVisible *bool `json:"is_visible" validate:"required"` + IsClubPet *bool `json:"is_club_pet" validate:"required"` Origin string `json:"origin" validate:"required"` Address string `json:"address"` Contact string `json:"contact"` @@ -77,10 +77,10 @@ type UpdatePetRequest struct { Habit string `json:"habit"` Caption string `json:"caption"` Status pet.Status `json:"status"` - IsSterile bool `json:"is_sterile"` - IsVaccinated bool `json:"is_vaccinated"` - IsVisible bool `json:"is_visible"` - IsClubPet bool `json:"is_club_pet"` + IsSterile *bool `json:"is_sterile"` + IsVaccinated *bool `json:"is_vaccinated"` + IsVisible *bool `json:"is_visible"` + IsClubPet *bool `json:"is_club_pet"` Origin string `json:"origin"` Address string `json:"address"` Contact string `json:"contact"` From 68426debdd680a117171e5caff7c6583f650e3fa Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:57:27 +0700 Subject: [PATCH 16/34] chore --- src/app/handler/pet/pet.handler_test.go | 8 ++++---- src/app/service/pet/pet.service_test.go | 16 ++++++++-------- src/app/utils/pet/pet.utils.go | 24 ++++++++++++------------ 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/app/handler/pet/pet.handler_test.go b/src/app/handler/pet/pet.handler_test.go index 87e1e12..26318e6 100644 --- a/src/app/handler/pet/pet.handler_test.go +++ b/src/app/handler/pet/pet.handler_test.go @@ -94,10 +94,10 @@ func (t *PetHandlerTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: pet.Status(t.Pet.Status), - IsSterile: t.Pet.IsSterile, - IsVaccinated: t.Pet.IsVaccinated, - IsVisible: t.Pet.IsVisible, - IsClubPet: t.Pet.IsClubPet, + IsSterile: &t.Pet.IsSterile, + IsVaccinated: &t.Pet.IsVaccinated, + IsVisible: &t.Pet.IsVisible, + IsClubPet: &t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index 8048395..a627d53 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -122,10 +122,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Images: []string{}, Status: pet.Status(t.Pet.Status), - IsSterile: t.Pet.IsSterile, - IsVaccinated: t.Pet.IsVaccinated, - IsVisible: t.Pet.IsVisible, - IsClubPet: t.Pet.IsClubPet, + IsSterile: &t.Pet.IsSterile, + IsVaccinated: &t.Pet.IsVaccinated, + IsVisible: &t.Pet.IsVisible, + IsClubPet: &t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, @@ -144,10 +144,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Images: []string{}, Status: pet.Status(t.Pet.Status), - IsSterile: t.Pet.IsSterile, - IsVaccinated: t.Pet.IsVaccinated, - IsVisible: t.Pet.IsVisible, - IsClubPet: t.Pet.IsClubPet, + IsSterile: &t.Pet.IsSterile, + IsVaccinated: &t.Pet.IsVaccinated, + IsVisible: &t.Pet.IsVisible, + IsClubPet: &t.Pet.IsClubPet, Origin: t.Pet.Origin, Address: t.Pet.Address, Contact: t.Pet.Contact, diff --git a/src/app/utils/pet/pet.utils.go b/src/app/utils/pet/pet.utils.go index f47c9a2..56829bc 100644 --- a/src/app/utils/pet/pet.utils.go +++ b/src/app/utils/pet/pet.utils.go @@ -40,10 +40,10 @@ func ProtoToDto(in *petproto.Pet, images []*imgproto.Image) *dto.PetResponse { Habit: in.Habit, Caption: in.Caption, Status: pet.Status(in.Status), - IsSterile: in.IsSterile, - IsVaccinated: in.IsVaccinated, - IsVisible: in.IsVisible, - IsClubPet: in.IsClubPet, + IsSterile: &in.IsSterile, + IsVaccinated: &in.IsVaccinated, + IsVisible: &in.IsVisible, + IsClubPet: &in.IsClubPet, Origin: in.Origin, Address: in.Address, Contact: in.Contact, @@ -67,10 +67,10 @@ func CreateDtoToProto(in *dto.CreatePetRequest) *petproto.CreatePetRequest { Caption: in.Caption, Images: []*imgproto.Image{}, Status: string(in.Status), - IsSterile: in.IsSterile, - IsVaccinated: in.IsVaccinated, - IsVisible: in.IsVisible, - IsClubPet: in.IsClubPet, + IsSterile: *in.IsSterile, + IsVaccinated: *in.IsVaccinated, + IsVisible: *in.IsVisible, + IsClubPet: *in.IsClubPet, Origin: in.Origin, Address: in.Address, Contact: in.Contact, @@ -119,10 +119,10 @@ func ProtoToDtoList(in []*petproto.Pet, imagesList [][]*imgproto.Image) []*dto.P Habit: p.Habit, Caption: p.Caption, Status: pet.Status(p.Status), - IsSterile: p.IsSterile, - IsVaccinated: p.IsVaccinated, - IsVisible: p.IsVisible, - IsClubPet: p.IsClubPet, + IsSterile: &p.IsSterile, + IsVaccinated: &p.IsVaccinated, + IsVisible: &p.IsVisible, + IsClubPet: &p.IsClubPet, Origin: p.Origin, Address: p.Address, Contact: p.Contact, From 5ac8f92640f444b680a6b271715971cf5f339b9b Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:04:55 +0700 Subject: [PATCH 17/34] chore --- src/app/handler/image/image.handler.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/app/handler/image/image.handler.go b/src/app/handler/image/image.handler.go index 4e0336a..c42e700 100644 --- a/src/app/handler/image/image.handler.go +++ b/src/app/handler/image/image.handler.go @@ -1,7 +1,6 @@ -package auth +package image import ( - "fmt" "net/http" "strings" @@ -45,7 +44,6 @@ func (h *Handler) FindByPetId(c *router.FiberCtx) { func (h *Handler) Upload(c *router.FiberCtx) { request := &dto.UploadImageRequest{} err := c.Bind(request) - fmt.Println("request: ", request) if err != nil { c.JSON(http.StatusBadRequest, dto.ResponseErr{ StatusCode: http.StatusBadRequest, From d969b96263ca8a5b35b6511c88c9196f05b72983 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:05:01 +0700 Subject: [PATCH 18/34] feat: get image path --- src/app/router/image.router.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/router/image.router.go b/src/app/router/image.router.go index e696190..bebbc0c 100644 --- a/src/app/router/image.router.go +++ b/src/app/router/image.router.go @@ -15,3 +15,10 @@ func (r *FiberRouter) DeleteImage(path string, h func(ctx *FiberCtx)) { return nil }) } + +func (r *FiberRouter) GetImage(path string, h func(ctx *FiberCtx)) { + r.image.Delete(path, func(c *fiber.Ctx) error { + h(NewFiberCtx(c)) + return nil + }) +} From 865c66cd9a9f4ba58e6a48750a42bbf99271f6f9 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:05:07 +0700 Subject: [PATCH 19/34] chore --- src/app/router/router.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/router/router.go b/src/app/router/router.go index 2a2bb91..0f55c33 100644 --- a/src/app/router/router.go +++ b/src/app/router/router.go @@ -51,7 +51,7 @@ func NewFiberRouter(authGuard IGuard, conf config.App) *FiberRouter { user := GroupWithAuthMiddleware(r, "/user", authGuard.Use) pet := GroupWithAuthMiddleware(r, "/pets", authGuard.Use) - image := GroupWithAuthMiddleware(r, "/image", authGuard.Use) + image := GroupWithAuthMiddleware(r, "/images", authGuard.Use) like := GroupWithAuthMiddleware(r, "/likes", authGuard.Use) return &FiberRouter{r, auth, user, pet, image, like} From a2d2a7a6d79444f54086aab47ea884332a32d3a3 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:05:22 +0700 Subject: [PATCH 20/34] feat: image handler --- src/main.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main.go b/src/main.go index f180270..74a5765 100644 --- a/src/main.go +++ b/src/main.go @@ -12,6 +12,7 @@ import ( authHdr "github.com/isd-sgcu/johnjud-gateway/src/app/handler/auth" healthcheck "github.com/isd-sgcu/johnjud-gateway/src/app/handler/healthcheck" + imageHdr "github.com/isd-sgcu/johnjud-gateway/src/app/handler/image" likeHdr "github.com/isd-sgcu/johnjud-gateway/src/app/handler/like" petHdr "github.com/isd-sgcu/johnjud-gateway/src/app/handler/pet" userHdr "github.com/isd-sgcu/johnjud-gateway/src/app/handler/user" @@ -107,6 +108,7 @@ func main() { imageClient := imageProto.NewImageServiceClient(fileConn) imageService := imageSvc.NewService(imageClient) + imageHandler := imageHdr.NewHandler(imageService, v) petClient := petProto.NewPetServiceClient(backendConn) petService := petSvc.NewService(petClient) @@ -142,6 +144,10 @@ func main() { r.PostLike("", likeHandler.Create) r.DeleteLike("/:id", likeHandler.Delete) + r.GetImage("/", imageHandler.FindByPetId) + r.PostImage("/", imageHandler.Upload) + r.DeleteImage("/:id", imageHandler.Delete) + v1 := router.NewAPIv1(r, conf.App) go func() { From 30d9e2864944c89681c3c3684cfb2bdf205a7c9d Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:08:29 +0700 Subject: [PATCH 21/34] chore --- src/app/service/image/image.service.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/service/image/image.service.go b/src/app/service/image/image.service.go index 05c1bc4..331bda6 100644 --- a/src/app/service/image/image.service.go +++ b/src/app/service/image/image.service.go @@ -99,6 +99,7 @@ func (s *Service) Upload(in *dto.UploadImageRequest) (*dto.ImageResponse, *dto.R func (s *Service) Delete(id string) (*dto.DeleteImageResponse, *dto.ResponseErr) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() + request := &proto.DeleteImageRequest{ Id: id, } From 54568df7ec94187870d1df994f3417a1ed492269 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:47:45 +0700 Subject: [PATCH 22/34] feat: dto --- src/app/dto/image.dto.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/app/dto/image.dto.go b/src/app/dto/image.dto.go index 458e218..a04a4fb 100644 --- a/src/app/dto/image.dto.go +++ b/src/app/dto/image.dto.go @@ -15,3 +15,12 @@ type UploadImageRequest struct { type DeleteImageResponse struct { Success bool `json:"success"` } + +type AssignPetRequest struct { + Ids []string `json:"ids"` + PetId string `json:"pet_id"` +} + +type AssignPetResponse struct { + Success bool `json:"success"` +} From 22344f0655c7c4c35f36639f65798b7392921fed Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:47:53 +0700 Subject: [PATCH 23/34] feat: assign pet handler --- src/app/handler/image/image.handler.go | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/app/handler/image/image.handler.go b/src/app/handler/image/image.handler.go index c42e700..ea3b11b 100644 --- a/src/app/handler/image/image.handler.go +++ b/src/app/handler/image/image.handler.go @@ -96,3 +96,38 @@ func (h *Handler) Delete(c *router.FiberCtx) { c.JSON(http.StatusOK, res.Success) return } + +func (h *Handler) AssignPet(c *router.FiberCtx) { + request := &dto.AssignPetRequest{} + 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.AssignPet(request) + if respErr != nil { + c.JSON(respErr.StatusCode, respErr) + return + } + + c.JSON(http.StatusCreated, response) + return +} From d290e891a547adfe95ca67586044987c5965c59c Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:47:58 +0700 Subject: [PATCH 24/34] feat: assign pet service --- src/app/service/image/image.service.go | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/app/service/image/image.service.go b/src/app/service/image/image.service.go index 331bda6..a46b992 100644 --- a/src/app/service/image/image.service.go +++ b/src/app/service/image/image.service.go @@ -137,3 +137,46 @@ func (s *Service) Delete(id string) (*dto.DeleteImageResponse, *dto.ResponseErr) Success: res.Success, }, nil } + +func (s *Service) AssignPet(in *dto.AssignPetRequest) (*dto.AssignPetResponse, *dto.ResponseErr) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + request := &proto.AssignPetRequest{ + Ids: in.Ids, + PetId: in.PetId, + } + + res, errRes := s.client.AssignPet(ctx, request) + if errRes != nil { + st, _ := status.FromError(errRes) + log.Error(). + Err(errRes). + Str("service", "image"). + Str("module", "assign pet"). + Msg(st.Message()) + switch st.Code() { + case codes.NotFound: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusNotFound, + Message: constant.PetNotFoundMessage, + Data: nil, + } + case codes.Unavailable: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusServiceUnavailable, + Message: constant.UnavailableServiceMessage, + Data: nil, + } + default: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusInternalServerError, + Message: constant.InternalErrorMessage, + Data: nil, + } + } + } + return &dto.AssignPetResponse{ + Success: res.Success, + }, nil +} From 896e248b5fd19f9aee56e79661cafb95dd2c50eb Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:48:27 +0700 Subject: [PATCH 25/34] feat: admin path --- src/constant/auth/auth.constant.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/constant/auth/auth.constant.go b/src/constant/auth/auth.constant.go index e25d157..a10e52d 100644 --- a/src/constant/auth/auth.constant.go +++ b/src/constant/auth/auth.constant.go @@ -16,6 +16,10 @@ var AdminPath = map[string]struct{}{ "PUT /pets/:id/visible": {}, "DELETE /pets/:id": {}, //need to add image upload, delete, assignpet + "POST /images/assign/:pet_id": {}, + "DELETE /images/:id": {}, + "POST /images/": {}, + "GET /images/:id": {}, } var VersionList = map[string]struct{}{ From 60d433c8bdfac2081214cc9889247a1cc8fb37eb Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:48:36 +0700 Subject: [PATCH 26/34] mock gen --- src/mocks/service/image/image.mock.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mocks/service/image/image.mock.go b/src/mocks/service/image/image.mock.go index d629982..6e7fb6b 100644 --- a/src/mocks/service/image/image.mock.go +++ b/src/mocks/service/image/image.mock.go @@ -39,6 +39,21 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { return m.recorder } +// AssignPet mocks base method. +func (m *MockService) AssignPet(arg0 *dto.AssignPetRequest) (*dto.AssignPetResponse, *dto.ResponseErr) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AssignPet", arg0) + ret0, _ := ret[0].(*dto.AssignPetResponse) + ret1, _ := ret[1].(*dto.ResponseErr) + return ret0, ret1 +} + +// AssignPet indicates an expected call of AssignPet. +func (mr *MockServiceMockRecorder) AssignPet(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AssignPet", reflect.TypeOf((*MockService)(nil).AssignPet), arg0) +} + // Delete mocks base method. func (m *MockService) Delete(arg0 string) (*dto.DeleteImageResponse, *dto.ResponseErr) { m.ctrl.T.Helper() From a49b478fb6e9a07f60142baa126248041bc76c23 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Wed, 10 Jan 2024 23:48:44 +0700 Subject: [PATCH 27/34] feat: image service interface --- src/pkg/service/image/image.service.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pkg/service/image/image.service.go b/src/pkg/service/image/image.service.go index 836ae59..e7ff7a1 100644 --- a/src/pkg/service/image/image.service.go +++ b/src/pkg/service/image/image.service.go @@ -8,4 +8,5 @@ type Service interface { FindByPetId(string) ([]*dto.ImageResponse, *dto.ResponseErr) Upload(*dto.UploadImageRequest) (*dto.ImageResponse, *dto.ResponseErr) Delete(string) (*dto.DeleteImageResponse, *dto.ResponseErr) + AssignPet(*dto.AssignPetRequest) (*dto.AssignPetResponse, *dto.ResponseErr) } From 31ccce79a5f520676741fc3e726eb73c0776e9c0 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:58:48 +0700 Subject: [PATCH 28/34] chore --- src/app/handler/image/image.handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/handler/image/image.handler.go b/src/app/handler/image/image.handler.go index ea3b11b..143fc9e 100644 --- a/src/app/handler/image/image.handler.go +++ b/src/app/handler/image/image.handler.go @@ -128,6 +128,6 @@ func (h *Handler) AssignPet(c *router.FiberCtx) { return } - c.JSON(http.StatusCreated, response) + c.JSON(http.StatusOK, response) return } From d7505da383e875bd8068569013ee0bcfbba08297 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:59:03 +0700 Subject: [PATCH 29/34] feat: assign pet --- src/app/router/image.router.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/router/image.router.go b/src/app/router/image.router.go index bebbc0c..d348d21 100644 --- a/src/app/router/image.router.go +++ b/src/app/router/image.router.go @@ -22,3 +22,10 @@ func (r *FiberRouter) GetImage(path string, h func(ctx *FiberCtx)) { return nil }) } + +func (r *FiberRouter) AssignPet(path string, h func(ctx *FiberCtx)) { + r.image.Post(path, func(c *fiber.Ctx) error { + h(NewFiberCtx(c)) + return nil + }) +} From 5b5d0c22da8349752f324fcb2e2f72f40a65a2a0 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:59:18 +0700 Subject: [PATCH 30/34] fix: invalidArgument error --- src/app/service/image/image.service.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/service/image/image.service.go b/src/app/service/image/image.service.go index a46b992..ec00042 100644 --- a/src/app/service/image/image.service.go +++ b/src/app/service/image/image.service.go @@ -156,6 +156,12 @@ func (s *Service) AssignPet(in *dto.AssignPetRequest) (*dto.AssignPetResponse, * Str("module", "assign pet"). Msg(st.Message()) switch st.Code() { + case codes.InvalidArgument: + return nil, &dto.ResponseErr{ + StatusCode: http.StatusBadRequest, + Message: constant.InvalidArgumentMessage, + Data: nil, + } case codes.NotFound: return nil, &dto.ResponseErr{ StatusCode: http.StatusNotFound, From d58594df2ff6e22170201628a632e2226264b222 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:00:03 +0700 Subject: [PATCH 31/34] feat: assign pet path I think no need to use `/assign/:pet_id` because they're already in body request --- src/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.go b/src/main.go index 74a5765..34b2719 100644 --- a/src/main.go +++ b/src/main.go @@ -147,6 +147,7 @@ func main() { r.GetImage("/", imageHandler.FindByPetId) r.PostImage("/", imageHandler.Upload) r.DeleteImage("/:id", imageHandler.Delete) + r.AssignPet("/assign", imageHandler.AssignPet) v1 := router.NewAPIv1(r, conf.App) From e6cc73e5033619de495bd3f8fcd7923f75872c13 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:00:12 +0700 Subject: [PATCH 32/34] chore --- src/constant/auth/auth.constant.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/constant/auth/auth.constant.go b/src/constant/auth/auth.constant.go index a10e52d..281fc8c 100644 --- a/src/constant/auth/auth.constant.go +++ b/src/constant/auth/auth.constant.go @@ -10,12 +10,11 @@ var ExcludePath = map[string]struct{}{ } var AdminPath = map[string]struct{}{ - "DELETE /user/:id": {}, - "POST /pets": {}, - "PUT /pets/:id": {}, - "PUT /pets/:id/visible": {}, - "DELETE /pets/:id": {}, - //need to add image upload, delete, assignpet + "DELETE /user/:id": {}, + "POST /pets": {}, + "PUT /pets/:id": {}, + "PUT /pets/:id/visible": {}, + "DELETE /pets/:id": {}, "POST /images/assign/:pet_id": {}, "DELETE /images/:id": {}, "POST /images/": {}, From 2644a3c20157ede5fb29c73b448f103596c7d463 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 10:01:50 +0700 Subject: [PATCH 33/34] chore --- src/main.go | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.go b/src/main.go index 34b2719..63ff2da 100644 --- a/src/main.go +++ b/src/main.go @@ -144,7 +144,6 @@ func main() { r.PostLike("", likeHandler.Create) r.DeleteLike("/:id", likeHandler.Delete) - r.GetImage("/", imageHandler.FindByPetId) r.PostImage("/", imageHandler.Upload) r.DeleteImage("/:id", imageHandler.Delete) r.AssignPet("/assign", imageHandler.AssignPet) From ade717fae72a71d880d5d5e15c9ba0c6966cd363 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:00:35 +0700 Subject: [PATCH 34/34] chore --- src/app/dto/image.dto.go | 4 ++-- src/app/router/image.router.go | 7 ------- src/main.go | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/app/dto/image.dto.go b/src/app/dto/image.dto.go index a04a4fb..98414f1 100644 --- a/src/app/dto/image.dto.go +++ b/src/app/dto/image.dto.go @@ -17,8 +17,8 @@ type DeleteImageResponse struct { } type AssignPetRequest struct { - Ids []string `json:"ids"` - PetId string `json:"pet_id"` + Ids []string `json:"ids" validate:"required"` + PetId string `json:"pet_id" validate:"required"` } type AssignPetResponse struct { diff --git a/src/app/router/image.router.go b/src/app/router/image.router.go index d348d21..bebbc0c 100644 --- a/src/app/router/image.router.go +++ b/src/app/router/image.router.go @@ -22,10 +22,3 @@ func (r *FiberRouter) GetImage(path string, h func(ctx *FiberCtx)) { return nil }) } - -func (r *FiberRouter) AssignPet(path string, h func(ctx *FiberCtx)) { - r.image.Post(path, func(c *fiber.Ctx) error { - h(NewFiberCtx(c)) - return nil - }) -} diff --git a/src/main.go b/src/main.go index 63ff2da..8e785da 100644 --- a/src/main.go +++ b/src/main.go @@ -146,7 +146,7 @@ func main() { r.PostImage("/", imageHandler.Upload) r.DeleteImage("/:id", imageHandler.Delete) - r.AssignPet("/assign", imageHandler.AssignPet) + r.PostImage("/assign", imageHandler.AssignPet) v1 := router.NewAPIv1(r, conf.App)