From bda42e80521815f247931503ac1689e303cdbe7c Mon Sep 17 00:00:00 2001 From: Sunioatm <104454675+Sunioatm@users.noreply.github.com> Date: Tue, 26 Dec 2023 00:37:13 +0700 Subject: [PATCH 1/4] feat : adopt pet and adoptby field --- go.mod | 14 ++------------ go.sum | 8 ++++---- src/app/model/pet/pet.model.go | 1 + src/app/service/pet/pet.service.go | 21 +++++++++++++++++++++ 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 4afd1ea..ade5ec4 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ toolchain go1.21.5 require ( github.com/bxcodec/faker/v3 v3.8.1 github.com/google/uuid v1.5.0 - github.com/isd-sgcu/johnjud-go-proto v0.0.8 + github.com/isd-sgcu/johnjud-go-proto v0.0.9 github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.31.0 github.com/spf13/viper v1.18.2 @@ -26,43 +26,33 @@ require ( github.com/stretchr/objx v0.5.0 // indirect golang.org/x/net v0.19.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/protobuf v1.32.0 // indirect ) require ( github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/isd-sgcu/johnjud-go-proto v0.0.8 github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jackc/pgx/v5 v5.4.3 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.4 - github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.16.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/net v0.19.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect - google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 9366728..fc7670b 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,8 @@ github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/isd-sgcu/johnjud-go-proto v0.0.8 h1:nIQBZgK2OFVrLjVtpeDgwows8poA7LhsIVE4hlbBC1o= -github.com/isd-sgcu/johnjud-go-proto v0.0.8/go.mod h1:HP0w9gC30b5WNnqeFBM9JJZud+pvyikz0+pGFSI/Wjw= +github.com/isd-sgcu/johnjud-go-proto v0.0.9 h1:cFfZ2JSpW0jg94Iv5zHQJGnoekj0eCQe42SJaTpnp3c= +github.com/isd-sgcu/johnjud-go-proto v0.0.9/go.mod h1:1OK6aiCgtXQiLhxp0r6iLEejYIRpckWQZDrCZ9Trbo4= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= @@ -107,8 +107,8 @@ google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/src/app/model/pet/pet.model.go b/src/app/model/pet/pet.model.go index d6b916a..3c88a37 100644 --- a/src/app/model/pet/pet.model.go +++ b/src/app/model/pet/pet.model.go @@ -22,4 +22,5 @@ type Pet struct { Background string `json:"background" gorm:"tinytext"` Address string `json:"address" gorm:"tinytext"` Contact string `json:"contact" gorm:"tinytext"` + AdoptBy string `json:"adopt_by" gorm:"tinytext"` } diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index 310f6f9..8936fa4 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -128,6 +128,25 @@ func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *p return &proto.CreatePetResponse{Pet: RawToDto(raw, imgUrls)}, nil } +func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res *proto.AdoptPetResponse, err error) { + dtoPet, err := s.FindOne(context.Background(), &proto.FindOnePetRequest{Id: req.PetId}) + if err != nil { + return nil, status.Error(codes.NotFound, "pet not found") + } + pet, err := DtoToRaw(dtoPet.Pet) + if err != nil { + return nil, status.Error(codes.Internal, "error converting dto to raw") + } + pet.AdoptBy = req.UserId + + err = s.repository.Update(req.PetId, pet) + if err != nil { + return nil, status.Error(codes.NotFound, "pet not found") + } + + return &proto.AdoptPetResponse{Success: true}, nil +} + func RawToDtoList(in *[]*pet.Pet) []*proto.Pet { var result []*proto.Pet for _, e := range *in { @@ -155,6 +174,7 @@ func RawToDto(in *pet.Pet, imgUrl []string) *proto.Pet { Background: in.Background, Address: in.Address, Contact: in.Contact, + AdoptBy: in.AdoptBy, } } @@ -206,6 +226,7 @@ func DtoToRaw(in *proto.Pet) (res *pet.Pet, err error) { Background: in.Background, Address: in.Address, Contact: in.Contact, + AdoptBy: in.AdoptBy, }, nil } From 8ea07a0d70018bbb959a448f8d2dd27fcf4c88ed Mon Sep 17 00:00:00 2001 From: Sunioatm <104454675+Sunioatm@users.noreply.github.com> Date: Wed, 27 Dec 2023 01:35:24 +0700 Subject: [PATCH 2/4] test : add adopt pet test - make test func - add ChangeAdoptBy and AdoptByReq - add AdoptBy feild in SetupTest --- src/app/service/pet/pet.service_test.go | 91 +++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index 4235945..f7c678f 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -38,6 +38,8 @@ type PetServiceTest struct { ChangeViewPetReqMock *proto.ChangeViewPetRequest Images []*img_proto.Image ImageUrls []string + ChangeAdoptBy *pet.Pet + AdoptByReq *proto.AdoptPetRequest } func TestPetService(t *testing.T) { @@ -67,6 +69,7 @@ func (t *PetServiceTest) SetupTest() { Background: faker.Paragraph(), Address: faker.Paragraph(), Contact: faker.Paragraph(), + AdoptBy: "", } t.Images = []*img_proto.Image{ @@ -105,6 +108,7 @@ func (t *PetServiceTest) SetupTest() { Address: t.Pet.Address, Contact: t.Pet.Contact, ImageUrls: t.ImageUrls, + AdoptBy: t.Pet.AdoptBy, } t.UpdatePet = &pet.Pet{ @@ -129,6 +133,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, } t.ChangeViewPet = &pet.Pet{ @@ -153,6 +158,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, } t.CreatePetReqMock = &proto.CreatePetRequest{ @@ -173,6 +179,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, }, } @@ -195,6 +202,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, }, } @@ -202,6 +210,36 @@ func (t *PetServiceTest) SetupTest() { Id: t.Pet.ID.String(), Visible: false, } + + t.ChangeAdoptBy = &pet.Pet{ + Base: model.Base{ + ID: t.Pet.Base.ID, + CreatedAt: t.Pet.Base.CreatedAt, + UpdatedAt: t.Pet.Base.UpdatedAt, + DeletedAt: t.Pet.Base.DeletedAt, + }, + Type: t.Pet.Type, + Species: t.Pet.Species, + Name: t.Pet.Name, + Birthdate: t.Pet.Birthdate, + Gender: t.Pet.Gender, + Habit: t.Pet.Habit, + Caption: t.Pet.Caption, + Status: t.Pet.Status, + IsSterile: t.Pet.IsSterile, + IsVaccinated: t.Pet.IsVaccinated, + IsVisible: t.Pet.IsVisible, + IsClubPet: t.Pet.IsClubPet, + Background: t.Pet.Background, + Address: t.Pet.Address, + Contact: t.Pet.Contact, + AdoptBy: faker.UUIDDigit(), + } + + t.AdoptByReq = &proto.AdoptPetRequest{ + PetId: t.ChangeAdoptBy.ID.String(), + UserId: t.ChangeAdoptBy.AdoptBy, + } } func (t *PetServiceTest) TestDeleteSuccess() { want := &proto.DeletePetResponse{Success: true} @@ -361,6 +399,7 @@ func (t *PetServiceTest) TestCreateSuccess() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, } repo.On("Create", in).Return(t.Pet, nil) @@ -393,6 +432,7 @@ func (t *PetServiceTest) TestCreateInternalErr() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, + AdoptBy: t.Pet.AdoptBy, } repo.On("Create", in).Return(nil, errors.New("something wrong")) @@ -470,3 +510,54 @@ func (t *PetServiceTest) TestChangeViewNotFound() { assert.Nil(t.T(), actual) assert.Equal(t.T(), codes.NotFound, st.Code()) } + +func (t *PetServiceTest) TestAdoptBySuccess() { + want := &proto.AdoptPetResponse{Success: true} + repo := &mock.RepositoryMock{} + + repo.On("FindOne", t.AdoptByReq.PetId, &pet.Pet{}).Return(t.Pet, nil) + repo.On("Update", t.AdoptByReq.PetId, t.ChangeAdoptBy).Return(t.ChangeAdoptBy, nil) + + imgSrv := new(img_mock.ServiceMock) + srv := NewService(repo, imgSrv) + + actual, err := srv.AdoptPet(context.Background(), t.AdoptByReq) + + assert.Nil(t.T(), err) + assert.Equal(t.T(), want, actual) +} + +func (t *PetServiceTest) TestAdoptByPetNotFound() { + wantError := status.Error(codes.NotFound, "pet not found") + repo := &mock.RepositoryMock{} + + repo.On("FindOne", t.AdoptByReq.PetId, &pet.Pet{}).Return(nil, wantError) + + imgSrv := new(img_mock.ServiceMock) + srv := NewService(repo, imgSrv) + + actual, err := srv.AdoptPet(context.Background(), t.AdoptByReq) + + assert.NotNil(t.T(), err) + assert.Equal(t.T(), wantError, err) + assert.Nil(t.T(), actual) + + repo.AssertNotCalled(t.T(), "Update", t.AdoptByReq.PetId, t.ChangeAdoptBy) +} + +func (t *PetServiceTest) TestAdoptByUpdateError() { + wantError := status.Error(codes.NotFound, "pet not found") + repo := &mock.RepositoryMock{} + + repo.On("FindOne", t.AdoptByReq.PetId, &pet.Pet{}).Return(t.Pet, nil) + repo.On("Update", t.AdoptByReq.PetId, t.ChangeAdoptBy).Return(nil, errors.New("update error")) + + imgSrv := new(img_mock.ServiceMock) + srv := NewService(repo, imgSrv) + + actual, err := srv.AdoptPet(context.Background(), t.AdoptByReq) + + assert.NotNil(t.T(), err) + assert.Equal(t.T(), wantError, err) + assert.Nil(t.T(), actual) +} From 282ce441815dcba723b14c53e597ad711924332c Mon Sep 17 00:00:00 2001 From: Sunioatm <104454675+Sunioatm@users.noreply.github.com> Date: Wed, 27 Dec 2023 02:52:48 +0700 Subject: [PATCH 3/4] fix: remove AdoptBy field remove AdoptBy field that not relevant --- src/app/service/pet/pet.service_test.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index f7c678f..f55abd8 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -108,7 +108,6 @@ func (t *PetServiceTest) SetupTest() { Address: t.Pet.Address, Contact: t.Pet.Contact, ImageUrls: t.ImageUrls, - AdoptBy: t.Pet.AdoptBy, } t.UpdatePet = &pet.Pet{ @@ -133,7 +132,6 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, } t.ChangeViewPet = &pet.Pet{ @@ -158,7 +156,6 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, } t.CreatePetReqMock = &proto.CreatePetRequest{ @@ -179,7 +176,6 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, }, } @@ -202,7 +198,6 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, }, } @@ -399,7 +394,6 @@ func (t *PetServiceTest) TestCreateSuccess() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, } repo.On("Create", in).Return(t.Pet, nil) @@ -432,7 +426,6 @@ func (t *PetServiceTest) TestCreateInternalErr() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - AdoptBy: t.Pet.AdoptBy, } repo.On("Create", in).Return(nil, errors.New("something wrong")) From b695aa94c43fd8b691b02f12485c781e7e86b13f Mon Sep 17 00:00:00 2001 From: Sunioatm <104454675+Sunioatm@users.noreply.github.com> Date: Mon, 1 Jan 2024 13:01:42 +0700 Subject: [PATCH 4/4] feat: add adopt by add adopt by fix adopt by test --- go.sum | 2 -- src/app/service/pet/pet.service.go | 19 ------------------- src/app/service/pet/pet.service_test.go | 8 ++++++-- 3 files changed, 6 insertions(+), 23 deletions(-) diff --git a/go.sum b/go.sum index 3b4b7f5..fc7670b 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,6 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/isd-sgcu/johnjud-go-proto v0.0.9 h1:cFfZ2JSpW0jg94Iv5zHQJGnoekj0eCQe42SJaTpnp3c= github.com/isd-sgcu/johnjud-go-proto v0.0.9/go.mod h1:1OK6aiCgtXQiLhxp0r6iLEejYIRpckWQZDrCZ9Trbo4= -github.com/isd-sgcu/johnjud-go-proto v0.0.9 h1:cFfZ2JSpW0jg94Iv5zHQJGnoekj0eCQe42SJaTpnp3c= -github.com/isd-sgcu/johnjud-go-proto v0.0.9/go.mod h1:1OK6aiCgtXQiLhxp0r6iLEejYIRpckWQZDrCZ9Trbo4= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index 8f1fc77..552f81b 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -171,25 +171,6 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res return &proto.AdoptPetResponse{Success: true}, nil } -func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res *proto.AdoptPetResponse, err error) { - dtoPet, err := s.FindOne(context.Background(), &proto.FindOnePetRequest{Id: req.PetId}) - if err != nil { - return nil, status.Error(codes.NotFound, "pet not found") - } - pet, err := DtoToRaw(dtoPet.Pet) - if err != nil { - return nil, status.Error(codes.Internal, "error converting dto to raw") - } - pet.AdoptBy = req.UserId - - err = s.repository.Update(req.PetId, pet) - if err != nil { - return nil, status.Error(codes.NotFound, "pet not found") - } - - return &proto.AdoptPetResponse{Success: true}, nil -} - func RawToDtoList(in *[]*pet.Pet, imageUrls [][]string) ([]*proto.Pet, error) { var result []*proto.Pet if len(*in) != len(imageUrls) { diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index b499185..04d36b9 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -38,10 +38,10 @@ type PetServiceTest struct { ChangeViewPetReqMock *proto.ChangeViewPetRequest Images []*img_proto.Image ImageUrls []string - ChangeAdoptBy *pet.Pet - AdoptByReq *proto.AdoptPetRequest ImagesList [][]*img_proto.Image ImageUrlsList [][]string + ChangeAdoptBy *pet.Pet + AdoptByReq *proto.AdoptPetRequest } func TestPetService(t *testing.T) { @@ -562,6 +562,8 @@ func (t *PetServiceTest) TestAdoptBySuccess() { repo.On("Update", t.AdoptByReq.PetId, t.ChangeAdoptBy).Return(t.ChangeAdoptBy, nil) imgSrv := new(img_mock.ServiceMock) + imgSrv.On("FindByPetId", t.Pet.ID.String()).Return(t.Images, nil) + srv := NewService(repo, imgSrv) actual, err := srv.AdoptPet(context.Background(), t.AdoptByReq) @@ -596,6 +598,8 @@ func (t *PetServiceTest) TestAdoptByUpdateError() { repo.On("Update", t.AdoptByReq.PetId, t.ChangeAdoptBy).Return(nil, errors.New("update error")) imgSrv := new(img_mock.ServiceMock) + imgSrv.On("FindByPetId", t.Pet.ID.String()).Return(nil, errors.New("pet not found")) + srv := NewService(repo, imgSrv) actual, err := srv.AdoptPet(context.Background(), t.AdoptByReq)