From 6359eb50884466bb159bb4e39488acbf118cff1c Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Sat, 30 Dec 2023 00:28:27 +0700 Subject: [PATCH 01/18] feat: change view mock --- src/mocks/pet/pet.mock.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mocks/pet/pet.mock.go b/src/mocks/pet/pet.mock.go index d1f5d87..fd0004a 100644 --- a/src/mocks/pet/pet.mock.go +++ b/src/mocks/pet/pet.mock.go @@ -53,3 +53,13 @@ func (r *RepositoryMock) Delete(id string) error { args := r.Called(id) return args.Error(0) } + +func (r *RepositoryMock) ChangeView(id string, visible bool, result *bool) error { + args := r.Called(id, result) + + if args.Get(0) != nil { + *result = args.Get(0).(bool) + } + + return args.Error(1) +} From d1190b85d1da2ba7ada9d79c6609348658433611 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:41:19 +0700 Subject: [PATCH 02/18] chore: comment image service and use list of string instead --- src/app/service/pet/pet.service.go | 47 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index 552f81b..8e3f8a6 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -62,13 +62,13 @@ func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *p return nil, status.Error(codes.NotFound, "pet not found") } - images, err := s.imageService.FindByPetId(req.Pet.Id) - if err != nil { - return nil, status.Error(codes.Internal, "error querying image service") - } - imageUrls := ExtractImageUrls(images) + // images, err := s.imageService.FindByPetId(req.Pet.Id) + // if err != nil { + // return nil, status.Error(codes.Internal, "error querying image service") + // } + // imageUrls := ExtractImageUrls(images) - return &proto.UpdatePetResponse{Pet: RawToDto(raw, imageUrls)}, nil + return &proto.UpdatePetResponse{Pet: RawToDto(raw, []string{})}, nil } func (s *Service) ChangeView(_ context.Context, req *proto.ChangeViewPetRequest) (res *proto.ChangeViewPetResponse, err error) { @@ -100,14 +100,14 @@ func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res return nil, status.Error(codes.Unavailable, "Internal error") } - for _, pet := range pets { - images, err := s.imageService.FindByPetId(pet.ID.String()) - if err != nil { - return nil, status.Error(codes.Internal, "error querying image service") - } - imageUrls := ExtractImageUrls(images) - imageUrlsList = append(imageUrlsList, imageUrls) - } + // for _, pet := range pets { + // images, err := s.imageService.FindByPetId(pet.ID.String()) + // if err != nil { + // return nil, status.Error(codes.Internal, "error querying image service") + // } + // imageUrls := ExtractImageUrls(images) + // imageUrlsList = append(imageUrlsList, imageUrls) + // } petWithImageUrls, err := RawToDtoList(&pets, imageUrlsList) if err != nil { @@ -127,13 +127,13 @@ func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res * return nil, status.Error(codes.NotFound, err.Error()) } - images, err := s.imageService.FindByPetId(req.Id) - if err != nil { - return nil, status.Error(codes.Internal, "error querying image service") - } - imageUrls := ExtractImageUrls(images) + // images, err := s.imageService.FindByPetId(req.Id) + // if err != nil { + // return nil, status.Error(codes.Internal, "error querying image service") + // } + // imageUrls := ExtractImageUrls(images) - return &proto.FindOnePetResponse{Pet: RawToDto(&pet, imageUrls)}, err + return &proto.FindOnePetResponse{Pet: RawToDto(&pet, []string{})}, err } func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *proto.CreatePetResponse, err error) { @@ -174,11 +174,12 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res func RawToDtoList(in *[]*pet.Pet, imageUrls [][]string) ([]*proto.Pet, error) { var result []*proto.Pet if len(*in) != len(imageUrls) { - return nil, errors.New("length of in and imageUrls have to be the same") + return nil, status.Error(codes.Internal, "length of in and imageUrls have to be the same") } - for i, e := range *in { - result = append(result, RawToDto(e, imageUrls[i])) + for _, e := range *in { + // result = append(result, RawToDto(e, imageUrls[i])) + result = append(result, RawToDto(e, []string{})) } return result, nil } From d1f650384ab461574481f0720f3bd7eeccb3be15 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:52:50 +0700 Subject: [PATCH 03/18] fix: remove ramdon image urls in setup test --- src/app/service/pet/pet.service.go | 2 +- src/app/service/pet/pet.service_test.go | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index 8e3f8a6..d52730e 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -92,7 +92,6 @@ func (s *Service) ChangeView(_ context.Context, req *proto.ChangeViewPetRequest) func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res *proto.FindAllPetResponse, err error) { var pets []*pet.Pet - var imageUrlsList [][]string err = s.repository.FindAll(&pets) if err != nil { @@ -100,6 +99,7 @@ func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res return nil, status.Error(codes.Unavailable, "Internal error") } + imageUrlsList := make([][]string, len(pets)) // for _, pet := range pets { // images, err := s.imageService.FindByPetId(pet.ID.String()) // if err != nil { diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index 04d36b9..330348c 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -76,16 +76,16 @@ func (t *PetServiceTest) SetupTest() { AdoptBy: "", } var images []*img_proto.Image - var imageUrls []string - for i := 0; i < 3; i++ { - url := faker.URL() - images = append(images, &img_proto.Image{ - Id: faker.UUIDDigit(), - PetId: pet.ID.String(), - ImageUrl: url, - }) - imageUrls = append(imageUrls, url) - } + imageUrls := []string{} + // for i := 0; i < 3; i++ { + // url := faker.URL() + // images = append(images, &img_proto.Image{ + // Id: faker.UUIDDigit(), + // PetId: pet.ID.String(), + // ImageUrl: url, + // }) + // imageUrls = append(imageUrls, url) + // } t.ImagesList = append(t.ImagesList, images) t.ImageUrlsList = append(t.ImageUrlsList, imageUrls) pets = append(pets, pet) From 7a6bc214bffca0519ca16f68c0cd4a1957142726 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Tue, 2 Jan 2024 17:33:10 +0700 Subject: [PATCH 04/18] fix: add guard error with non-existing id --- src/app/repository/pet/pet.repository.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/app/repository/pet/pet.repository.go b/src/app/repository/pet/pet.repository.go index 2ee80f1..ff20ff2 100644 --- a/src/app/repository/pet/pet.repository.go +++ b/src/app/repository/pet/pet.repository.go @@ -1,6 +1,7 @@ package pet import ( + "github.com/google/uuid" "github.com/isd-sgcu/johnjud-backend/src/app/model/pet" "gorm.io/gorm" ) @@ -18,7 +19,15 @@ func (r *Repository) FindAll(result *[]*pet.Pet) error { } func (r *Repository) FindOne(id string, result *pet.Pet) error { - return r.db.Model(&pet.Pet{}).Find(result, "id = ?", id).Error + if err := r.db.Model(&pet.Pet{}).Find(result, "id = ?", id).Error; err != nil { + return err + } + + if result.ID == uuid.Nil { + return gorm.ErrRecordNotFound + } + + return nil } func (r *Repository) Create(in *pet.Pet) error { From 5d0b5f0aa3e3b24eb0d5c9dc16c4147fa810caa4 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 01:24:16 +0700 Subject: [PATCH 05/18] fix: change type bool from *bool --- src/app/model/pet/pet.model.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/model/pet/pet.model.go b/src/app/model/pet/pet.model.go index 3c88a37..8a33e49 100644 --- a/src/app/model/pet/pet.model.go +++ b/src/app/model/pet/pet.model.go @@ -15,10 +15,10 @@ type Pet struct { Habit string `json:"habit" gorm:"mediumtext"` Caption string `json:"caption" gorm:"mediumtext"` Status pet.Status `json:"status" gorm:"mediumtext" example:"findhome"` - IsSterile bool `json:"is_sterile"` - IsVaccinated bool `json:"is_vaccine"` - IsVisible bool `json:"is_visible"` - IsClubPet bool `json:"is_club_pet"` + IsSterile *bool `json:"is_sterile"` + IsVaccinated *bool `json:"is_vaccine"` + IsVisible *bool `json:"is_visible"` + IsClubPet *bool `json:"is_club_pet"` Background string `json:"background" gorm:"tinytext"` Address string `json:"address" gorm:"tinytext"` Contact string `json:"contact" gorm:"tinytext"` From 09ceb8399383dc921bfa5c5c6fd79d9bec14a27b Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 01:26:10 +0700 Subject: [PATCH 06/18] fix: change codes status for DtoToRaw and RawToDto error to `codes.InvalidArgument` --- src/app/service/pet/pet.service.go | 31 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index d52730e..82033bb 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -54,7 +54,7 @@ func (s *Service) Delete(ctx context.Context, req *proto.DeletePetRequest) (*pro func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *proto.UpdatePetResponse, err error) { raw, err := DtoToRaw(req.Pet) if err != nil { - return nil, status.Error(codes.Internal, "error converting dto to raw") + return nil, status.Error(codes.InvalidArgument, "error converting dto to raw") } err = s.repository.Update(req.Pet.Id, raw) @@ -67,7 +67,6 @@ func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *p // return nil, status.Error(codes.Internal, "error querying image service") // } // imageUrls := ExtractImageUrls(images) - return &proto.UpdatePetResponse{Pet: RawToDto(raw, []string{})}, nil } @@ -78,9 +77,9 @@ func (s *Service) ChangeView(_ context.Context, req *proto.ChangeViewPetRequest) } pet, err := DtoToRaw(petData.Pet) if err != nil { - return nil, status.Error(codes.Internal, "error converting dto to raw") + return nil, status.Error(codes.InvalidArgument, "error converting dto to raw") } - pet.IsVisible = req.Visible + pet.IsVisible = &req.Visible err = s.repository.Update(req.Id, pet) if err != nil { @@ -111,7 +110,7 @@ func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res petWithImageUrls, err := RawToDtoList(&pets, imageUrlsList) if err != nil { - return nil, status.Error(codes.Internal, "error converting raw to dto list") + return nil, status.Error(codes.InvalidArgument, "error converting raw to dto list") } return &proto.FindAllPetResponse{Pets: petWithImageUrls}, nil @@ -139,14 +138,14 @@ func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res * func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *proto.CreatePetResponse, err error) { raw, err := DtoToRaw(req.Pet) if err != nil { - return nil, status.Error(codes.Internal, "error converting dto to raw: "+err.Error()) + return nil, status.Error(codes.InvalidArgument, "error converting dto to raw: "+err.Error()) } imgUrls := []string{} err = s.repository.Create(raw) if err != nil { - return nil, status.Error(codes.Internal, "failed to create pet") + return nil, status.Error(codes.InvalidArgument, "failed to create pet") } return &proto.CreatePetResponse{Pet: RawToDto(raw, imgUrls)}, nil @@ -174,7 +173,7 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res func RawToDtoList(in *[]*pet.Pet, imageUrls [][]string) ([]*proto.Pet, error) { var result []*proto.Pet if len(*in) != len(imageUrls) { - return nil, status.Error(codes.Internal, "length of in and imageUrls have to be the same") + return nil, status.Error(codes.InvalidArgument, "length of in and imageUrls have to be the same") } for _, e := range *in { @@ -196,10 +195,10 @@ func RawToDto(in *pet.Pet, imgUrl []string) *proto.Pet { Caption: in.Caption, Status: proto.PetStatus(in.Status), ImageUrls: imgUrl, - IsSterile: in.IsSterile, - IsVaccinated: in.IsVaccinated, - IsVisible: in.IsVisible, - IsClubPet: in.IsClubPet, + IsSterile: *in.IsSterile, + IsVaccinated: *in.IsVaccinated, + IsVisible: *in.IsVisible, + IsClubPet: *in.IsClubPet, Background: in.Background, Address: in.Address, Contact: in.Contact, @@ -248,10 +247,10 @@ func DtoToRaw(in *proto.Pet) (res *pet.Pet, err error) { Habit: in.Habit, Caption: in.Caption, Status: 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, Background: in.Background, Address: in.Address, Contact: in.Contact, From f284208c6a66fce40e3911a5d6fb505d21c3c11d Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 01:26:43 +0700 Subject: [PATCH 07/18] feat: function that return address of boolean --- src/app/utils/common.utils.go | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/app/utils/common.utils.go diff --git a/src/app/utils/common.utils.go b/src/app/utils/common.utils.go new file mode 100644 index 0000000..f26e37b --- /dev/null +++ b/src/app/utils/common.utils.go @@ -0,0 +1,5 @@ +package utils + +func BoolAddr(b bool) *bool { + return &b +} From a5e348dc541070c6ea2641c2da84ec3e465927a1 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 01:28:27 +0700 Subject: [PATCH 08/18] chore: fix type --- src/app/service/pet/pet.service_test.go | 51 +++++++++++++------------ 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index 330348c..d9ef249 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -15,6 +15,7 @@ import ( "github.com/isd-sgcu/johnjud-backend/src/app/model" "github.com/isd-sgcu/johnjud-backend/src/app/model/pet" + "github.com/isd-sgcu/johnjud-backend/src/app/utils" proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/backend/pet/v1" img_proto "github.com/isd-sgcu/johnjud-go-proto/johnjud/file/image/v1" @@ -66,10 +67,10 @@ func (t *PetServiceTest) SetupTest() { Habit: faker.Paragraph(), Caption: faker.Paragraph(), Status: petConst.Status(rand.Intn(1) + 1), - IsSterile: true, - IsVaccinated: true, - IsVisible: true, - IsClubPet: true, + IsSterile: utils.BoolAddr(true), + IsVaccinated: utils.BoolAddr(true), + IsVisible: utils.BoolAddr(true), + IsClubPet: utils.BoolAddr(true), Background: faker.Paragraph(), Address: faker.Paragraph(), Contact: faker.Paragraph(), @@ -113,10 +114,10 @@ func (t *PetServiceTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: proto.PetStatus(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, Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, @@ -164,7 +165,7 @@ func (t *PetServiceTest) SetupTest() { Status: t.Pet.Status, IsSterile: t.Pet.IsSterile, IsVaccinated: t.Pet.IsVaccinated, - IsVisible: false, + IsVisible: utils.BoolAddr(false), IsClubPet: t.Pet.IsClubPet, Background: t.Pet.Background, Address: t.Pet.Address, @@ -182,10 +183,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), ImageUrls: t.ImageUrls, - IsSterile: t.Pet.IsSterile, - IsVaccinated: t.Pet.IsVaccinated, - IsVisible: t.Pet.IsVaccinated, - IsClubPet: t.Pet.IsClubPet, + IsSterile: *t.Pet.IsSterile, + IsVaccinated: *t.Pet.IsVaccinated, + IsVisible: *t.Pet.IsVaccinated, + IsClubPet: *t.Pet.IsClubPet, Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, @@ -204,10 +205,10 @@ func (t *PetServiceTest) SetupTest() { Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), ImageUrls: t.ImageUrls, - 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, Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, @@ -377,10 +378,10 @@ func createPets() []*pet.Pet { Habit: faker.Paragraph(), Caption: faker.Paragraph(), Status: petConst.Status(rand.Intn(1) + 1), - IsSterile: true, - IsVaccinated: true, - IsVisible: true, - IsClubPet: true, + IsSterile: utils.BoolAddr(true), + IsVaccinated: utils.BoolAddr(true), + IsVisible: utils.BoolAddr(true), + IsClubPet: utils.BoolAddr(true), Background: faker.Paragraph(), Address: faker.Paragraph(), Contact: faker.Paragraph(), @@ -406,10 +407,10 @@ func (t *PetServiceTest) createPetsDto(in []*pet.Pet, imageUrlsList [][]string) Caption: p.Caption, Status: proto.PetStatus(p.Status), ImageUrls: imageUrlsList[i], - IsSterile: p.IsSterile, - IsVaccinated: p.IsVaccinated, - IsVisible: p.IsVisible, - IsClubPet: p.IsClubPet, + IsSterile: *p.IsSterile, + IsVaccinated: *p.IsVaccinated, + IsVisible: *p.IsVisible, + IsClubPet: *p.IsClubPet, Background: p.Background, Address: p.Address, Contact: p.Contact, From f71eca10f51ab2246b7d52a4b00f18f619eac2ff Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 09:59:28 +0700 Subject: [PATCH 09/18] fix: error code --- src/app/service/pet/pet.service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index 82033bb..d55be48 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -145,7 +145,7 @@ func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *p err = s.repository.Create(raw) if err != nil { - return nil, status.Error(codes.InvalidArgument, "failed to create pet") + return nil, status.Error(codes.Internal, "failed to create pet") } return &proto.CreatePetResponse{Pet: RawToDto(raw, imgUrls)}, nil @@ -158,7 +158,7 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res } pet, err := DtoToRaw(dtoPet.Pet) if err != nil { - return nil, status.Error(codes.Internal, "error converting dto to raw") + return nil, status.Error(codes.InvalidArgument, "error converting dto to raw") } pet.AdoptBy = req.UserId From 642f474ba29fd433541844160636e799ca11c4c9 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:34:59 +0700 Subject: [PATCH 10/18] feat: update proto --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ade5ec4..665bb29 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.9 + github.com/isd-sgcu/johnjud-go-proto v0.2.4 github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.31.0 github.com/spf13/viper v1.18.2 diff --git a/go.sum b/go.sum index fc7670b..7886bd7 100644 --- a/go.sum +++ b/go.sum @@ -22,6 +22,8 @@ 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.2.4 h1:amYofKCZGMKc+VQARmsZSPgmpxEJwQjv6VfbCxI9wLw= +github.com/isd-sgcu/johnjud-go-proto v0.2.4/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= From ef144ad818dbf37ad31a182b87bc17da4b228978 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:35:09 +0700 Subject: [PATCH 11/18] feat: image mock --- src/mocks/image/image.mock.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/mocks/image/image.mock.go b/src/mocks/image/image.mock.go index 19aba0d..7347f8f 100644 --- a/src/mocks/image/image.mock.go +++ b/src/mocks/image/image.mock.go @@ -12,6 +12,16 @@ type ClientMock struct { mock.Mock } +func (c *ClientMock) AssignPet(_ context.Context, in *proto.AssignPetRequest, opts ...grpc.CallOption) (res *proto.AssignPetResponse, err error) { + args := c.Called(in) + + if args.Get(0) != nil { + res = args.Get(0).(*proto.AssignPetResponse) + } + + return res, args.Error(1) +} + func (c *ClientMock) Upload(_ context.Context, in *proto.UploadImageRequest, _ ...grpc.CallOption) (res *proto.UploadImageResponse, err error) { args := c.Called(in) From 29ecdf05131821da84e7ae17d2373c0a324765e4 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:35:20 +0700 Subject: [PATCH 12/18] fix: change image url type --- src/app/service/pet/pet.service_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index d9ef249..ef3cb48 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -121,7 +121,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - ImageUrls: t.ImageUrls, + Images: nil, } t.UpdatePet = &pet.Pet{ @@ -182,7 +182,7 @@ func (t *PetServiceTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), - ImageUrls: t.ImageUrls, + Images: nil, IsSterile: *t.Pet.IsSterile, IsVaccinated: *t.Pet.IsVaccinated, IsVisible: *t.Pet.IsVaccinated, @@ -204,7 +204,7 @@ func (t *PetServiceTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), - ImageUrls: t.ImageUrls, + Images: nil, IsSterile: *t.Pet.IsSterile, IsVaccinated: *t.Pet.IsVaccinated, IsVisible: *t.Pet.IsVisible, @@ -323,7 +323,7 @@ func (t *PetServiceTest) TestFindOneSuccess() { func (t *PetServiceTest) TestFindAllSuccess() { - want := &proto.FindAllPetResponse{Pets: t.createPetsDto(t.Pets, t.ImageUrlsList)} + want := &proto.FindAllPetResponse{Pets: t.createPetsDto(t.Pets, t.ImagesList)} var petsIn []*pet.Pet @@ -392,7 +392,7 @@ func createPets() []*pet.Pet { return result } -func (t *PetServiceTest) createPetsDto(in []*pet.Pet, imageUrlsList [][]string) []*proto.Pet { +func (t *PetServiceTest) createPetsDto(in []*pet.Pet, images [][]*img_proto.Image) []*proto.Pet { var result []*proto.Pet for i, p := range in { @@ -406,7 +406,7 @@ func (t *PetServiceTest) createPetsDto(in []*pet.Pet, imageUrlsList [][]string) Habit: p.Habit, Caption: p.Caption, Status: proto.PetStatus(p.Status), - ImageUrls: imageUrlsList[i], + Images: images[i], IsSterile: *p.IsSterile, IsVaccinated: *p.IsVaccinated, IsVisible: *p.IsVisible, @@ -424,7 +424,7 @@ func (t *PetServiceTest) createPetsDto(in []*pet.Pet, imageUrlsList [][]string) func (t *PetServiceTest) TestCreateSuccess() { want := &proto.CreatePetResponse{Pet: t.PetDto} - want.Pet.ImageUrls = []string{} // when pet is first created, it has no images + want.Pet.Images = nil // when pet is first created, it has no images repo := &mock.RepositoryMock{} From e2eff75baa69d7ed49cee2a995bd52b1204095d1 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 12:35:30 +0700 Subject: [PATCH 13/18] chore: fix service test --- src/app/service/pet/pet.service.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index d55be48..cf9db67 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -67,7 +67,7 @@ func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *p // return nil, status.Error(codes.Internal, "error querying image service") // } // imageUrls := ExtractImageUrls(images) - return &proto.UpdatePetResponse{Pet: RawToDto(raw, []string{})}, nil + return &proto.UpdatePetResponse{Pet: RawToDto(raw, nil)}, nil } func (s *Service) ChangeView(_ context.Context, req *proto.ChangeViewPetRequest) (res *proto.ChangeViewPetResponse, err error) { @@ -132,7 +132,7 @@ func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res * // } // imageUrls := ExtractImageUrls(images) - return &proto.FindOnePetResponse{Pet: RawToDto(&pet, []string{})}, err + return &proto.FindOnePetResponse{Pet: RawToDto(&pet, nil)}, err } func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *proto.CreatePetResponse, err error) { @@ -141,14 +141,12 @@ func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *p return nil, status.Error(codes.InvalidArgument, "error converting dto to raw: "+err.Error()) } - imgUrls := []string{} - err = s.repository.Create(raw) if err != nil { return nil, status.Error(codes.Internal, "failed to create pet") } - return &proto.CreatePetResponse{Pet: RawToDto(raw, imgUrls)}, nil + return &proto.CreatePetResponse{Pet: RawToDto(raw, nil)}, nil } func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res *proto.AdoptPetResponse, err error) { @@ -178,12 +176,12 @@ func RawToDtoList(in *[]*pet.Pet, imageUrls [][]string) ([]*proto.Pet, error) { for _, e := range *in { // result = append(result, RawToDto(e, imageUrls[i])) - result = append(result, RawToDto(e, []string{})) + result = append(result, RawToDto(e, nil)) } return result, nil } -func RawToDto(in *pet.Pet, imgUrl []string) *proto.Pet { +func RawToDto(in *pet.Pet, images []*image_proto.Image) *proto.Pet { return &proto.Pet{ Id: in.ID.String(), Type: in.Type, @@ -194,7 +192,7 @@ func RawToDto(in *pet.Pet, imgUrl []string) *proto.Pet { Habit: in.Habit, Caption: in.Caption, Status: proto.PetStatus(in.Status), - ImageUrls: imgUrl, + Images: nil, IsSterile: *in.IsSterile, IsVaccinated: *in.IsVaccinated, IsVisible: *in.IsVisible, From be4a67f45591f2b4589b951527862d144425cb60 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:15:12 +0700 Subject: [PATCH 14/18] chore: fix test --- src/app/service/pet/pet.service_test.go | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/app/service/pet/pet.service_test.go b/src/app/service/pet/pet.service_test.go index ef3cb48..8b0329a 100644 --- a/src/app/service/pet/pet.service_test.go +++ b/src/app/service/pet/pet.service_test.go @@ -78,15 +78,6 @@ func (t *PetServiceTest) SetupTest() { } var images []*img_proto.Image imageUrls := []string{} - // for i := 0; i < 3; i++ { - // url := faker.URL() - // images = append(images, &img_proto.Image{ - // Id: faker.UUIDDigit(), - // PetId: pet.ID.String(), - // ImageUrl: url, - // }) - // imageUrls = append(imageUrls, url) - // } t.ImagesList = append(t.ImagesList, images) t.ImageUrlsList = append(t.ImageUrlsList, imageUrls) pets = append(pets, pet) @@ -95,12 +86,6 @@ func (t *PetServiceTest) SetupTest() { t.Pets = pets t.Pet = pets[0] - for _, images := range t.ImagesList { - for _, image := range images { - t.ImageUrls = append(t.ImageUrls, image.ImageUrl) - } - } - t.Images = t.ImagesList[0] t.ImageUrls = t.ImageUrlsList[0] @@ -121,7 +106,7 @@ func (t *PetServiceTest) SetupTest() { Background: t.Pet.Background, Address: t.Pet.Address, Contact: t.Pet.Contact, - Images: nil, + Images: t.Images, } t.UpdatePet = &pet.Pet{ @@ -182,7 +167,7 @@ func (t *PetServiceTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), - Images: nil, + Images: t.Images, IsSterile: *t.Pet.IsSterile, IsVaccinated: *t.Pet.IsVaccinated, IsVisible: *t.Pet.IsVaccinated, @@ -204,7 +189,7 @@ func (t *PetServiceTest) SetupTest() { Habit: t.Pet.Habit, Caption: t.Pet.Caption, Status: proto.PetStatus(t.Pet.Status), - Images: nil, + Images: t.Images, IsSterile: *t.Pet.IsSterile, IsVaccinated: *t.Pet.IsVaccinated, IsVisible: *t.Pet.IsVisible, From c64632cad7f15d141cc4e146738ab4287ed046e7 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:15:31 +0700 Subject: [PATCH 15/18] chore --- src/app/service/pet/pet.service.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index cf9db67..a4a226d 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -62,12 +62,13 @@ func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *p return nil, status.Error(codes.NotFound, "pet not found") } + var images []*image_proto.Image // images, err := s.imageService.FindByPetId(req.Pet.Id) // if err != nil { // return nil, status.Error(codes.Internal, "error querying image service") // } // imageUrls := ExtractImageUrls(images) - return &proto.UpdatePetResponse{Pet: RawToDto(raw, nil)}, nil + return &proto.UpdatePetResponse{Pet: RawToDto(raw, images)}, nil } func (s *Service) ChangeView(_ context.Context, req *proto.ChangeViewPetRequest) (res *proto.ChangeViewPetResponse, err error) { @@ -98,7 +99,7 @@ func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res return nil, status.Error(codes.Unavailable, "Internal error") } - imageUrlsList := make([][]string, len(pets)) + imageUrlsList := make([][]*image_proto.Image, len(pets)) // for _, pet := range pets { // images, err := s.imageService.FindByPetId(pet.ID.String()) // if err != nil { @@ -126,13 +127,15 @@ func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res * return nil, status.Error(codes.NotFound, err.Error()) } + // images := make([]*image_proto.Image, 3) + var images []*image_proto.Image // images, err := s.imageService.FindByPetId(req.Id) // if err != nil { // return nil, status.Error(codes.Internal, "error querying image service") // } // imageUrls := ExtractImageUrls(images) - return &proto.FindOnePetResponse{Pet: RawToDto(&pet, nil)}, err + return &proto.FindOnePetResponse{Pet: RawToDto(&pet, images)}, err } func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *proto.CreatePetResponse, err error) { @@ -146,7 +149,9 @@ func (s *Service) Create(_ context.Context, req *proto.CreatePetRequest) (res *p return nil, status.Error(codes.Internal, "failed to create pet") } - return &proto.CreatePetResponse{Pet: RawToDto(raw, nil)}, nil + var images []*image_proto.Image + + return &proto.CreatePetResponse{Pet: RawToDto(raw, images)}, nil } func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res *proto.AdoptPetResponse, err error) { @@ -168,15 +173,15 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res return &proto.AdoptPetResponse{Success: true}, nil } -func RawToDtoList(in *[]*pet.Pet, imageUrls [][]string) ([]*proto.Pet, error) { +func RawToDtoList(in *[]*pet.Pet, imagesList [][]*image_proto.Image) ([]*proto.Pet, error) { var result []*proto.Pet - if len(*in) != len(imageUrls) { + if len(*in) != len(imagesList) { return nil, status.Error(codes.InvalidArgument, "length of in and imageUrls have to be the same") } - for _, e := range *in { - // result = append(result, RawToDto(e, imageUrls[i])) - result = append(result, RawToDto(e, nil)) + for i, e := range *in { + result = append(result, RawToDto(e, imagesList[i])) + // result = append(result, RawToDto(e, )) } return result, nil } @@ -192,7 +197,7 @@ func RawToDto(in *pet.Pet, images []*image_proto.Image) *proto.Pet { Habit: in.Habit, Caption: in.Caption, Status: proto.PetStatus(in.Status), - Images: nil, + Images: images, IsSterile: *in.IsSterile, IsVaccinated: *in.IsVaccinated, IsVisible: *in.IsVisible, From ac7f93db7ab2d4c9e5d91766bb2721d45b379b9f Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:49:53 +0700 Subject: [PATCH 16/18] chore --- src/app/service/pet/pet.service.go | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index a4a226d..b888007 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -64,10 +64,6 @@ func (s *Service) Update(_ context.Context, req *proto.UpdatePetRequest) (res *p var images []*image_proto.Image // images, err := s.imageService.FindByPetId(req.Pet.Id) - // if err != nil { - // return nil, status.Error(codes.Internal, "error querying image service") - // } - // imageUrls := ExtractImageUrls(images) return &proto.UpdatePetResponse{Pet: RawToDto(raw, images)}, nil } @@ -99,22 +95,13 @@ func (s *Service) FindAll(_ context.Context, req *proto.FindAllPetRequest) (res return nil, status.Error(codes.Unavailable, "Internal error") } - imageUrlsList := make([][]*image_proto.Image, len(pets)) - // for _, pet := range pets { - // images, err := s.imageService.FindByPetId(pet.ID.String()) - // if err != nil { - // return nil, status.Error(codes.Internal, "error querying image service") - // } - // imageUrls := ExtractImageUrls(images) - // imageUrlsList = append(imageUrlsList, imageUrls) - // } - - petWithImageUrls, err := RawToDtoList(&pets, imageUrlsList) + imagesList := make([][]*image_proto.Image, len(pets)) + petWithImages, err := RawToDtoList(&pets, imagesList) if err != nil { return nil, status.Error(codes.InvalidArgument, "error converting raw to dto list") } - return &proto.FindAllPetResponse{Pets: petWithImageUrls}, nil + return &proto.FindAllPetResponse{Pets: petWithImages}, nil } func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res *proto.FindOnePetResponse, err error) { @@ -127,14 +114,7 @@ func (s Service) FindOne(_ context.Context, req *proto.FindOnePetRequest) (res * return nil, status.Error(codes.NotFound, err.Error()) } - // images := make([]*image_proto.Image, 3) var images []*image_proto.Image - // images, err := s.imageService.FindByPetId(req.Id) - // if err != nil { - // return nil, status.Error(codes.Internal, "error querying image service") - // } - // imageUrls := ExtractImageUrls(images) - return &proto.FindOnePetResponse{Pet: RawToDto(&pet, images)}, err } @@ -181,7 +161,6 @@ func RawToDtoList(in *[]*pet.Pet, imagesList [][]*image_proto.Image) ([]*proto.P for i, e := range *in { result = append(result, RawToDto(e, imagesList[i])) - // result = append(result, RawToDto(e, )) } return result, nil } From ad4ed097c63bf85904df404bba0d2b1fd683eee4 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 18:24:27 +0700 Subject: [PATCH 17/18] fix: validate DtoToRaw & RawToDto --- src/app/service/pet/pet.service.go | 102 ++++++++++++++++++----------- 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index b888007..f9c2674 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -166,26 +166,40 @@ func RawToDtoList(in *[]*pet.Pet, imagesList [][]*image_proto.Image) ([]*proto.P } func RawToDto(in *pet.Pet, images []*image_proto.Image) *proto.Pet { - return &proto.Pet{ - Id: in.ID.String(), - Type: in.Type, - Species: in.Species, - Name: in.Name, - Birthdate: in.Birthdate, - Gender: proto.Gender(in.Gender), - Habit: in.Habit, - Caption: in.Caption, - Status: proto.PetStatus(in.Status), - Images: images, - IsSterile: *in.IsSterile, - IsVaccinated: *in.IsVaccinated, - IsVisible: *in.IsVisible, - IsClubPet: *in.IsClubPet, - Background: in.Background, - Address: in.Address, - Contact: in.Contact, - AdoptBy: in.AdoptBy, + pet := &proto.Pet{ + Id: in.ID.String(), + Type: in.Type, + Species: in.Species, + Name: in.Name, + Birthdate: in.Birthdate, + Gender: proto.Gender(in.Gender), + Habit: in.Habit, + Caption: in.Caption, + Status: proto.PetStatus(in.Status), + Images: images, + Background: in.Background, + Address: in.Address, + Contact: in.Contact, + AdoptBy: in.AdoptBy, } + + if in.IsClubPet != nil { + pet.IsClubPet = *in.IsClubPet + } + + if in.IsSterile != nil { + pet.IsSterile = *in.IsSterile + } + + if in.IsVaccinated != nil { + pet.IsVaccinated = *in.IsVaccinated + } + + if in.IsVisible != nil { + pet.IsVisible = *in.IsVisible + } + + return pet } func DtoToRaw(in *proto.Pet) (res *pet.Pet, err error) { @@ -214,30 +228,44 @@ func DtoToRaw(in *proto.Pet) (res *pet.Pet, err error) { status = petConst.FINDHOME } - return &pet.Pet{ + pet := &pet.Pet{ Base: model.Base{ ID: id, CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: gorm.DeletedAt{}, }, - Type: in.Type, - Species: in.Species, - Name: in.Name, - Birthdate: in.Birthdate, - Gender: gender, - Habit: in.Habit, - Caption: in.Caption, - Status: status, - IsSterile: &in.IsSterile, - IsVaccinated: &in.IsVaccinated, - IsVisible: &in.IsVisible, - IsClubPet: &in.IsClubPet, - Background: in.Background, - Address: in.Address, - Contact: in.Contact, - AdoptBy: in.AdoptBy, - }, nil + Type: in.Type, + Species: in.Species, + Name: in.Name, + Birthdate: in.Birthdate, + Gender: gender, + Habit: in.Habit, + Caption: in.Caption, + Status: status, + Background: in.Background, + Address: in.Address, + Contact: in.Contact, + AdoptBy: in.AdoptBy, + } + + if &in.IsSterile != nil { + pet.IsSterile = &in.IsSterile + } + + if &in.IsVaccinated != nil { + pet.IsVaccinated = &in.IsVaccinated + } + + if &in.IsVisible != nil { + pet.IsVisible = &in.IsVisible + } + + if &in.IsClubPet != nil { + pet.IsClubPet = &in.IsClubPet + } + + return pet, nil } func ExtractImageUrls(in []*image_proto.Image) []string { From 80d7bf1082c9ec302cbaebd2031ed56435546462 Mon Sep 17 00:00:00 2001 From: Gear <84141000+macgeargear@users.noreply.github.com> Date: Thu, 4 Jan 2024 18:27:13 +0700 Subject: [PATCH 18/18] chore --- src/app/service/pet/pet.service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/service/pet/pet.service.go b/src/app/service/pet/pet.service.go index f9c2674..cd7b507 100644 --- a/src/app/service/pet/pet.service.go +++ b/src/app/service/pet/pet.service.go @@ -156,7 +156,7 @@ func (s *Service) AdoptPet(ctx context.Context, req *proto.AdoptPetRequest) (res func RawToDtoList(in *[]*pet.Pet, imagesList [][]*image_proto.Image) ([]*proto.Pet, error) { var result []*proto.Pet if len(*in) != len(imagesList) { - return nil, status.Error(codes.InvalidArgument, "length of in and imageUrls have to be the same") + return nil, status.Error(codes.InvalidArgument, "length of in and imagesList have to be the same") } for i, e := range *in {