From 6d5c96e2e426d34a8760c9e3f31df0b952016e35 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 29 Aug 2020 18:02:00 +0900 Subject: [PATCH 001/156] define model and entity of place --- pkg/domain/entity/place.go | 14 +++++ pkg/infrastructure/mysql/model/place.go | 40 ++++++++++++++ pkg/infrastructure/mysql/model/place_test.go | 55 ++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 pkg/domain/entity/place.go create mode 100644 pkg/infrastructure/mysql/model/place.go create mode 100644 pkg/infrastructure/mysql/model/place_test.go diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go new file mode 100644 index 0000000..3b1033a --- /dev/null +++ b/pkg/domain/entity/place.go @@ -0,0 +1,14 @@ +package entity + +import "time" + +type Place struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +// TODO: 使わなさそう +type PlaceSlice []*Place diff --git a/pkg/infrastructure/mysql/model/place.go b/pkg/infrastructure/mysql/model/place.go new file mode 100644 index 0000000..db4d44e --- /dev/null +++ b/pkg/infrastructure/mysql/model/place.go @@ -0,0 +1,40 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type PlaceModel struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type PlaceModelSlice []*PlaceModel + +func ConvertToPlaceEntity(place *PlaceModel) *entity.Place { + if place == nil { + return nil + } + return &entity.Place{ + ID: place.ID, + Name: place.Name, + CreatedAt: place.CreatedAt, + UpdatedAt: place.UpdatedAt, + DeletedAt: place.DeletedAt, + } +} + +func ConvertToPlaceSliceEntity(places PlaceModelSlice) entity.PlaceSlice { + if places == nil { + return nil + } + res := make(entity.PlaceSlice, 0, len(places)) + for _, place := range places { + res = append(res, ConvertToPlaceEntity(place)) + } + return res +} diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go new file mode 100644 index 0000000..7b3c45d --- /dev/null +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -0,0 +1,55 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToPlaceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + testData := &PlaceModel{ + ID: 1, + Name: "desney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + result := ConvertToPlaceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.Place{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToPlaceEntity(nil) + assert.Nil(t, result) + }) +} +func TestConvertToPlaceSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + data := &PlaceModel{ + ID: 1, + Name: "desney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + testData := PlaceModelSlice{data, data} + + result := ConvertToPlaceSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.PlaceSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToPlaceSliceEntity(nil) + assert.Nil(t, result) + }) +} From 370b65318b401ce8b48a9672bebbb162f276af92 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 29 Aug 2020 18:02:17 +0900 Subject: [PATCH 002/156] define model and entity of wishCard --- pkg/domain/entity/wish_card.go | 19 ++++++ pkg/infrastructure/mysql/model/wish_card.go | 50 +++++++++++++++ .../mysql/model/wish_card_test.go | 63 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 pkg/domain/entity/wish_card.go create mode 100644 pkg/infrastructure/mysql/model/wish_card.go create mode 100644 pkg/infrastructure/mysql/model/wish_card_test.go diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go new file mode 100644 index 0000000..db2613e --- /dev/null +++ b/pkg/domain/entity/wish_card.go @@ -0,0 +1,19 @@ +package entity + +import "time" + +type WishCard struct { + ID int + UserID int + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + Category interface{} // TODO: 未実装 + Place *Place +} + +type WishCardSlice []*WishCard diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go new file mode 100644 index 0000000..7ad4270 --- /dev/null +++ b/pkg/infrastructure/mysql/model/wish_card.go @@ -0,0 +1,50 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type WishCardModel struct { + ID int + UserID int + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + CategoryID int + PlaceID int +} + +type WishCardModelSlice []*WishCardModel + +func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { + if wishCard == nil { + return nil + } + return &entity.WishCard{ + ID: wishCard.ID, + UserID: wishCard.UserID, + Activity: wishCard.Activity, + Description: wishCard.Description, + Date: wishCard.Date, + DoneAt: wishCard.DoneAt, + CreatedAt: wishCard.CreatedAt, + UpdatedAt: wishCard.UpdatedAt, + DeletedAt: wishCard.DeletedAt, + } +} + +func ConvertToWishCardSliceEntity(wishCards WishCardModelSlice) entity.WishCardSlice { + if wishCards == nil { + return nil + } + res := make(entity.WishCardSlice, 0, len(wishCards)) + for _, wishCard := range wishCards { + res = append(res, ConvertToWishCardEntiry(wishCard)) + } + return res +} diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go new file mode 100644 index 0000000..195762a --- /dev/null +++ b/pkg/infrastructure/mysql/model/wish_card_test.go @@ -0,0 +1,63 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToWishCardEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + testData := &WishCardModel{ + ID: 1, + UserID: 1, + Activity: "タピる", + Description: "せつめいーーー", + Date: &date, + DoneAt: nil, + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: nil, + } + + result := ConvertToWishCardEntiry(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.WishCard{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToWishCardEntiry(nil) + assert.Nil(t, result) + }) +} +func TestConvertToWishCardSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + data := &WishCardModel{ + ID: 1, + UserID: 1, + Activity: "タピる", + Description: "せつめいーーー", + Date: &date, + DoneAt: nil, + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: nil, + } + testData := WishCardModelSlice{data, data} + + result := ConvertToWishCardSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.WishCardSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToWishCardSliceEntity(nil) + assert.Nil(t, result) + }) +} From 7f182d07198a2c5a7b0683a81c03f4ab6854eeb6 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 14:54:19 +0900 Subject: [PATCH 003/156] add place repository --- pkg/domain/repository/place/repository.go | 17 ++ pkg/infrastructure/mysql/place/repository.go | 166 +++++++++++++ .../mysql/place/repository_test.go | 226 ++++++++++++++++++ 3 files changed, 409 insertions(+) create mode 100644 pkg/domain/repository/place/repository.go create mode 100644 pkg/infrastructure/mysql/place/repository.go create mode 100644 pkg/infrastructure/mysql/place/repository_test.go diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go new file mode 100644 index 0000000..4a65494 --- /dev/null +++ b/pkg/domain/repository/place/repository.go @@ -0,0 +1,17 @@ +package place + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + // TODO: intでよくね? + Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) + + Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) + SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go new file mode 100644 index 0000000..0076874 --- /dev/null +++ b/pkg/infrastructure/mysql/place/repository.go @@ -0,0 +1,166 @@ +package place + +import ( + "context" + "database/sql" + "errors" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type placeRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) place.Repository { + return &placeRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + if place == nil { + return nil, werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO places( + name, created_at, updated_at + ) VALUES (?, ?, ?) + `, place.Name, + place.CreatedAt, + place.UpdatedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + place.ID = int(id) + return place, nil +} + +func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET name=?, updated_at=?, deleted_at=? + WHERE id=? + `, place.Name, + place.UpdatedAt, + place.DeletedAt, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM places + WHERE id=? + `, placeID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM places + WHERE id=? + `, placeID) + var result model.PlaceModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT id, name, created_at, updated_at, deleted_at + FROM places + `) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.PlaceModelSlice + for rows.Next() { + var place model.PlaceModel + err = rows.Scan( + &place.ID, + &place.Name, + &place.CreatedAt, + &place.UpdatedAt, + &place.DeletedAt) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &place) + } + return result, nil +} diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go new file mode 100644 index 0000000..0e3196c --- /dev/null +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -0,0 +1,226 @@ +package place + +import ( + "context" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/stretchr/testify/assert" + + _ "github.com/go-sql-driver/mysql" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo place.Repository + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +// repositoryを作ってもらう +func before() { + var err error + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) +} + +// dbのコネクションを閉じる +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, place) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.ID) + }) + + t.Run("failed to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestUpdate(t *testing.T) { + t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + ID: 1, + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, place) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, 1) + return err + }) + + assert.NoError(t, err) + assert.Equal(t, "sample place", result.Name) + }) + + t.Run("failure to update data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, nil) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, 1) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, _ = repo.Insert(ctx, masterTx, place) + + err = repo.Delete(ctx, masterTx, result.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, result.ID) + if err == nil { + return errors.New("削除されたデータが引っかかった") + } + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select by id", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newData, _ := repo.Insert(ctx, masterTx, place) + + result, err = repo.SelectByID(ctx, masterTx, newData.ID) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select by id. id is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newData, _ := repo.Insert(ctx, masterTx, place) + repo.Delete(ctx, masterTx, newData.ID) + + result, err = repo.SelectByID(ctx, masterTx, newData.ID) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectAll(t *testing.T) { + t.Run("success to select all", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.PlaceModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.SelectAll(ctx, masterTx) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} From b14ed0d9fe4e85edc9fc09e49dc1ed84e990a20f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 14:57:21 +0900 Subject: [PATCH 004/156] typo --- pkg/infrastructure/mysql/model/place_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go index 7b3c45d..3cb54e1 100644 --- a/pkg/infrastructure/mysql/model/place_test.go +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -13,7 +13,7 @@ func TestConvertToPlaceEntity(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &PlaceModel{ ID: 1, - Name: "desney land", + Name: "disney land", CreatedAt: &date, UpdatedAt: &date, DeletedAt: &date, @@ -35,7 +35,7 @@ func TestConvertToPlaceSliceEntity(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &PlaceModel{ ID: 1, - Name: "desney land", + Name: "disney land", CreatedAt: &date, UpdatedAt: &date, DeletedAt: &date, From d0abaafd19e5c5958729737fa641bfdff0d41827 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 15:52:43 +0900 Subject: [PATCH 005/156] add upDeleteFlag on plceRepository --- pkg/domain/repository/place/repository.go | 3 ++ pkg/infrastructure/mysql/place/repository.go | 36 +++++++++++++++++-- .../mysql/place/repository_test.go | 36 ++++++++++++++++++- 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 4a65494..3107fa7 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -11,7 +11,10 @@ type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) } diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 0076874..316f850 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -23,6 +23,7 @@ func New(txManager repository.MasterTxManager) place.Repository { } func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + // NOTE: nilで降りてきた用対策。いらないかも if place == nil { return nil, werrors.Newf( errors.New("required data(place) is nil"), @@ -59,6 +60,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos } func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + // NOTE: nilで降りてきた用対策。いらないかも if place == nil { return werrors.Newf( errors.New("required data(place) is nil"), @@ -74,7 +76,7 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos } _, err = tx.Exec(` UPDATE places - SET name=?, updated_at=?, deleted_at=? + SET name=?, updated_at=? WHERE id=? `, place.Name, place.UpdatedAt, @@ -88,6 +90,36 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos return nil } +func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + // NOTE: nilで降りてきた用対策。いらないかも + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET updated_at=?, deleted_at=? + WHERE id=? + `, place.UpdatedAt, + place.DeletedAt, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -96,7 +128,7 @@ func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repos } _, err = tx.Exec(` DELETE FROM places - WHERE id=? + WHERE id=? and deleted_at is not null `, placeID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 0e3196c..2e04bc1 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -130,6 +130,38 @@ func TestUpdate(t *testing.T) { }) } +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlace, _ := repo.Insert(ctx, masterTx, place) + assert.Nil(t, newPlace.DeletedAt) + + newPlace.DeletedAt = &date + newPlace.UpdatedAt = &date + err = repo.UpDeleteFlag(ctx, masterTx, newPlace) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, newPlace.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, date, result.DeletedAt) + }) +} + func TestDelete(t *testing.T) { t.Run("success to delete", func(t *testing.T) { var err error @@ -143,7 +175,9 @@ func TestDelete(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, _ = repo.Insert(ctx, masterTx, place) + newData, _ := repo.Insert(ctx, masterTx, place) + newData.DeletedAt = &date + repo.UpDeleteFlag(ctx, masterTx, newData) err = repo.Delete(ctx, masterTx, result.ID) if err != nil { From 1a74b0f3f34c1680ebc0214c3d052269c7c93c5a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:08:54 +0900 Subject: [PATCH 006/156] add place servic --- .../service/place/mock_place/mock_service.go | 123 +++++++++++ pkg/domain/service/place/service.go | 116 ++++++++++ pkg/domain/service/place/service_test.go | 200 ++++++++++++++++++ 3 files changed, 439 insertions(+) create mode 100644 pkg/domain/service/place/mock_place/mock_service.go create mode 100644 pkg/domain/service/place/service.go create mode 100644 pkg/domain/service/place/service_test.go diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go new file mode 100644 index 0000000..6a0f129 --- /dev/null +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -0,0 +1,123 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/place/repository.go + +// Package mock_place is a generated GoMock package. +package mock_place + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) + ret0, _ := ret[0].(*model.PlaceModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, place) +} + +// Update mocks base method +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// Update indicates an expected call of Update +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, place) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, placeID) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, place) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, placeID) + ret0, _ := ret[0].(*model.PlaceModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, placeID) +} + +// SelectAll mocks base method +func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectAll", ctx, masterTx) + ret0, _ := ret[0].(model.PlaceModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectAll indicates an expected call of SelectAll +func (mr *MockRepositoryMockRecorder) SelectAll(ctx, masterTx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectAll", reflect.TypeOf((*MockRepository)(nil).SelectAll), ctx, masterTx) +} diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go new file mode 100644 index 0000000..b454fab --- /dev/null +++ b/pkg/domain/service/place/service.go @@ -0,0 +1,116 @@ +package place + +import ( + "context" + "fmt" + "net/http" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) + Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) + + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + + GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) +} + +type service struct { + placeRepository place.Repository +} + +func New(repo place.Repository) Service { + return &service{ + placeRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { + createdAt := time.Now() + place := &model.PlaceModel{ + Name: name, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.placeRepository.Insert(ctx, masterTx, place) + + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(result), nil +} + +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + + updatedAt := time.Now() + place.Name = name + place.UpdatedAt = &updatedAt + err = s.placeRepository.Update(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + place.UpdatedAt = &updatedAt + place.DeletedAt = &updatedAt + err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return werrors.Stack(err) + } + if place.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. placeID=%v", placeID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.placeRepository.Delete(ctx, masterTx, placeID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { + places, err := s.placeRepository.SelectAll(ctx, masterTx) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceSliceEntity(places), nil +} diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go new file mode 100644 index 0000000..8568631 --- /dev/null +++ b/pkg/domain/service/place/service_test.go @@ -0,0 +1,200 @@ +package place + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place/mock_place" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func after() { +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyResult := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(dummyResult, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "tokyo") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_Update(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.Update(ctx, masterTx, dummyData.ID, "shibuya") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) + +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetAll(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.PlaceModelSlice{ + &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.PlaceModel{ + ID: 2, + Name: "shibuya", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectAll(ctx, masterTx).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetAll(ctx, masterTx) + + assert.NoError(t, err) + assert.NotNil(t, result) +} From 55d4cf14d73ea225710b4e374c00f1d2400e525f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:50:34 +0900 Subject: [PATCH 007/156] =?UTF-8?q?place=20repository:=20create=E3=81=AE?= =?UTF-8?q?=E6=88=BB=E3=82=8A=E5=80=A4=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/place/repository.go | 4 +- pkg/infrastructure/mysql/place/repository.go | 14 +++--- .../mysql/place/repository_test.go | 49 ++++++++----------- 3 files changed, 28 insertions(+), 39 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 3107fa7..bcb7f98 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -6,9 +6,9 @@ import ( "wantum/pkg/infrastructure/mysql/model" ) +// implement: wantum/pkg/infrastructure/mysql/place:placeRepositoryImpletent type Repository interface { - // TODO: intでよくね? - Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) + Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 316f850..8bb6763 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -22,10 +22,10 @@ func New(txManager repository.MasterTxManager) place.Repository { } } -func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも if place == nil { - return nil, werrors.Newf( + return 0, werrors.Newf( errors.New("required data(place) is nil"), werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, @@ -35,7 +35,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } result, err := tx.Exec(` INSERT INTO places( @@ -47,16 +47,15 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } id, err := result.LastInsertId() if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } - place.ID = int(id) - return place, nil + return int(id), nil } func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { @@ -80,7 +79,6 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos WHERE id=? `, place.Name, place.UpdatedAt, - place.DeletedAt, place.ID, ) if err != nil { diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 2e04bc1..372d041 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -56,7 +56,7 @@ func TestInsert(t *testing.T) { UpdatedAt: &date, } - var result *model.PlaceModel + var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.Insert(ctx, masterTx, place) return err @@ -64,21 +64,20 @@ func TestInsert(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) - assert.NotNil(t, result.ID) }) t.Run("failed to insert data. data is nil", func(t *testing.T) { var err error ctx := context.Background() - var result *model.PlaceModel + var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.Insert(ctx, masterTx, nil) return err }) assert.Error(t, err) - assert.Nil(t, result) + assert.Equal(t, 0, result) }) } @@ -106,7 +105,8 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) - assert.Equal(t, "sample place", result.Name) + assert.NotNil(t, result) + // assert.Equal(t, "sample place", result.Name) }) t.Run("failure to update data. data is nil", func(t *testing.T) { @@ -143,22 +143,21 @@ func TestUpDeleteFlag(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newPlace, _ := repo.Insert(ctx, masterTx, place) - assert.Nil(t, newPlace.DeletedAt) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) - newPlace.DeletedAt = &date - newPlace.UpdatedAt = &date - err = repo.UpDeleteFlag(ctx, masterTx, newPlace) + place.ID = newPlaceID + place.DeletedAt = &date + err = repo.UpDeleteFlag(ctx, masterTx, place) if err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, newPlace.ID) + result, _ = repo.SelectByID(ctx, masterTx, place.ID) return nil }) assert.NoError(t, err) - assert.Nil(t, date, result.DeletedAt) + assert.NotNil(t, result.DeletedAt) }) } @@ -175,16 +174,17 @@ func TestDelete(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) - newData.DeletedAt = &date - repo.UpDeleteFlag(ctx, masterTx, newData) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + place.ID = newPlaceID + place.DeletedAt = &date + repo.UpDeleteFlag(ctx, masterTx, place) - err = repo.Delete(ctx, masterTx, result.ID) + err = repo.Delete(ctx, masterTx, place.ID) if err != nil { return err } - result, err = repo.SelectByID(ctx, masterTx, result.ID) + result, err = repo.SelectByID(ctx, masterTx, place.ID) if err == nil { return errors.New("削除されたデータが引っかかった") } @@ -209,9 +209,9 @@ func TestSelectByID(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) - result, err = repo.SelectByID(ctx, masterTx, newData.ID) + result, err = repo.SelectByID(ctx, masterTx, newPlaceID) return err }) @@ -222,19 +222,10 @@ func TestSelectByID(t *testing.T) { t.Run("failure to select by id. id is not exist", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) - place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, - } var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) - repo.Delete(ctx, masterTx, newData.ID) - - result, err = repo.SelectByID(ctx, masterTx, newData.ID) + result, err = repo.SelectByID(ctx, masterTx, -1) return err }) From 2558568612f432ecb415ccd5782959fd38c1831b Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:56:17 +0900 Subject: [PATCH 008/156] =?UTF-8?q?repository=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=AB=E4=BC=B4=E3=81=A3=E3=81=9F=E3=80=81service=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/mock_place/mock_service.go | 4 ++-- pkg/domain/service/place/service.go | 3 ++- pkg/domain/service/place/service_test.go | 13 +------------ 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go index 6a0f129..6a92936 100644 --- a/pkg/domain/service/place/mock_place/mock_service.go +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -36,10 +36,10 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) - ret0, _ := ret[0].(*model.PlaceModel) + ret0, _ := ret[0].(int) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index b454fab..2c50132 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -41,11 +41,12 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name UpdatedAt: &createdAt, } result, err := s.placeRepository.Insert(ctx, masterTx, place) + place.ID = result if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(result), nil + return model.ConvertToPlaceEntity(place), nil } func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 8568631..3aabad2 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -21,7 +21,6 @@ var ( func TestMain(m *testing.M) { before() code := m.Run() - after() os.Exit(code) } @@ -30,23 +29,13 @@ func before() { masterTx = repository.NewMockMasterTx() } -func after() { -} - func TestService_Create(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyResult := &model.PlaceModel{ - ID: 1, - Name: "tokyo", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(dummyResult, nil) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) result, err := service.Create(ctx, masterTx, "tokyo") From 4f7a99cde4d075b3c9984b4058b3f8c1fd47aa2d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 16:06:30 +0900 Subject: [PATCH 009/156] =?UTF-8?q?dry=E3=81=AB=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/place/repository.go | 42 ++++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 8bb6763..d28d673 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -24,14 +24,10 @@ func New(txManager repository.MasterTxManager) place.Repository { func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return 0, werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return 0, err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -60,14 +56,10 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -90,14 +82,10 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -194,3 +182,15 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re } return result, nil } + +func checkIsNil(place *model.PlaceModel) error { + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} From 7d885986142ad141e3042281f5349a9cdafa229a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:06:26 +0900 Subject: [PATCH 010/156] =?UTF-8?q?todo=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/place.go | 1 - pkg/infrastructure/mysql/place/repository.go | 1 + pkg/infrastructure/mysql/place/repository_test.go | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go index 3b1033a..73e4ee0 100644 --- a/pkg/domain/entity/place.go +++ b/pkg/domain/entity/place.go @@ -10,5 +10,4 @@ type Place struct { DeletedAt *time.Time } -// TODO: 使わなさそう type PlaceSlice []*Place diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index d28d673..d6fa0dc 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -142,6 +142,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r &result.UpdatedAt, &result.DeletedAt) if err != nil { + // TODO: no rows無くて大丈夫? tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 372d041..f612765 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -32,6 +32,7 @@ func TestMain(m *testing.M) { // repositoryを作ってもらう func before() { var err error + // TODO: 環境変数とか使いたい気持ちもする db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") if err != nil { log.Fatal("faild to connect db: ", err) From 7e2d9a517826a062542629792aa36b5eb6d02892 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:07:22 +0900 Subject: [PATCH 011/156] add wishCard repository --- pkg/domain/repository/wish_card/repository.go | 19 ++ .../mysql/wish_card/repository.go | 275 ++++++++++++++++ .../mysql/wish_card/repository_test.go | 306 ++++++++++++++++++ 3 files changed, 600 insertions(+) create mode 100644 pkg/domain/repository/wish_card/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card/repository_test.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go new file mode 100644 index 0000000..8667e72 --- /dev/null +++ b/pkg/domain/repository/wish_card/repository.go @@ -0,0 +1,19 @@ +package wish_card + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) + + Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) + SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go new file mode 100644 index 0000000..a8ae757 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -0,0 +1,275 @@ +package wish_card + +import ( + "context" + "database/sql" + "errors" + "strconv" + "strings" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type wishCardRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) wish_card.Repository { + return &wishCardRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { + if err := checkIsNil(wishCard); err != nil { + return 0, err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO wish_cards( + user_id, activity, description, date, created_at, updated_at, category_id, place_id + ) VALUES (?,?,?,?,?,?,?,?) + `, wishCard.UserID, + wishCard.Activity, + wishCard.Description, + wishCard.Date, + wishCard.CreatedAt, + wishCard.UpdatedAt, + wishCard.CategoryID, + wishCard.PlaceID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + return int(id), nil +} + +func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET + user_id=?, + activity=?, + description=?, + date=?, + done_at=?, + updated_at=?, + category_id=?, + place_id=? + WHERE id=? + `, wishCard.UserID, + wishCard.Activity, + wishCard.Description, + wishCard.Date, + wishCard.DoneAt, + wishCard.UpdatedAt, + wishCard.CategoryID, + wishCard.PlaceID, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET updated_at=?, deleted_at=? + WHERE id=? + `, wishCard.UpdatedAt, + wishCard.DeletedAt, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards + WHERE id=? and deleted_at is not null + `, wishCardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE id=? + `, wishCardID) + var result model.WishCardModel + err = row.Scan( + &result.ID, + &result.UserID, + &result.Activity, + &result.Description, + &result.Date, + &result.DoneAt, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + &result.CategoryID, + &result.PlaceID) + if err != nil { + // TODO: これってno rowsでもえらーでおっけえなの? + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + wishCardStrIDs := make([]string, 0, len(wishCardIDs)) + for _, id := range wishCardIDs { + wishCardStrIDs = append(wishCardStrIDs, strconv.Itoa(id)) + } + rows, err := tx.Query(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE id + IN (` + strings.Join(wishCardStrIDs, ",") + `) + `) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.WishCardModelSlice + for rows.Next() { + var record model.WishCardModel + err = rows.Scan( + &record.ID, + &record.UserID, + &record.Activity, + &record.Description, + &record.Date, + &record.DoneAt, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + &record.CategoryID, + &record.PlaceID, + ) + if err != nil { + if err != sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE category_id=? + `, categryID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.WishCardModelSlice + for rows.Next() { + var record model.WishCardModel + err = rows.Scan( + &record.ID, + &record.UserID, + &record.Activity, + &record.Description, + &record.Date, + &record.DoneAt, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + &record.CategoryID, + &record.PlaceID, + ) + if err != nil { + if err != sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func checkIsNil(wishCard *model.WishCardModel) error { + if wishCard == nil { + return werrors.Newf( + errors.New("required data(wishCard) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go new file mode 100644 index 0000000..8a81af9 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -0,0 +1,306 @@ +package wish_card + +import ( + "context" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + wcrepo "wantum/pkg/domain/repository/wish_card" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo wcrepo.Repository +var dummyDate time.Time + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, wishCard) + return err + }) + assert.NoError(t, err) + assert.NotEqual(t, 0, result) + }) + + t.Run("failure to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Equal(t, 0, result) + }) +} + +func TestUpdate(t *testing.T) { + t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, wishCard) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, "なんかしたい", result.Activity) + }) + + t.Run("failure to update data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) + +} + +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + wishCard.DeletedAt = &dummyDate + err = repo.UpDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return err + } + result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result.DeletedAt) + }) + + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to up delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + wishCard.ID = newID + wishCard.DeletedAt = &dummyDate + repo.UpDeleteFlag(ctx, masterTx, wishCard) + + err = repo.Delete(ctx, masterTx, wishCard.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, wishCard.ID) + if err == nil { + return errors.New("削除されたデータが見つかった") + } + return nil + }) + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + result, err = repo.SelectByID(ctx, masterTx, newID) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select data. data is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.SelectByID(ctx, masterTx, -1) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByIDs(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + + ids := []int{1, 2, 3} + + var result model.WishCardModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByIDs(ctx, masterTx, ids) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 3, len(result)) + }) +} + +func TestCategoryID(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result model.WishCardModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + repo.Insert(ctx, masterTx, wishCard) + + result, err = repo.SelectByCategoryID(ctx, masterTx, 1) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("success to select data. category is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + _, err = repo.SelectByCategoryID(ctx, masterTx, -1) + return err + }) + assert.NoError(t, err) + }) +} From 96ea268bb0b81bb2f5deece0f8406909a1cf09b9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:15:39 +0900 Subject: [PATCH 012/156] =?UTF-8?q?ids=E3=81=AE=E5=A4=89=E6=8F=9B=E3=81=AF?= =?UTF-8?q?service=E3=81=A7=E3=82=84=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/wish_card/repository.go | 2 +- pkg/infrastructure/mysql/wish_card/repository.go | 10 +++------- pkg/infrastructure/mysql/wish_card/repository_test.go | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go index 8667e72..8b64de8 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wish_card/repository.go @@ -14,6 +14,6 @@ type Repository interface { UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) - SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) } diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go index a8ae757..e03b7bd 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "errors" - "strconv" "strings" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wish_card" @@ -171,21 +170,18 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT return &result, nil } -func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - wishCardStrIDs := make([]string, 0, len(wishCardIDs)) - for _, id := range wishCardIDs { - wishCardStrIDs = append(wishCardStrIDs, strconv.Itoa(id)) - } + rows, err := tx.Query(` SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id FROM wish_cards WHERE id - IN (` + strings.Join(wishCardStrIDs, ",") + `) + IN (` + strings.Join(wishCardIDs, ",") + `) `) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go index 8a81af9..a83c59b 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -253,7 +253,7 @@ func TestSelectByIDs(t *testing.T) { var err error ctx := context.Background() - ids := []int{1, 2, 3} + ids := []string{"1", "2", "3"} var result model.WishCardModelSlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { From 34f6ba7c55e6a9d7a7218e840d1eda8fbc5b88b7 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 21:56:31 +0900 Subject: [PATCH 013/156] move mock repository of place --- pkg/domain/service/place/service.go | 5 +++-- pkg/domain/service/place/service_test.go | 2 +- .../mysql/place/mock_place/mock_repository.go} | 0 3 files changed, 4 insertions(+), 3 deletions(-) rename pkg/{domain/service/place/mock_place/mock_service.go => infrastructure/mysql/place/mock_place/mock_repository.go} (100%) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 2c50132..3b7a3e7 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -41,14 +41,15 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name UpdatedAt: &createdAt, } result, err := s.placeRepository.Insert(ctx, masterTx, place) - place.ID = result - if err != nil { return nil, werrors.Stack(err) } + place.ID = result return model.ConvertToPlaceEntity(place), nil } +// NOTE: 空値があった時、元データが消滅する。 +// NOTE: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 3aabad2..62b5b11 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/infrastructure/mysql/place/mock_place" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go similarity index 100% rename from pkg/domain/service/place/mock_place/mock_service.go rename to pkg/infrastructure/mysql/place/mock_place/mock_repository.go From 952724a0f6a8ad58293469da4d1035a625ff3b23 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:03:16 +0900 Subject: [PATCH 014/156] add down delete flag in repository of place --- pkg/domain/repository/place/repository.go | 1 + .../mysql/place/mock_place/mock_repository.go | 14 ++++ pkg/infrastructure/mysql/place/repository.go | 33 ++++++++++ .../mysql/place/repository_test.go | 66 +++++++++++++++---- 4 files changed, 101 insertions(+), 13 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index bcb7f98..1ea17e9 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -14,6 +14,7 @@ type Repository interface { Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) diff --git a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go index 6a92936..011273d 100644 --- a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go +++ b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go @@ -92,6 +92,20 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interfac return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, place) } +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, place) +} + // SelectByID mocks base method func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { m.ctrl.T.Helper() diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index d6fa0dc..2b8f452 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -85,6 +85,14 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx if err := checkIsNil(place); err != nil { return err } + if place.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -106,6 +114,31 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx return nil } +func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + if err := checkIsNil(place); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET updated_at=?, deleted_at=? + WHERE id=? + `, place.UpdatedAt, + nil, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index f612765..12983dd 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -160,6 +160,59 @@ func TestUpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result.DeletedAt) }) + + t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + + place.ID = newPlaceID + err = repo.UpDeleteFlag(ctx, masterTx, place) + return err + }) + + assert.Error(t, err) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + + place.ID = newPlaceID + place.DeletedAt = nil + err = repo.DownDeleteFlag(ctx, masterTx, place) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, place.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) } func TestDelete(t *testing.T) { @@ -220,19 +273,6 @@ func TestSelectByID(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select by id. id is not exist", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *model.PlaceModel - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.SelectByID(ctx, masterTx, -1) - return err - }) - - assert.Error(t, err) - assert.Nil(t, result) - }) } func TestSelectAll(t *testing.T) { From 1f20699bb11540a2b26be393e7ef03de896588da Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:11:30 +0900 Subject: [PATCH 015/156] add down flag in repository of wish_card --- pkg/domain/repository/wish_card/repository.go | 3 + .../mock_wish_card/mock_repository.go | 152 ++++++++++++++++++ .../mysql/wish_card/repository.go | 32 ++++ .../mysql/wish_card/repository_test.go | 101 ++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go index 8b64de8..5196dfd 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wish_card/repository.go @@ -12,8 +12,11 @@ type Repository interface { Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) + // TODO: SelectByCategoryIDsあっても良いかもと思ったが? } diff --git a/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go b/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go new file mode 100644 index 0000000..0524c60 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go @@ -0,0 +1,152 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/wish_card/repository.go + +// Package mock_wish_card is a generated GoMock package. +package mock_wish_card + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCard) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCard) +} + +// Update mocks base method +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// Update indicates an expected call of Update +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, wishCard) +} + +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, wishCard) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCardID) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*model.WishCardModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, wishCardID) +} + +// SelectByIDs mocks base method +func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByIDs", ctx, masterTx, wishCardIDs) + ret0, _ := ret[0].(model.WishCardModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByIDs indicates an expected call of SelectByIDs +func (mr *MockRepositoryMockRecorder) SelectByIDs(ctx, masterTx, wishCardIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByIDs", reflect.TypeOf((*MockRepository)(nil).SelectByIDs), ctx, masterTx, wishCardIDs) +} + +// SelectByCategoryID mocks base method +func (m *MockRepository) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByCategoryID", ctx, masterTx, categryID) + ret0, _ := ret[0].(model.WishCardModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByCategoryID indicates an expected call of SelectByCategoryID +func (mr *MockRepositoryMockRecorder) SelectByCategoryID(ctx, masterTx, categryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByCategoryID", reflect.TypeOf((*MockRepository)(nil).SelectByCategoryID), ctx, masterTx, categryID) +} diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go index e03b7bd..8a72e65 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -101,6 +101,14 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste if err := checkIsNil(wishCard); err != nil { return err } + if wishCard.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -121,6 +129,30 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste return nil } +func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET updated_at=?, deleted_at=? + WHERE id=? + `, wishCard.UpdatedAt, + nil, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go index a83c59b..1cc589a 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -84,6 +84,36 @@ func TestInsert(t *testing.T) { func TestUpdate(t *testing.T) { t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, wishCard) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, "なんかしたい", result.Activity) + }) + + t.Run("success to update data. done at is null", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ @@ -158,6 +188,74 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) + t.Run("failure to up delete flag. flag is nil", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + err = repo.UpDeleteFlag(ctx, masterTx, wishCard) + return err + }) + assert.Error(t, err) + }) + + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + err = repo.DownDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return err + } + result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) + return nil + }) + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { var err error ctx := context.Background() @@ -290,6 +388,9 @@ func TestCategoryID(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) + for _, row := range result { + assert.Equal(t, 1, row.CategoryID) + } }) t.Run("success to select data. category is not exist", func(t *testing.T) { From 3aa8be7ad9d4d165628a26b5608837572270ce07 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:21:13 +0900 Subject: [PATCH 016/156] add down flag in service of place --- pkg/domain/service/place/service.go | 16 +++++++++++++++ pkg/domain/service/place/service_test.go | 26 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 3b7a3e7..564e552 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -18,6 +18,7 @@ type Service interface { Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) @@ -81,6 +82,21 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx return model.ConvertToPlaceEntity(place), nil } +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + place.UpdatedAt = &updatedAt + place.DeletedAt = nil + err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 62b5b11..a632819 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -88,6 +88,32 @@ func TestService_UpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) } func TestService_Delete(t *testing.T) { From 2a45cbe955f7c56445e24f8bfb60aea2c85eb168 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:25:47 +0900 Subject: [PATCH 017/156] add service of wish_card --- pkg/domain/service/wish_card/service.go | 158 ++++++++++ pkg/domain/service/wish_card/service_test.go | 308 +++++++++++++++++++ 2 files changed, 466 insertions(+) create mode 100644 pkg/domain/service/wish_card/service.go create mode 100644 pkg/domain/service/wish_card/service_test.go diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wish_card/service.go new file mode 100644 index 0000000..f613ac1 --- /dev/null +++ b/pkg/domain/service/wish_card/service.go @@ -0,0 +1,158 @@ +package wish_card + +import ( + "context" + "fmt" + "net/http" + "strconv" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) + Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) + + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + + GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) + GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) +} + +type service struct { + wishCardRepository wish_card.Repository +} + +func New(repo wish_card.Repository) Service { + return &service{ + wishCardRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + createdAt := time.Now() + wishCard := &model.WishCardModel{ + UserID: userID, + Activity: activity, + Description: description, + Date: date, + CategoryID: categoryID, + PlaceID: placeID, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard) + if err != nil { + return nil, err + } + wishCard.ID = result + return model.ConvertToWishCardEntiry(wishCard), nil +} + +// NOTE: 空値があった時、元データが消滅する。 +// NOTE: リクエストは、全フィールド埋める or 差分だけ +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.Activity = activity + wishCard.Description = description + wishCard.Date = date + wishCard.DoneAt = doneAt + wishCard.CategoryID = categoryID + wishCard.PlaceID = placeID + wishCard.UpdatedAt = &updatedAt + + err = s.wishCardRepository.Update(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.UpdatedAt = &updatedAt + wishCard.DeletedAt = &updatedAt + err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.UpdatedAt = &updatedAt + wishCard.DeletedAt = nil + err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + if wishCard.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. wishCardID=%v", wishCardID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.wishCardRepository.Delete(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { + idList := make([]string, 0, len(wishCardIDs)) + for _, id := range wishCardIDs { + idList = append(idList, strconv.Itoa(id)) + } + wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, idList) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardSliceEntity(wishCards), nil +} + +func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { + wishCards, err := s.wishCardRepository.SelectByCategoryID(ctx, masterTx, categoryID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardSliceEntity(wishCards), nil +} diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wish_card/service_test.go new file mode 100644 index 0000000..5c009e8 --- /dev/null +++ b/pkg/domain/service/wish_card/service_test.go @@ -0,0 +1,308 @@ +package wish_card + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/infrastructure/mysql/wish_card/mock_wish_card" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "activity", "desc", &dummyDate, 1, 1, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 1, result.ID) +} + +func TestService_Update(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.Update(ctx, masterTx, 1, "activity", "desc", &dummyDate, &dummyDate, 1, 1, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, 1) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up a delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByIDs(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.WishCardModelSlice{ + &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.WishCardModel{ + ID: 2, + UserID: 1, + Activity: "activity2", + Description: "desc2", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 2, + PlaceID: 2, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByIDs(ctx, masterTx, []string{"1", "2"}).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 2, len(result)) +} + +func TestService_GetByCategoryID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.WishCardModelSlice{ + &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.WishCardModel{ + ID: 2, + UserID: 1, + Activity: "activity2", + Description: "desc2", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 2, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByCategoryID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByCategoryID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 2, len(result)) +} From 57a9d5ff2c25dae19a1b197bae10183bc76b2a82 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 11:25:34 +0900 Subject: [PATCH 018/156] add entity and model of tag --- pkg/domain/entity/Tag.go | 13 +++++ pkg/infrastructure/mysql/model/tag.go | 40 ++++++++++++++++ pkg/infrastructure/mysql/model/tag_test.go | 55 ++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 pkg/domain/entity/Tag.go create mode 100644 pkg/infrastructure/mysql/model/tag.go create mode 100644 pkg/infrastructure/mysql/model/tag_test.go diff --git a/pkg/domain/entity/Tag.go b/pkg/domain/entity/Tag.go new file mode 100644 index 0000000..0b394cb --- /dev/null +++ b/pkg/domain/entity/Tag.go @@ -0,0 +1,13 @@ +package entity + +import "time" + +type Tag struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type TagSlice []*Tag diff --git a/pkg/infrastructure/mysql/model/tag.go b/pkg/infrastructure/mysql/model/tag.go new file mode 100644 index 0000000..dd06839 --- /dev/null +++ b/pkg/infrastructure/mysql/model/tag.go @@ -0,0 +1,40 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type TagModel struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type TagModelSlice []*TagModel + +func ConvertToTagEntity(tag *TagModel) *entity.Tag { + if tag == nil { + return nil + } + return &entity.Tag{ + ID: tag.ID, + Name: tag.Name, + CreatedAt: tag.CreatedAt, + UpdatedAt: tag.UpdatedAt, + DeletedAt: tag.DeletedAt, + } +} + +func ConvertToTagSliceEntity(tags TagModelSlice) entity.TagSlice { + if tags == nil { + return nil + } + result := make(entity.TagSlice, 0, len(tags)) + for _, tag := range tags { + result = append(result, ConvertToTagEntity(tag)) + } + return result +} diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go new file mode 100644 index 0000000..7cd2084 --- /dev/null +++ b/pkg/infrastructure/mysql/model/tag_test.go @@ -0,0 +1,55 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToTagEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) + testData := &TagModel{ + ID: 1, + Name: "disney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + result := ConvertToTagEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.Tag{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToTagEntity(nil) + assert.Nil(t, result) + }) +} +func TestConvertToTagSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) + data := &TagModel{ + ID: 1, + Name: "disney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + testData := TagModelSlice{data, data} + + result := ConvertToTagSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.TagSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToTagSliceEntity(nil) + assert.Nil(t, result) + }) +} From ffac4e280bda9ede4a5259e2e20e2a4cca9ce769 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:20:06 +0900 Subject: [PATCH 019/156] move mock of repository --- .../repository}/place/mock_place/mock_repository.go | 0 .../repository}/wish_card/mock_wish_card/mock_repository.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename pkg/{infrastructure/mysql => domain/repository}/place/mock_place/mock_repository.go (100%) rename pkg/{infrastructure/mysql => domain/repository}/wish_card/mock_wish_card/mock_repository.go (100%) diff --git a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go similarity index 100% rename from pkg/infrastructure/mysql/place/mock_place/mock_repository.go rename to pkg/domain/repository/place/mock_place/mock_repository.go diff --git a/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go b/pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go similarity index 100% rename from pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go rename to pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go From d7746c37e6fb05e4a02eb5ae3ad5cb8cbb0eef29 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:20:40 +0900 Subject: [PATCH 020/156] add tag repository --- pkg/domain/repository/tag/repository.go | 19 ++ pkg/infrastructure/mysql/tag/repository.go | 241 +++++++++++++++ .../mysql/tag/repository_test.go | 276 ++++++++++++++++++ 3 files changed, 536 insertions(+) create mode 100644 pkg/domain/repository/tag/repository.go create mode 100644 pkg/infrastructure/mysql/tag/repository.go create mode 100644 pkg/infrastructure/mysql/tag/repository_test.go diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go new file mode 100644 index 0000000..44d3246 --- /dev/null +++ b/pkg/domain/repository/tag/repository.go @@ -0,0 +1,19 @@ +package tag + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + + SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) + SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) + SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go new file mode 100644 index 0000000..64c3ba8 --- /dev/null +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -0,0 +1,241 @@ +package tag + +import ( + "context" + "database/sql" + "errors" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type tagRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) tag.Repository { + return &tagRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { + if err := checkIsNil(tag); err != nil { + return 0, err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO tags(name, created_at, updated_at) + VALUES (?,?,?) + `, tag.Name, + tag.CreatedAt, + tag.UpdatedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + return int(id), nil +} + +func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + // NOTE: nilで降りてきた用対策。いらないかも + if err := checkIsNil(tag); err != nil { + return err + } + if tag.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE tags + SET updated_at=?, deleted_at=? + WHERE id=? + `, tag.UpdatedAt, + tag.DeletedAt, + tag.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + if err := checkIsNil(tag); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE tags + SET updated_at=?, deleted_at=? + WHERE id=? + `, tag.UpdatedAt, + nil, + tag.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM tags + WHERE id=? and deleted_at is not null + `, tagID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM tags + WHERE id=? + `, tagID) + var result model.TagModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT tags.id, tags.name, tags.created_at, tags.updated_at, tags.deleted_at + FROM wish_cards_tags as r + INNER JOIN tags ON tags.id = r.tag_id + WHERE r.wish_card_id=? + `, wishCardID) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.TagModelSlice + for rows.Next() { + var record model.TagModel + err = rows.Scan( + &record.ID, + &record.Name, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT tags.id, tags.name, tags.created_at, tags.updated_at, tags.deleted_at + FROM memories_tags as r + INNER JOIN tags ON tags.id = r.tag_id + WHERE r.memory_id=? + `, memoryID) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.TagModelSlice + for rows.Next() { + var record model.TagModel + err = rows.Scan( + &record.ID, + &record.Name, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func checkIsNil(tag *model.TagModel) error { + if tag == nil { + return werrors.Newf( + errors.New("required data(tag) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go new file mode 100644 index 0000000..d8e53c7 --- /dev/null +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -0,0 +1,276 @@ +package tag + +import ( + "context" + "crypto/rand" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var ( + db *sql.DB + txManager repository.MasterTxManager + repo tag.Repository + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +// repositoryを作ってもらう +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +// dbのコネクションを閉じる +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, tag) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failed to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + + assert.Error(t, err) + assert.Equal(t, 0, result) + }) +} + +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + + tag.ID = newTagID + tag.DeletedAt = &dummyDate + err = repo.UpDeleteFlag(ctx, masterTx, tag) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + return nil + }) + + assert.NoError(t, err) + assert.NotNil(t, result.DeletedAt) + }) + + t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + ID: 1, + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, tag) + return err + }) + + assert.Error(t, err) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + ID: 1, + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + tag.DeletedAt = nil + err = repo.DownDeleteFlag(ctx, masterTx, tag) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + tag.ID = newTagID + tag.DeletedAt = &dummyDate + repo.UpDeleteFlag(ctx, masterTx, tag) + + err = repo.Delete(ctx, masterTx, tag.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, tag.ID) + if err == nil { + return errors.New("削除されたデータが引っかかった") + } + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select by id", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + + result, err = repo.SelectByID(ctx, masterTx, newTagID) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestSelectByWishCardID(t *testing.T) { + t.Run("success to select by wishCardID", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.TagModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByWishCardID(ctx, masterTx, 4) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestSelectByMemoryID(t *testing.T) { + t.Run("success to select by wishCardID", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.TagModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByMemoryID(ctx, masterTx, 4) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func makeRandomStr(digit uint32) (string, error) { + const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + + b := make([]byte, digit) + if _, err := rand.Read(b); err != nil { + return "", errors.New("unexpected error...") + } + + var result string + for _, v := range b { + result += string(letters[int(v)%len(letters)]) + } + return result, nil +} From e4b7191adde86d0aa38ca02f63e41a6e9ec2ace9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:54:27 +0900 Subject: [PATCH 021/156] add service of tag --- .../tag/mock_tag/mock_repository.go | 138 +++++++++++ pkg/domain/service/tag/service.go | 124 ++++++++++ pkg/domain/service/tag/service_test.go | 218 ++++++++++++++++++ 3 files changed, 480 insertions(+) create mode 100644 pkg/domain/repository/tag/mock_tag/mock_repository.go create mode 100644 pkg/domain/service/tag/service.go create mode 100644 pkg/domain/service/tag/service_test.go diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go new file mode 100644 index 0000000..f2f0c66 --- /dev/null +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -0,0 +1,138 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/tag/repository.go + +// Package mock_tag is a generated GoMock package. +package mock_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, tag) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, tag) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tag) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, tag) +} + +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tag) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, tag) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, tagID) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, tagID) + ret0, _ := ret[0].(*model.TagModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, tagID) +} + +// SelectByWishCardID mocks base method +func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(model.TagModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByWishCardID indicates an expected call of SelectByWishCardID +func (mr *MockRepositoryMockRecorder) SelectByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByWishCardID", reflect.TypeOf((*MockRepository)(nil).SelectByWishCardID), ctx, masterTx, wishCardID) +} + +// SelectByMemoryID mocks base method +func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByMemoryID", ctx, masterTx, memoryID) + ret0, _ := ret[0].(model.TagModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByMemoryID indicates an expected call of SelectByMemoryID +func (mr *MockRepositoryMockRecorder) SelectByMemoryID(ctx, masterTx, memoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByMemoryID", reflect.TypeOf((*MockRepository)(nil).SelectByMemoryID), ctx, masterTx, memoryID) +} diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go new file mode 100644 index 0000000..4609b67 --- /dev/null +++ b/pkg/domain/service/tag/service.go @@ -0,0 +1,124 @@ +package tag + +import ( + "context" + "fmt" + "net/http" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + + GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) + GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) +} + +type service struct { + tagRepository tag.Repository +} + +func New(repo tag.Repository) Service { + return &service{ + tagRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + createdAt := time.Now() + tag := &model.TagModel{ + Name: name, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.tagRepository.Insert(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + tag.ID = result + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + tag.UpdatedAt = &updatedAt + tag.DeletedAt = &updatedAt + err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + tag.UpdatedAt = &updatedAt + tag.DeletedAt = nil + err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return werrors.Stack(err) + } + if tag.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. tagID=%v", tagID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.tagRepository.Delete(ctx, masterTx, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { + tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagSliceEntity(tags), nil +} + +func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { + tags, err := s.tagRepository.SelectByMemoryID(ctx, masterTx, memoryID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagSliceEntity(tags), nil +} diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go new file mode 100644 index 0000000..6d19c54 --- /dev/null +++ b/pkg/domain/service/tag/service_test.go @@ -0,0 +1,218 @@ +package tag + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag/mock_tag" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "sample tag") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "sample tag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "samleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByWishCardID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByWishCardID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByMemoryID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByMemoryID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} From f98d82a899f360057026dc8e5f8f4cd3b586a06e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:56:16 +0900 Subject: [PATCH 022/156] change comment --- pkg/domain/service/place/service.go | 2 +- pkg/domain/service/place/service_test.go | 2 +- pkg/domain/service/wish_card/service.go | 2 +- pkg/domain/service/wish_card/service_test.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 564e552..5f21689 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -50,7 +50,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name } // NOTE: 空値があった時、元データが消滅する。 -// NOTE: リクエストは、全フィールド埋める or 差分だけ +// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index a632819..c6abf04 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place/mock_place" "wantum/pkg/infrastructure/mysql/model" - "wantum/pkg/infrastructure/mysql/place/mock_place" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wish_card/service.go index f613ac1..54b88b4 100644 --- a/pkg/domain/service/wish_card/service.go +++ b/pkg/domain/service/wish_card/service.go @@ -57,7 +57,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti } // NOTE: 空値があった時、元データが消滅する。 -// NOTE: リクエストは、全フィールド埋める or 差分だけ +// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wish_card/service_test.go index 5c009e8..3f731d9 100644 --- a/pkg/domain/service/wish_card/service_test.go +++ b/pkg/domain/service/wish_card/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card/mock_wish_card" "wantum/pkg/infrastructure/mysql/model" - "wantum/pkg/infrastructure/mysql/wish_card/mock_wish_card" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" From 6cf7739473127c0ee1450f56d34a7374cab88186 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:57:10 +0900 Subject: [PATCH 023/156] add tag in wishCard entity --- pkg/domain/entity/wish_card.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go index db2613e..9f37bbb 100644 --- a/pkg/domain/entity/wish_card.go +++ b/pkg/domain/entity/wish_card.go @@ -12,8 +12,8 @@ type WishCard struct { CreatedAt *time.Time UpdatedAt *time.Time DeletedAt *time.Time - Category interface{} // TODO: 未実装 Place *Place + Tags TagSlice } type WishCardSlice []*WishCard From 71a5d9d9b40ca75fa7c64d62ddba97014cab48cd Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 12:22:57 +0900 Subject: [PATCH 024/156] usecase --- pkg/api/usecase/wish_card/interactor.go | 201 ++++++++++ pkg/api/usecase/wish_card/interactor_test.go | 375 ++++++++++++++++++ .../tag/mock_tag/mock_repository.go | 15 + pkg/domain/repository/tag/repository.go | 1 + .../mock_wish_card_tag/mock_repository.go | 91 +++++ .../repository/wish_card_tag/repository.go | 13 + .../service/place/mock_place/mock_service.go | 140 +++++++ .../service/tag/mock_tag/mock_service.go | 155 ++++++++ pkg/domain/service/tag/service.go | 9 + .../wish_card/mock_wish_card/mock_service.go | 156 ++++++++ .../mock_wish_card_tag/mock_service.go | 91 +++++ pkg/domain/service/wish_card_tag/service.go | 57 +++ pkg/infrastructure/mysql/model/wish_card.go | 3 + pkg/infrastructure/mysql/tag/repository.go | 26 ++ .../mysql/tag/repository_test.go | 40 ++ .../mysql/wish_card_tag/repository.go | 100 +++++ .../mysql/wish_card_tag/repository_test.go | 96 +++++ 17 files changed, 1569 insertions(+) create mode 100644 pkg/api/usecase/wish_card/interactor.go create mode 100644 pkg/api/usecase/wish_card/interactor_test.go create mode 100644 pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go create mode 100644 pkg/domain/repository/wish_card_tag/repository.go create mode 100644 pkg/domain/service/place/mock_place/mock_service.go create mode 100644 pkg/domain/service/tag/mock_tag/mock_service.go create mode 100644 pkg/domain/service/wish_card/mock_wish_card/mock_service.go create mode 100644 pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go create mode 100644 pkg/domain/service/wish_card_tag/service.go create mode 100644 pkg/infrastructure/mysql/wish_card_tag/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card_tag/repository_test.go diff --git a/pkg/api/usecase/wish_card/interactor.go b/pkg/api/usecase/wish_card/interactor.go new file mode 100644 index 0000000..7ecce52 --- /dev/null +++ b/pkg/api/usecase/wish_card/interactor.go @@ -0,0 +1,201 @@ +package wish_card + +import ( + "context" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place" + "wantum/pkg/domain/service/tag" + "wantum/pkg/domain/service/wish_card" + "wantum/pkg/domain/service/wish_card_tag" + "wantum/pkg/werrors" +) + +type Interactor interface { + CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) + UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) + DeleteWishCardByID(ctx context.Context, wishCardID int) error + GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) + GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) +} + +type interactor struct { + masterTxManager repository.MasterTxManager + wishCardService wish_card.Service + tagService tag.Service + placeService place.Service + wishCardsTagsService wish_card_tag.Service +} + +func New(masterTxManager repository.MasterTxManager, wishCardService wish_card.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wish_card_tag.Service) Interactor { + return &interactor{ + masterTxManager: masterTxManager, + wishCardService: wishCardService, + tagService: tagService, + placeService: placeService, + wishCardsTagsService: wishCardsTagsService, + } +} + +func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { + + var newWishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + place, err := i.placeService.Create(ctx, masterTx, place) + if err != nil { + // TODO: placeがすでにあったら辛いね... + return werrors.Stack(err) + } + newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, userID, categoryID, place.ID) + if err != nil { + return werrors.Stack(err) + } + newWishCard.Place = place + + var tagIDs []int + for _, tagName := range tags { + var tag *entity.Tag + tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + if tag == nil { + tag, err = i.tagService.Create(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } + } + newWishCard.Tags = append(newWishCard.Tags, tag) + tagIDs = append(tagIDs, tag.ID) + } + + err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, newWishCard.ID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return newWishCard, nil +} + +func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { + var wishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + place, err := i.placeService.Create(ctx, masterTx, place) + if err != nil { + // TODO: placeがすでにあったら辛いね... + // bynameで撮ってきて、なかったらcreateかな...ぐぬぬ + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + + var tagIDs []int + for _, tagName := range tags { + var tag *entity.Tag + tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + if tag == nil { + tag, err = i.tagService.Create(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } + } + tagIDs = append(tagIDs, tag.ID) + wishCard.Tags = append(wishCard.Tags, tag) + } + + err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } + err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, wishCard.ID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) error { + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = i.wishCardService.Delete(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + + err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) { + var wishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags = tags + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) { + var wishCards entity.WishCardSlice + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCards, err = i.wishCardService.GetByCategoryID(ctx, masterTx, categoryID) + if err != nil { + return werrors.Stack(err) + } + for _, wishCard := range wishCards { + place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags = tags + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCards, nil +} diff --git a/pkg/api/usecase/wish_card/interactor_test.go b/pkg/api/usecase/wish_card/interactor_test.go new file mode 100644 index 0000000..3dea49d --- /dev/null +++ b/pkg/api/usecase/wish_card/interactor_test.go @@ -0,0 +1,375 @@ +package wish_card + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place/mock_place" + "wantum/pkg/domain/service/tag/mock_tag" + "wantum/pkg/domain/service/wish_card/mock_wish_card" + "wantum/pkg/domain/service/wish_card_tag/mock_wish_card_tag" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + masterTxManager repository.MasterTxManager +) + +var dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + +var dummyTag1 = entity.Tag{ + ID: 1, + Name: "tag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, +} + +var dummyTag2 = entity.Tag{ + ID: 2, + Name: "tag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, +} + +var dummyTagSlice = entity.TagSlice{ + &dummyTag1, + &dummyTag2, +} + +var dummyPlace = entity.Place{ + ID: 1, + Name: "samplePlace", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, +} + +// var dummyWishCard = entity.WishCard{ +// ID: 1, +// UserID: 1, +// Activity: "sampleActivity", +// Description: "sampleDescription", +// Date: &dummyDate, +// DoneAt: nil, +// CreatedAt: &dummyDate, +// UpdatedAt: &dummyDate, +// DeletedAt: &dummyDate, +// Place: &dummyPlace, +// Tags: entity.TagSlice{ +// &dummyTag1, +// &dummyTag2, +// }, +// } + +// var dummyWishCards = entity.WishCardSlice{ +// &dummyWishCard, +// &entity.WishCard{ +// ID: 2, +// UserID: 1, +// Activity: "sampleActivity", +// Description: "sampleDescription", +// Date: &dummyDate, +// DoneAt: nil, +// CreatedAt: &dummyDate, +// UpdatedAt: &dummyDate, +// DeletedAt: &dummyDate, +// Place: &dummyPlace, +// Tags: entity.TagSlice{ +// &dummyTag1, +// &dummyTag2, +// }, +// }, +// } + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + masterTx = repository.NewMockMasterTx() + masterTxManager = repository.NewMockMasterTxManager(masterTx) +} + +func after() {} + +func TestInteractor_CreateNewWishCard(t *testing.T) { + t.Run("success to create data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + tags := []string{"tag1", "tag2"} + result, err := interactor.CreateNewWishCard(ctx, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, 1, tags) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.Equal(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_UpdateWishCard(t *testing.T) { + t.Run("success to update data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + tags := []string{"tag1", "tag2"} + result, err := interactor.UpdateWishCard(ctx, 1, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, &dummyDate, 1, tags) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_DeleteWishCard(t *testing.T) { + t.Run("success to delete data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + + tagService := mock_tag.NewMockService(ctrl) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + err := interactor.DeleteWishCardByID(ctx, 1) + + assert.NoError(t, err) + }) +} + +func TestInteractor_GetByID(t *testing.T) { + t.Run("success to get data by id.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + result, err := interactor.GetByID(ctx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_GetByCategoryID(t *testing.T) { + t.Run("success to get data by categoryID.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard1 := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + dummyWishCard2 := entity.WishCard{ + ID: 2, + UserID: 2, + Activity: "sampleActivity2", + Description: "sampleDescription2", + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + dummyWishCards := entity.WishCardSlice{ + &dummyWishCard1, + &dummyWishCard2, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyWishCards, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil).Times(2) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + wishCards, err := interactor.GetByCategoryID(ctx, 1) + + assert.NoError(t, err) + assert.NotNil(t, wishCards) + assert.Equal(t, 2, len(wishCards)) + + assert.Equal(t, "samplePlace", wishCards[0].Place.Name) + assert.Equal(t, "samplePlace", wishCards[1].Place.Name) + + assert.Equal(t, "tag1", wishCards[0].Tags[0].Name) + assert.Equal(t, 2, len(wishCards[0].Tags)) + assert.Equal(t, "tag1", wishCards[1].Tags[0].Name) + assert.Equal(t, 2, len(wishCards[1].Tags)) + }) +} diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index f2f0c66..a906cf0 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -107,6 +107,21 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, tagID) } +// SelectByName mocks base method +func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByName", ctx, masterTx, name) + ret0, _ := ret[0].(*model.TagModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByName indicates an expected call of SelectByName +func (mr *MockRepositoryMockRecorder) SelectByName(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByName", reflect.TypeOf((*MockRepository)(nil).SelectByName), ctx, masterTx, name) +} + // SelectByWishCardID mocks base method func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { m.ctrl.T.Helper() diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 44d3246..9489bd1 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -14,6 +14,7 @@ type Repository interface { Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) + SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) } diff --git a/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go b/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go new file mode 100644 index 0000000..d7871dc --- /dev/null +++ b/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go @@ -0,0 +1,91 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/wish_card_tag/repository.go + +// Package mock_wish_card_tag is a generated GoMock package. +package mock_wish_card_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCardID, tagID) +} + +// BulkInsert mocks base method +func (m *MockRepository) BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BulkInsert", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(error) + return ret0 +} + +// BulkInsert indicates an expected call of BulkInsert +func (mr *MockRepositoryMockRecorder) BulkInsert(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BulkInsert", reflect.TypeOf((*MockRepository)(nil).BulkInsert), ctx, masterTx, wishCardID, tagIDs) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCardID, tagID) +} + +// DeleteByWishCardID mocks base method +func (m *MockRepository) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteByWishCardID indicates an expected call of DeleteByWishCardID +func (mr *MockRepositoryMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockRepository)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) +} diff --git a/pkg/domain/repository/wish_card_tag/repository.go b/pkg/domain/repository/wish_card_tag/repository.go new file mode 100644 index 0000000..e2a69c3 --- /dev/null +++ b/pkg/domain/repository/wish_card_tag/repository.go @@ -0,0 +1,13 @@ +package wish_card_tag + +import ( + "context" + "wantum/pkg/domain/repository" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error +} diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go new file mode 100644 index 0000000..0678629 --- /dev/null +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -0,0 +1,140 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/place/service.go + +// Package mock_place is a generated GoMock package. +package mock_place + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, name) +} + +// Update mocks base method +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, placeID, name) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, placeID, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, placeID, name) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, placeID) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, placeID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, placeID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, placeID) +} + +// GetAll mocks base method +func (m *MockService) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAll", ctx, masterTx) + ret0, _ := ret[0].(entity.PlaceSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetAll indicates an expected call of GetAll +func (mr *MockServiceMockRecorder) GetAll(ctx, masterTx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockService)(nil).GetAll), ctx, masterTx) +} diff --git a/pkg/domain/service/tag/mock_tag/mock_service.go b/pkg/domain/service/tag/mock_tag/mock_service.go new file mode 100644 index 0000000..6426d14 --- /dev/null +++ b/pkg/domain/service/tag/mock_tag/mock_service.go @@ -0,0 +1,155 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/tag/service.go + +// Package mock_tag is a generated GoMock package. +package mock_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, name) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, tagID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, tagID) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, tagID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, tagID) +} + +// GetByName mocks base method +func (m *MockService) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByName", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByName indicates an expected call of GetByName +func (mr *MockServiceMockRecorder) GetByName(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByName", reflect.TypeOf((*MockService)(nil).GetByName), ctx, masterTx, name) +} + +// GetByWishCardID mocks base method +func (m *MockService) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(entity.TagSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByWishCardID indicates an expected call of GetByWishCardID +func (mr *MockServiceMockRecorder) GetByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByWishCardID", reflect.TypeOf((*MockService)(nil).GetByWishCardID), ctx, masterTx, wishCardID) +} + +// GetByMemoryID mocks base method +func (m *MockService) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByMemoryID", ctx, masterTx, memoryID) + ret0, _ := ret[0].(entity.TagSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByMemoryID indicates an expected call of GetByMemoryID +func (mr *MockServiceMockRecorder) GetByMemoryID(ctx, masterTx, memoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByMemoryID", reflect.TypeOf((*MockService)(nil).GetByMemoryID), ctx, masterTx, memoryID) +} diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 4609b67..e614149 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -20,6 +20,7 @@ type Service interface { Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) } @@ -107,6 +108,14 @@ func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tag return model.ConvertToTagEntity(tag), nil } +func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByName(ctx, masterTx, name) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) if err != nil { diff --git a/pkg/domain/service/wish_card/mock_wish_card/mock_service.go b/pkg/domain/service/wish_card/mock_wish_card/mock_service.go new file mode 100644 index 0000000..433f4c5 --- /dev/null +++ b/pkg/domain/service/wish_card/mock_wish_card/mock_service.go @@ -0,0 +1,156 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/wish_card/service.go + +// Package mock_wish_card is a generated GoMock package. +package mock_wish_card + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + time "time" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, activity, description, date, userID, categoryID, placeID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, activity, description, date, userID, categoryID, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, activity, description, date, userID, categoryID, placeID) +} + +// Update mocks base method +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, wishCardID) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, wishCardID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, wishCardID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, wishCardID) +} + +// GetByIDs mocks base method +func (m *MockService) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByIDs", ctx, masterTx, wishCardIDs) + ret0, _ := ret[0].(entity.WishCardSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByIDs indicates an expected call of GetByIDs +func (mr *MockServiceMockRecorder) GetByIDs(ctx, masterTx, wishCardIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByIDs", reflect.TypeOf((*MockService)(nil).GetByIDs), ctx, masterTx, wishCardIDs) +} + +// GetByCategoryID mocks base method +func (m *MockService) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByCategoryID", ctx, masterTx, categoryID) + ret0, _ := ret[0].(entity.WishCardSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByCategoryID indicates an expected call of GetByCategoryID +func (mr *MockServiceMockRecorder) GetByCategoryID(ctx, masterTx, categoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByCategoryID", reflect.TypeOf((*MockService)(nil).GetByCategoryID), ctx, masterTx, categoryID) +} diff --git a/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go new file mode 100644 index 0000000..24156d1 --- /dev/null +++ b/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go @@ -0,0 +1,91 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/wish_card_tag/service.go + +// Package mock_wish_card_tag is a generated GoMock package. +package mock_wish_card_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, wishCardID, tagID) +} + +// CreateMultipleTags mocks base method +func (m *MockService) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateMultipleTags", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateMultipleTags indicates an expected call of CreateMultipleTags +func (mr *MockServiceMockRecorder) CreateMultipleTags(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMultipleTags", reflect.TypeOf((*MockService)(nil).CreateMultipleTags), ctx, masterTx, wishCardID, tagIDs) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, wishCardID, tagID) +} + +// DeleteByWishCardID mocks base method +func (m *MockService) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteByWishCardID indicates an expected call of DeleteByWishCardID +func (mr *MockServiceMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockService)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) +} diff --git a/pkg/domain/service/wish_card_tag/service.go b/pkg/domain/service/wish_card_tag/service.go new file mode 100644 index 0000000..b46cd0a --- /dev/null +++ b/pkg/domain/service/wish_card_tag/service.go @@ -0,0 +1,57 @@ +package wish_card_tag + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error +} + +type service struct { + repository wish_card_tag.Repository +} + +func New(repo wish_card_tag.Repository) Service { + return &service{ + repository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + err := s.repository.Insert(ctx, masterTx, wishCardID, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + err := s.repository.BulkInsert(ctx, masterTx, wishCardID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + err := s.repository.Delete(ctx, masterTx, wishCardID, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + err := s.repository.DeleteByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil +} diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go index 7ad4270..211633e 100644 --- a/pkg/infrastructure/mysql/model/wish_card.go +++ b/pkg/infrastructure/mysql/model/wish_card.go @@ -35,6 +35,9 @@ func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { CreatedAt: wishCard.CreatedAt, UpdatedAt: wishCard.UpdatedAt, DeletedAt: wishCard.DeletedAt, + Place: &entity.Place{ + ID: wishCard.PlaceID, + }, } } diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 64c3ba8..634fe7e 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -152,6 +152,32 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep return &result, nil } +func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM tags + WHERE name=? + `, name) + var result model.TagModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index d8e53c7..0646a96 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -226,6 +226,46 @@ func TestSelectByID(t *testing.T) { }) } +func TestSelectByName(t *testing.T) { + t.Run("success to select by name", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + repo.Insert(ctx, masterTx, tag) + + result, err = repo.SelectByName(ctx, masterTx, name) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select by name. data not exists", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByName(ctx, masterTx, name) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + func TestSelectByWishCardID(t *testing.T) { t.Run("success to select by wishCardID", func(t *testing.T) { var err error diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository.go b/pkg/infrastructure/mysql/wish_card_tag/repository.go new file mode 100644 index 0000000..0437012 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card_tag/repository.go @@ -0,0 +1,100 @@ +package wish_card_tag + +import ( + "context" + "strings" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type wishCardTagRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) wish_card_tag.Repository { + return &wishCardTagRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *wishCardTagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + INSERT INTO wish_cards_tags(wish_card_id, tag_id) + VALUES (?,?) + `, wishCardID, + tagID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + query := "INSERT INTO wish_cards_tags(wish_card_id, tag_id) VALUES " + values := make([]interface{}, 0, len(tagIDs)) + for _, tagID := range tagIDs { + query = query + "(?, ?)," + values = append(values, wishCardID, tagID) + } + query = strings.TrimSuffix(query, ",") + + _, err = tx.Exec(query, values...) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards_tags + WHERE wish_card_id = ? and tag_id = ? + `, wishCardID, + tagID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards_tags + WHERE wish_card_id = ? + `, wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go b/pkg/infrastructure/mysql/wish_card_tag/repository_test.go new file mode 100644 index 0000000..6470d90 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card_tag/repository_test.go @@ -0,0 +1,96 @@ +package wish_card_tag + +import ( + "context" + "database/sql" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + tx "wantum/pkg/infrastructure/mysql" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo wish_card_tag.Repository +var dummyDate time.Time + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Insert(ctx, masterTx, 1, 1) + return err + }) + assert.NoError(t, err) + }) +} + +func TestBulkInsert(t *testing.T) { + t.Run("success to bulk insert data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.BulkInsert(ctx, masterTx, 1, []int{2, 3, 4}) + return err + }) + assert.NoError(t, err) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Delete(ctx, masterTx, 1, 1) + return err + }) + assert.NoError(t, err) + }) +} + +func TestDeleteByWishCardID(t *testing.T) { + t.Run("success to delete data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.DeleteByWishCardID(ctx, masterTx, 1) + return err + }) + assert.NoError(t, err) + }) +} From 9d6242138924fa0172d5c5f819c2aefb4d3d135a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 12:27:04 +0900 Subject: [PATCH 025/156] update gomock --- go.mod | 2 +- go.sum | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 0869251..7293585 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( firebase.google.com/go v3.12.0+incompatible github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-sql-driver/mysql v1.5.0 - github.com/golang/mock v1.4.3 + github.com/golang/mock v1.4.4 github.com/google/wire v0.4.0 github.com/gorilla/mux v1.7.4 github.com/joho/godotenv v1.3.0 diff --git a/go.sum b/go.sum index 098008c..ea5fda1 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -56,6 +57,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -70,6 +72,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -93,6 +97,7 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -145,6 +150,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= From ec338277e4900b9dded60dbbb95a6213b1bf08bd Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 17:29:34 +0900 Subject: [PATCH 026/156] =?UTF-8?q?package=E3=82=92=E3=82=B9=E3=83=8D?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=81=8B=E3=82=89=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 6 ++++++ .../usecase/{wish_card => wishcard}/interactor.go | 12 ++++++------ .../{wish_card => wishcard}/interactor_test.go | 6 +++--- .../mock_wish_card/mock_repository.go | 0 .../repository/{wish_card => wishcard}/repository.go | 2 +- .../mock_wish_card_tag/mock_repository.go | 0 .../{wish_card_tag => wishcardtag}/repository.go | 2 +- .../mock_wish_card/mock_service.go | 0 .../service/{wish_card => wishcard}/service.go | 8 ++++---- .../service/{wish_card => wishcard}/service_test.go | 4 ++-- .../mock_wish_card_tag/mock_service.go | 0 .../{wish_card_tag => wishcardtag}/service.go | 8 ++++---- .../mysql/{wish_card => wishcard}/repository.go | 6 +++--- .../mysql/{wish_card => wishcard}/repository_test.go | 4 ++-- .../{wish_card_tag => wishcardtag}/repository.go | 6 +++--- .../repository_test.go | 6 +++--- 17 files changed, 39 insertions(+), 32 deletions(-) rename pkg/api/usecase/{wish_card => wishcard}/interactor.go (95%) rename pkg/api/usecase/{wish_card => wishcard}/interactor_test.go (98%) rename pkg/domain/repository/{wish_card => wishcard}/mock_wish_card/mock_repository.go (100%) rename pkg/domain/repository/{wish_card => wishcard}/repository.go (98%) rename pkg/domain/repository/{wish_card_tag => wishcardtag}/mock_wish_card_tag/mock_repository.go (100%) rename pkg/domain/repository/{wish_card_tag => wishcardtag}/repository.go (95%) rename pkg/domain/service/{wish_card => wishcard}/mock_wish_card/mock_service.go (100%) rename pkg/domain/service/{wish_card => wishcard}/service.go (97%) rename pkg/domain/service/{wish_card => wishcard}/service_test.go (98%) rename pkg/domain/service/{wish_card_tag => wishcardtag}/mock_wish_card_tag/mock_service.go (100%) rename pkg/domain/service/{wish_card_tag => wishcardtag}/service.go (90%) rename pkg/infrastructure/mysql/{wish_card => wishcard}/repository.go (98%) rename pkg/infrastructure/mysql/{wish_card => wishcard}/repository_test.go (99%) rename pkg/infrastructure/mysql/{wish_card_tag => wishcardtag}/repository.go (94%) rename pkg/infrastructure/mysql/{wish_card_tag => wishcardtag}/repository_test.go (95%) diff --git a/go.mod b/go.mod index 7293585..b9e6ca8 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 + golang.org/x/arch v0.0.0-20200826200359-b19915210f00 // indirect golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3 // indirect golang.org/x/tools v0.0.0-20200425043458-8463f397d07c // indirect golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 diff --git a/go.sum b/go.sum index ea5fda1..616999f 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,7 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -107,6 +108,7 @@ github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -146,9 +148,12 @@ go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/arch v0.0.0-20200826200359-b19915210f00 h1:cfd5G6xu8iZTFmjBYVemyBmE/sTf0A3vpE3BmoOuLCI= +golang.org/x/arch v0.0.0-20200826200359-b19915210f00/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -358,5 +363,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/api/usecase/wish_card/interactor.go b/pkg/api/usecase/wishcard/interactor.go similarity index 95% rename from pkg/api/usecase/wish_card/interactor.go rename to pkg/api/usecase/wishcard/interactor.go index 7ecce52..381290d 100644 --- a/pkg/api/usecase/wish_card/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -7,8 +7,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place" "wantum/pkg/domain/service/tag" - "wantum/pkg/domain/service/wish_card" - "wantum/pkg/domain/service/wish_card_tag" + "wantum/pkg/domain/service/wishcard" + "wantum/pkg/domain/service/wishcardtag" "wantum/pkg/werrors" ) @@ -22,13 +22,13 @@ type Interactor interface { type interactor struct { masterTxManager repository.MasterTxManager - wishCardService wish_card.Service + wishCardService wishcard.Service tagService tag.Service placeService place.Service - wishCardsTagsService wish_card_tag.Service + wishCardsTagsService wishcardtag.Service } -func New(masterTxManager repository.MasterTxManager, wishCardService wish_card.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wish_card_tag.Service) Interactor { +func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wishcardtag.Service) Interactor { return &interactor{ masterTxManager: masterTxManager, wishCardService: wishCardService, diff --git a/pkg/api/usecase/wish_card/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go similarity index 98% rename from pkg/api/usecase/wish_card/interactor_test.go rename to pkg/api/usecase/wishcard/interactor_test.go index 3dea49d..293676c 100644 --- a/pkg/api/usecase/wish_card/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -9,8 +9,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/domain/service/tag/mock_tag" - "wantum/pkg/domain/service/wish_card/mock_wish_card" - "wantum/pkg/domain/service/wish_card_tag/mock_wish_card_tag" + "wantum/pkg/domain/service/wishcard/mock_wish_card" + "wantum/pkg/domain/service/wishcardtag/mock_wish_card_tag" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go similarity index 100% rename from pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go rename to pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wishcard/repository.go similarity index 98% rename from pkg/domain/repository/wish_card/repository.go rename to pkg/domain/repository/wishcard/repository.go index 5196dfd..2aa9105 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" diff --git a/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go b/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go similarity index 100% rename from pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go rename to pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go diff --git a/pkg/domain/repository/wish_card_tag/repository.go b/pkg/domain/repository/wishcardtag/repository.go similarity index 95% rename from pkg/domain/repository/wish_card_tag/repository.go rename to pkg/domain/repository/wishcardtag/repository.go index e2a69c3..7142d30 100644 --- a/pkg/domain/repository/wish_card_tag/repository.go +++ b/pkg/domain/repository/wishcardtag/repository.go @@ -1,4 +1,4 @@ -package wish_card_tag +package wishcardtag import ( "context" diff --git a/pkg/domain/service/wish_card/mock_wish_card/mock_service.go b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go similarity index 100% rename from pkg/domain/service/wish_card/mock_wish_card/mock_service.go rename to pkg/domain/service/wishcard/mock_wish_card/mock_service.go diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wishcard/service.go similarity index 97% rename from pkg/domain/service/wish_card/service.go rename to pkg/domain/service/wishcard/service.go index 54b88b4..8c35485 100644 --- a/pkg/domain/service/wish_card/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -8,7 +8,7 @@ import ( "time" "wantum/pkg/domain/entity" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) @@ -27,10 +27,10 @@ type Service interface { } type service struct { - wishCardRepository wish_card.Repository + wishCardRepository wishcard.Repository } -func New(repo wish_card.Repository) Service { +func New(repo wishcard.Repository) Service { return &service{ wishCardRepository: repo, } diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wishcard/service_test.go similarity index 98% rename from pkg/domain/service/wish_card/service_test.go rename to pkg/domain/service/wishcard/service_test.go index 3f731d9..ebb0f49 100644 --- a/pkg/domain/service/wish_card/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -6,7 +6,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card/mock_wish_card" + "wantum/pkg/domain/repository/wishcard/mock_wish_card" "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" diff --git a/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go similarity index 100% rename from pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go rename to pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go diff --git a/pkg/domain/service/wish_card_tag/service.go b/pkg/domain/service/wishcardtag/service.go similarity index 90% rename from pkg/domain/service/wish_card_tag/service.go rename to pkg/domain/service/wishcardtag/service.go index b46cd0a..277c0fa 100644 --- a/pkg/domain/service/wish_card_tag/service.go +++ b/pkg/domain/service/wishcardtag/service.go @@ -1,9 +1,9 @@ -package wish_card_tag +package wishcardtag import ( "context" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/werrors" ) @@ -15,10 +15,10 @@ type Service interface { } type service struct { - repository wish_card_tag.Repository + repository wishcardtag.Repository } -func New(repo wish_card_tag.Repository) Service { +func New(repo wishcardtag.Repository) Service { return &service{ repository: repo, } diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go similarity index 98% rename from pkg/infrastructure/mysql/wish_card/repository.go rename to pkg/infrastructure/mysql/wishcard/repository.go index 8a72e65..ff5d087 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -6,7 +6,7 @@ import ( "errors" "strings" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" @@ -17,7 +17,7 @@ type wishCardRepositoryImplement struct { masterTxManager repository.MasterTxManager } -func New(txManager repository.MasterTxManager) wish_card.Repository { +func New(txManager repository.MasterTxManager) wishcard.Repository { return &wishCardRepositoryImplement{ masterTxManager: txManager, } diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go similarity index 99% rename from pkg/infrastructure/mysql/wish_card/repository_test.go rename to pkg/infrastructure/mysql/wishcard/repository_test.go index 1cc589a..6bcddfe 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -9,7 +9,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - wcrepo "wantum/pkg/domain/repository/wish_card" + wcrepo "wantum/pkg/domain/repository/wishcard" tx "wantum/pkg/infrastructure/mysql" "wantum/pkg/infrastructure/mysql/model" diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository.go b/pkg/infrastructure/mysql/wishcardtag/repository.go similarity index 94% rename from pkg/infrastructure/mysql/wish_card_tag/repository.go rename to pkg/infrastructure/mysql/wishcardtag/repository.go index 0437012..6166d93 100644 --- a/pkg/infrastructure/mysql/wish_card_tag/repository.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository.go @@ -1,10 +1,10 @@ -package wish_card_tag +package wishcardtag import ( "context" "strings" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/infrastructure/mysql" "wantum/pkg/tlog" "wantum/pkg/werrors" @@ -14,7 +14,7 @@ type wishCardTagRepositoryImplement struct { masterTxManager repository.MasterTxManager } -func New(txManager repository.MasterTxManager) wish_card_tag.Repository { +func New(txManager repository.MasterTxManager) wishcardtag.Repository { return &wishCardTagRepositoryImplement{ masterTxManager: txManager, } diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go similarity index 95% rename from pkg/infrastructure/mysql/wish_card_tag/repository_test.go rename to pkg/infrastructure/mysql/wishcardtag/repository_test.go index 6470d90..602d458 100644 --- a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -1,4 +1,4 @@ -package wish_card_tag +package wishcardtag import ( "context" @@ -8,7 +8,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" tx "wantum/pkg/infrastructure/mysql" _ "github.com/go-sql-driver/mysql" @@ -17,7 +17,7 @@ import ( var db *sql.DB var txManager repository.MasterTxManager -var repo wish_card_tag.Repository +var repo wishcardtag.Repository var dummyDate time.Time func TestMain(m *testing.M) { From 8f9abf8d045108cefc765bc1bf0529e9e7f83769 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 17:34:57 +0900 Subject: [PATCH 027/156] =?UTF-8?q?mysql/model=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=90=8D=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/model/place_test.go | 8 ++++---- pkg/infrastructure/mysql/model/tag_test.go | 8 ++++---- pkg/infrastructure/mysql/model/wish_card_test.go | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go index 3cb54e1..a147b5d 100644 --- a/pkg/infrastructure/mysql/model/place_test.go +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToPlaceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &PlaceModel{ ID: 1, @@ -25,13 +25,13 @@ func TestConvertToPlaceEntity(t *testing.T) { assert.IsType(t, &entity.Place{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToPlaceEntity(nil) assert.Nil(t, result) }) } func TestConvertToPlaceSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &PlaceModel{ ID: 1, @@ -48,7 +48,7 @@ func TestConvertToPlaceSliceEntity(t *testing.T) { assert.IsType(t, entity.PlaceSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToPlaceSliceEntity(nil) assert.Nil(t, result) }) diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go index 7cd2084..b0bcbbd 100644 --- a/pkg/infrastructure/mysql/model/tag_test.go +++ b/pkg/infrastructure/mysql/model/tag_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToTagEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) testData := &TagModel{ ID: 1, @@ -25,13 +25,13 @@ func TestConvertToTagEntity(t *testing.T) { assert.IsType(t, &entity.Tag{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToTagEntity(nil) assert.Nil(t, result) }) } func TestConvertToTagSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) data := &TagModel{ ID: 1, @@ -48,7 +48,7 @@ func TestConvertToTagSliceEntity(t *testing.T) { assert.IsType(t, entity.TagSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToTagSliceEntity(nil) assert.Nil(t, result) }) diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go index 195762a..b8c7a89 100644 --- a/pkg/infrastructure/mysql/model/wish_card_test.go +++ b/pkg/infrastructure/mysql/model/wish_card_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToWishCardEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &WishCardModel{ ID: 1, @@ -29,13 +29,13 @@ func TestConvertToWishCardEntity(t *testing.T) { assert.IsType(t, &entity.WishCard{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToWishCardEntiry(nil) assert.Nil(t, result) }) } func TestConvertToWishCardSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &WishCardModel{ ID: 1, @@ -56,7 +56,7 @@ func TestConvertToWishCardSliceEntity(t *testing.T) { assert.IsType(t, entity.WishCardSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToWishCardSliceEntity(nil) assert.Nil(t, result) }) From c605ba6fce489681d52a4ecc86eae706b44aaf37 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:02:18 +0900 Subject: [PATCH 028/156] fix test of repo.place --- .../mysql/place/repository_test.go | 81 +++++++++---------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 12983dd..92f50f1 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -21,6 +21,9 @@ import ( var db *sql.DB var txManager repository.MasterTxManager var repo place.Repository +var dummyDate time.Time + +var dummyPlace = "samplePlace" func TestMain(m *testing.M) { before() @@ -39,6 +42,7 @@ func before() { } txManager = tx.NewDBMasterTxManager(db) repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) } // dbのコネクションを閉じる @@ -47,14 +51,13 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result int @@ -67,7 +70,7 @@ func TestInsert(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failed to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -83,15 +86,14 @@ func TestInsert(t *testing.T) { } func TestUpdate(t *testing.T) { - t.Run("success to update data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ ID: 1, - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -107,10 +109,10 @@ func TestUpdate(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) - // assert.Equal(t, "sample place", result.Name) + assert.Equal(t, dummyPlace, result.Name) }) - t.Run("failure to update data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -132,14 +134,13 @@ func TestUpdate(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -147,7 +148,7 @@ func TestUpDeleteFlag(t *testing.T) { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - place.DeletedAt = &date + place.DeletedAt = &dummyDate err = repo.UpDeleteFlag(ctx, masterTx, place) if err != nil { return err @@ -161,14 +162,13 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -184,15 +184,14 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, } var result *model.PlaceModel @@ -216,21 +215,20 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - place.DeletedAt = &date + place.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, place) err = repo.Delete(ctx, masterTx, place.ID) @@ -251,14 +249,13 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select by id", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -276,7 +273,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectAll(t *testing.T) { - t.Run("success to select all", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From c8635273a50d66f48683b43edfd55b90ee659a89 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:06:33 +0900 Subject: [PATCH 029/156] fix test of repo.tag --- .../mysql/tag/repository_test.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index 0646a96..dcb2aa8 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -51,7 +51,7 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -71,7 +71,7 @@ func TestInsert(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failed to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -87,7 +87,7 @@ func TestInsert(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -116,7 +116,7 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -137,7 +137,7 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -168,7 +168,7 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -203,7 +203,7 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select by id", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -227,7 +227,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectByName(t *testing.T) { - t.Run("success to select by name", func(t *testing.T) { + t.Run("successe", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -249,7 +249,7 @@ func TestSelectByName(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select by name. data not exists", func(t *testing.T) { + t.Run("failure_存在しないデータ", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -267,7 +267,7 @@ func TestSelectByName(t *testing.T) { } func TestSelectByWishCardID(t *testing.T) { - t.Run("success to select by wishCardID", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -284,7 +284,7 @@ func TestSelectByWishCardID(t *testing.T) { } func TestSelectByMemoryID(t *testing.T) { - t.Run("success to select by wishCardID", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From 8b259ce907698ed781118bdff2efb689f24ac5e0 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:16:28 +0900 Subject: [PATCH 030/156] fix test of repo.wish_card --- .../mysql/wishcard/repository_test.go | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 6bcddfe..31c9fc1 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -22,6 +22,9 @@ var txManager repository.MasterTxManager var repo wcrepo.Repository var dummyDate time.Time +var dummyActivity = "sampleActivity" +var dummyDescription = "sampleDescription" + func TestMain(m *testing.M) { before() code := m.Run() @@ -46,13 +49,13 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -68,7 +71,7 @@ func TestInsert(t *testing.T) { assert.NotEqual(t, 0, result) }) - t.Run("failure to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -83,14 +86,14 @@ func TestInsert(t *testing.T) { } func TestUpdate(t *testing.T) { - t.Run("success to update data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CreatedAt: &dummyDate, @@ -110,17 +113,17 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, "なんかしたい", result.Activity) + assert.Equal(t, dummyActivity, result.Activity) }) - t.Run("success to update data. done at is null", func(t *testing.T) { + t.Run("success_doneAtがnil", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -139,10 +142,10 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, "なんかしたい", result.Activity) + assert.Equal(t, dummyActivity, result.Activity) }) - t.Run("failure to update data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -158,13 +161,13 @@ func TestUpdate(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -188,13 +191,13 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up delete flag. flag is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -211,7 +214,7 @@ func TestUpDeleteFlag(t *testing.T) { assert.Error(t, err) }) - t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -226,13 +229,13 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -256,7 +259,7 @@ func TestDownDeleteFlag(t *testing.T) { assert.Nil(t, result.DeletedAt) }) - t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -271,13 +274,13 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to up delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -308,13 +311,13 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -332,7 +335,7 @@ func TestSelectByID(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select data. data is not exist", func(t *testing.T) { + t.Run("failure_存在しないデータ", func(t *testing.T) { var err error ctx := context.Background() @@ -347,7 +350,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectByIDs(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -366,13 +369,13 @@ func TestSelectByIDs(t *testing.T) { } func TestCategoryID(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -393,7 +396,7 @@ func TestCategoryID(t *testing.T) { } }) - t.Run("success to select data. category is not exist", func(t *testing.T) { + t.Run("success_存在しないカテゴリ", func(t *testing.T) { var err error ctx := context.Background() From c37725e6d21bd746c1e5f017056799cc3be9cd67 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:16:53 +0900 Subject: [PATCH 031/156] fix test repo.wish_card_tag --- pkg/infrastructure/mysql/wishcardtag/repository_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index 602d458..a765597 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -44,7 +44,7 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -57,7 +57,7 @@ func TestInsert(t *testing.T) { } func TestBulkInsert(t *testing.T) { - t.Run("success to bulk insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -70,7 +70,7 @@ func TestBulkInsert(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -83,7 +83,7 @@ func TestDelete(t *testing.T) { } func TestDeleteByWishCardID(t *testing.T) { - t.Run("success to delete data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From 60ac275e757f7b07aa779d8b52edbcf84694fb29 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:28:35 +0900 Subject: [PATCH 032/156] fix test of service.place --- pkg/domain/service/place/service_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index c6abf04..d1dee7c 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -117,7 +117,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -139,7 +139,7 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグが上がってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() From 3b727f5be6899239a200c1d0f43ea360d3e8f54e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:40:51 +0900 Subject: [PATCH 033/156] fix test of service.tag --- pkg/domain/service/tag/service_test.go | 109 +++++++++---------------- 1 file changed, 38 insertions(+), 71 deletions(-) diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 6d19c54..9cb1cf5 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -18,6 +18,28 @@ var ( dummyDate time.Time ) +var dummyTagSlice = model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, +} + +var dummyTag = &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, +} + func TestMain(m *testing.M) { before() code := m.Run() @@ -38,7 +60,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) - result, err := service.Create(ctx, masterTx, "sample tag") + result, err := service.Create(ctx, masterTx, "sampleTag") assert.NoError(t, err) assert.NotNil(t, result) @@ -49,19 +71,12 @@ func TestService_UpDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sample tag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -73,20 +88,12 @@ func TestService_DownDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "samleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -94,11 +101,12 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ + + dummy := &model.TagModel{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, @@ -107,8 +115,8 @@ func TestService_Delete(t *testing.T) { } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummy, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -116,19 +124,13 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグがたってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -142,18 +144,11 @@ func TestService_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.GetByID(ctx, masterTx, dummyData.ID) + result, err := service.GetByID(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -164,22 +159,8 @@ func TestService_GetByWishCardID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.TagModelSlice{ - &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - &model.TagModel{ - ID: 2, - Name: "sampleTag2", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyTagSlice, nil) service := New(repo) result, err := service.GetByWishCardID(ctx, masterTx, 1) @@ -193,22 +174,8 @@ func TestService_GetByMemoryID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.TagModelSlice{ - &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - &model.TagModel{ - ID: 2, - Name: "sampleTag2", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyTagSlice, nil) service := New(repo) result, err := service.GetByMemoryID(ctx, masterTx, 1) From fde86cec58329dd842ef6924bef5b119e4d63305 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:56:28 +0900 Subject: [PATCH 034/156] fix test of service --- pkg/domain/service/wishcard/service_test.go | 69 ++++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index ebb0f49..d012e11 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -14,8 +14,13 @@ import ( ) var ( - masterTx repository.MasterTx - dummyDate time.Time + masterTx repository.MasterTx +) + +var ( + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + dummyActivity = "sampleActivity" + dummyDescription = "sampleDescription" ) func TestMain(m *testing.M) { @@ -25,7 +30,6 @@ func TestMain(m *testing.M) { } func before() { - dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) masterTx = repository.NewMockMasterTx() } @@ -38,7 +42,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) - result, err := service.Create(ctx, masterTx, "activity", "desc", &dummyDate, 1, 1, 1) + result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1) assert.NoError(t, err) assert.NotNil(t, result) @@ -53,7 +57,7 @@ func TestService_Update(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", + Activity: "act", Description: "desc", Date: &dummyDate, DoneAt: &dummyDate, @@ -64,14 +68,16 @@ func TestService_Update(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) - result, err := service.Update(ctx, masterTx, 1, "activity", "desc", &dummyDate, &dummyDate, 1, 1, 1) + result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1) assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + assert.Equal(t, dummyDescription, result.Description) } @@ -83,8 +89,8 @@ func TestService_UpDeleteFlag(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -94,7 +100,7 @@ func TestService_UpDeleteFlag(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) @@ -102,6 +108,7 @@ func TestService_UpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) } func TestService_DownDeleteFlag(t *testing.T) { @@ -112,8 +119,8 @@ func TestService_DownDeleteFlag(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -124,7 +131,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) @@ -136,7 +143,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -144,8 +151,8 @@ func TestService_Delete(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -156,8 +163,8 @@ func TestService_Delete(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) - repo.EXPECT().Delete(ctx, masterTx, 1) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -165,7 +172,7 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up a delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグがたってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -173,8 +180,8 @@ func TestService_Delete(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -184,7 +191,7 @@ func TestService_Delete(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -201,8 +208,8 @@ func TestService_GetByID(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -212,7 +219,7 @@ func TestService_GetByID(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByID(ctx, masterTx, 1) @@ -230,8 +237,8 @@ func TestService_GetByIDs(t *testing.T) { &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: "activity1", + Description: "desc2", Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -254,7 +261,7 @@ func TestService_GetByIDs(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByIDs(ctx, masterTx, []string{"1", "2"}).Return(dummyData, nil) + repo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) @@ -273,8 +280,8 @@ func TestService_GetByCategoryID(t *testing.T) { &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: "activity1", + Description: "desc1", Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -297,7 +304,7 @@ func TestService_GetByCategoryID(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByCategoryID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByCategoryID(ctx, masterTx, 1) From 1dec2f0b820b89b570924741411ec62c0d80759c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 15:52:40 +0900 Subject: [PATCH 035/156] =?UTF-8?q?=E3=81=84=E3=82=89=E3=82=93=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/Tag.go | 13 ---- pkg/domain/entity/place.go | 13 ---- pkg/domain/entity/wish_card.go | 19 ------ pkg/infrastructure/mysql/model/place.go | 40 ------------ pkg/infrastructure/mysql/model/place_test.go | 55 ---------------- pkg/infrastructure/mysql/model/tag.go | 40 ------------ pkg/infrastructure/mysql/model/tag_test.go | 55 ---------------- pkg/infrastructure/mysql/model/wish_card.go | 53 ---------------- .../mysql/model/wish_card_test.go | 63 ------------------- 9 files changed, 351 deletions(-) delete mode 100644 pkg/domain/entity/Tag.go delete mode 100644 pkg/domain/entity/place.go delete mode 100644 pkg/domain/entity/wish_card.go delete mode 100644 pkg/infrastructure/mysql/model/place.go delete mode 100644 pkg/infrastructure/mysql/model/place_test.go delete mode 100644 pkg/infrastructure/mysql/model/tag.go delete mode 100644 pkg/infrastructure/mysql/model/tag_test.go delete mode 100644 pkg/infrastructure/mysql/model/wish_card.go delete mode 100644 pkg/infrastructure/mysql/model/wish_card_test.go diff --git a/pkg/domain/entity/Tag.go b/pkg/domain/entity/Tag.go deleted file mode 100644 index 0b394cb..0000000 --- a/pkg/domain/entity/Tag.go +++ /dev/null @@ -1,13 +0,0 @@ -package entity - -import "time" - -type Tag struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type TagSlice []*Tag diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go deleted file mode 100644 index 73e4ee0..0000000 --- a/pkg/domain/entity/place.go +++ /dev/null @@ -1,13 +0,0 @@ -package entity - -import "time" - -type Place struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type PlaceSlice []*Place diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go deleted file mode 100644 index 9f37bbb..0000000 --- a/pkg/domain/entity/wish_card.go +++ /dev/null @@ -1,19 +0,0 @@ -package entity - -import "time" - -type WishCard struct { - ID int - UserID int - Activity string - Description string - Date *time.Time - DoneAt *time.Time - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time - Place *Place - Tags TagSlice -} - -type WishCardSlice []*WishCard diff --git a/pkg/infrastructure/mysql/model/place.go b/pkg/infrastructure/mysql/model/place.go deleted file mode 100644 index db4d44e..0000000 --- a/pkg/infrastructure/mysql/model/place.go +++ /dev/null @@ -1,40 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type PlaceModel struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type PlaceModelSlice []*PlaceModel - -func ConvertToPlaceEntity(place *PlaceModel) *entity.Place { - if place == nil { - return nil - } - return &entity.Place{ - ID: place.ID, - Name: place.Name, - CreatedAt: place.CreatedAt, - UpdatedAt: place.UpdatedAt, - DeletedAt: place.DeletedAt, - } -} - -func ConvertToPlaceSliceEntity(places PlaceModelSlice) entity.PlaceSlice { - if places == nil { - return nil - } - res := make(entity.PlaceSlice, 0, len(places)) - for _, place := range places { - res = append(res, ConvertToPlaceEntity(place)) - } - return res -} diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go deleted file mode 100644 index a147b5d..0000000 --- a/pkg/infrastructure/mysql/model/place_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToPlaceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - testData := &PlaceModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - - result := ConvertToPlaceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.Place{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToPlaceEntity(nil) - assert.Nil(t, result) - }) -} -func TestConvertToPlaceSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - data := &PlaceModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - testData := PlaceModelSlice{data, data} - - result := ConvertToPlaceSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.PlaceSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToPlaceSliceEntity(nil) - assert.Nil(t, result) - }) -} diff --git a/pkg/infrastructure/mysql/model/tag.go b/pkg/infrastructure/mysql/model/tag.go deleted file mode 100644 index dd06839..0000000 --- a/pkg/infrastructure/mysql/model/tag.go +++ /dev/null @@ -1,40 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type TagModel struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type TagModelSlice []*TagModel - -func ConvertToTagEntity(tag *TagModel) *entity.Tag { - if tag == nil { - return nil - } - return &entity.Tag{ - ID: tag.ID, - Name: tag.Name, - CreatedAt: tag.CreatedAt, - UpdatedAt: tag.UpdatedAt, - DeletedAt: tag.DeletedAt, - } -} - -func ConvertToTagSliceEntity(tags TagModelSlice) entity.TagSlice { - if tags == nil { - return nil - } - result := make(entity.TagSlice, 0, len(tags)) - for _, tag := range tags { - result = append(result, ConvertToTagEntity(tag)) - } - return result -} diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go deleted file mode 100644 index b0bcbbd..0000000 --- a/pkg/infrastructure/mysql/model/tag_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToTagEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) - testData := &TagModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - - result := ConvertToTagEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.Tag{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToTagEntity(nil) - assert.Nil(t, result) - }) -} -func TestConvertToTagSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) - data := &TagModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - testData := TagModelSlice{data, data} - - result := ConvertToTagSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.TagSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToTagSliceEntity(nil) - assert.Nil(t, result) - }) -} diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go deleted file mode 100644 index 211633e..0000000 --- a/pkg/infrastructure/mysql/model/wish_card.go +++ /dev/null @@ -1,53 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type WishCardModel struct { - ID int - UserID int - Activity string - Description string - Date *time.Time - DoneAt *time.Time - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time - CategoryID int - PlaceID int -} - -type WishCardModelSlice []*WishCardModel - -func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { - if wishCard == nil { - return nil - } - return &entity.WishCard{ - ID: wishCard.ID, - UserID: wishCard.UserID, - Activity: wishCard.Activity, - Description: wishCard.Description, - Date: wishCard.Date, - DoneAt: wishCard.DoneAt, - CreatedAt: wishCard.CreatedAt, - UpdatedAt: wishCard.UpdatedAt, - DeletedAt: wishCard.DeletedAt, - Place: &entity.Place{ - ID: wishCard.PlaceID, - }, - } -} - -func ConvertToWishCardSliceEntity(wishCards WishCardModelSlice) entity.WishCardSlice { - if wishCards == nil { - return nil - } - res := make(entity.WishCardSlice, 0, len(wishCards)) - for _, wishCard := range wishCards { - res = append(res, ConvertToWishCardEntiry(wishCard)) - } - return res -} diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go deleted file mode 100644 index b8c7a89..0000000 --- a/pkg/infrastructure/mysql/model/wish_card_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToWishCardEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - testData := &WishCardModel{ - ID: 1, - UserID: 1, - Activity: "タピる", - Description: "せつめいーーー", - Date: &date, - DoneAt: nil, - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: nil, - } - - result := ConvertToWishCardEntiry(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.WishCard{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToWishCardEntiry(nil) - assert.Nil(t, result) - }) -} -func TestConvertToWishCardSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - data := &WishCardModel{ - ID: 1, - UserID: 1, - Activity: "タピる", - Description: "せつめいーーー", - Date: &date, - DoneAt: nil, - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: nil, - } - testData := WishCardModelSlice{data, data} - - result := ConvertToWishCardSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.WishCardSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToWishCardSliceEntity(nil) - assert.Nil(t, result) - }) -} From 3f638671d9707118562ddeeae620210362fc4e7c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 16:49:50 +0900 Subject: [PATCH 036/156] update repository --- pkg/domain/entity/place/entity.go | 13 ++ pkg/domain/entity/tag/entity.go | 13 ++ pkg/domain/entity/wishcard/entity.go | 23 ++++ pkg/domain/repository/place/repository.go | 14 +-- pkg/domain/repository/tag/repository.go | 16 +-- pkg/domain/repository/wishcard/repository.go | 16 +-- pkg/domain/service/wishcard/service.go | 4 + pkg/infrastructure/mysql/place/repository.go | 22 ++-- .../mysql/place/repository_test.go | 30 ++--- pkg/infrastructure/mysql/tag/repository.go | 30 ++--- .../mysql/tag/repository_test.go | 32 ++--- .../mysql/wishcard/repository.go | 60 +++++---- .../mysql/wishcard/repository_test.go | 115 ++++++++++-------- 13 files changed, 227 insertions(+), 161 deletions(-) create mode 100644 pkg/domain/entity/place/entity.go create mode 100644 pkg/domain/entity/tag/entity.go create mode 100644 pkg/domain/entity/wishcard/entity.go diff --git a/pkg/domain/entity/place/entity.go b/pkg/domain/entity/place/entity.go new file mode 100644 index 0000000..f8ce875 --- /dev/null +++ b/pkg/domain/entity/place/entity.go @@ -0,0 +1,13 @@ +package place + +import "time" + +type Entity struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type EntitySlice []*Entity diff --git a/pkg/domain/entity/tag/entity.go b/pkg/domain/entity/tag/entity.go new file mode 100644 index 0000000..c6e5feb --- /dev/null +++ b/pkg/domain/entity/tag/entity.go @@ -0,0 +1,13 @@ +package tag + +import "time" + +type Entity struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type EntitySlice []*Entity diff --git a/pkg/domain/entity/wishcard/entity.go b/pkg/domain/entity/wishcard/entity.go new file mode 100644 index 0000000..fc8c68b --- /dev/null +++ b/pkg/domain/entity/wishcard/entity.go @@ -0,0 +1,23 @@ +package wishcard + +import ( + "time" + "wantum/pkg/domain/entity/place" + "wantum/pkg/domain/entity/tag" +) + +type Entity struct { + ID int + UserID int // TODO: entityの差し返して + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + Place *place.Entity + Tags tag.EntitySlice +} + +type EntitySlice []*Entity diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 1ea17e9..5eeae76 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -2,20 +2,20 @@ package place import ( "context" + "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) // implement: wantum/pkg/infrastructure/mysql/place:placeRepositoryImpletent type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) - SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) + SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) } diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 9489bd1..2caa586 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -2,19 +2,19 @@ package tag import ( "context" + "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) - SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) - SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) - SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) + SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) + SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) + SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) } diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 2aa9105..9370eb5 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -2,21 +2,21 @@ package wishcard import ( "context" + "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) - SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) - SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) + SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) // TODO: SelectByCategoryIDsあっても良いかもと思ったが? } diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 8c35485..d44417a 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -8,6 +8,8 @@ import ( "time" "wantum/pkg/domain/entity" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/domain/repository/tag" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" @@ -28,6 +30,8 @@ type Service interface { type service struct { wishCardRepository wishcard.Repository + placeRepository place.Repository + tagsRepository tag.Repository } func New(repo wishcard.Repository) Service { diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 2b8f452..6c93c29 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -4,10 +4,10 @@ import ( "context" "database/sql" "errors" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -22,7 +22,7 @@ func New(txManager repository.MasterTxManager) place.Repository { } } -func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return 0, err @@ -54,7 +54,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos return int(id), nil } -func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return err @@ -80,7 +80,7 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos return nil } -func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return err @@ -114,7 +114,7 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx return nil } -func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { if err := checkIsNil(place); err != nil { return err } @@ -156,7 +156,7 @@ func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repos return nil } -func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { +func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -167,7 +167,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r FROM places WHERE id=? `, placeID) - var result model.PlaceModel + var result placeEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -182,7 +182,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r return &result, nil } -func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { +func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -199,9 +199,9 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.PlaceModelSlice + var result placeEntity.EntitySlice for rows.Next() { - var place model.PlaceModel + var place placeEntity.Entity err = rows.Scan( &place.ID, &place.Name, @@ -217,7 +217,7 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re return result, nil } -func checkIsNil(place *model.PlaceModel) error { +func checkIsNil(place *placeEntity.Entity) error { if place == nil { return werrors.Newf( errors.New("required data(place) is nil"), diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 92f50f1..3b99166 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -8,10 +8,10 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "github.com/stretchr/testify/assert" @@ -54,7 +54,7 @@ func TestInsert(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -89,14 +89,14 @@ func TestUpdate(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ ID: 1, Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.Update(ctx, masterTx, place) if err != nil { @@ -116,7 +116,7 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.Update(ctx, masterTx, nil) if err != nil { @@ -137,13 +137,13 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -165,7 +165,7 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -187,14 +187,14 @@ func TestDownDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -218,13 +218,13 @@ func TestDelete(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID @@ -252,13 +252,13 @@ func TestSelectByID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -277,7 +277,7 @@ func TestSelectAll(t *testing.T) { var err error ctx := context.Background() - var result model.PlaceModelSlice + var result placeEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectAll(ctx, masterTx) return err diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 634fe7e..417954b 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -4,10 +4,10 @@ import ( "context" "database/sql" "errors" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -22,7 +22,7 @@ func New(txManager repository.MasterTxManager) tag.Repository { } } -func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { +func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) (int, error) { if err := checkIsNil(tag); err != nil { return 0, err } @@ -50,7 +50,7 @@ func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx reposit return int(id), nil } -func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(tag); err != nil { return err @@ -84,7 +84,7 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r return nil } -func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { if err := checkIsNil(tag); err != nil { return err } @@ -126,7 +126,7 @@ func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx reposit return nil } -func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { +func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -137,7 +137,7 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep FROM tags WHERE id=? `, tagID) - var result model.TagModel + var result tagEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -152,7 +152,7 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep return &result, nil } -func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { +func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -163,7 +163,7 @@ func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx r FROM tags WHERE name=? `, name) - var result model.TagModel + var result tagEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -178,7 +178,7 @@ func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx r return &result, nil } -func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { +func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -197,9 +197,9 @@ func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, mast tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.TagModelSlice + var result tagEntity.EntitySlice for rows.Next() { - var record model.TagModel + var record tagEntity.Entity err = rows.Scan( &record.ID, &record.Name, @@ -216,7 +216,7 @@ func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, mast return result, nil } -func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { +func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -235,9 +235,9 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.TagModelSlice + var result tagEntity.EntitySlice for rows.Next() { - var record model.TagModel + var record tagEntity.Entity err = rows.Scan( &record.ID, &record.Name, @@ -254,7 +254,7 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master return result, nil } -func checkIsNil(tag *model.TagModel) error { +func checkIsNil(tag *tagEntity.Entity) error { if tag == nil { return werrors.Newf( errors.New("required data(tag) is nil"), diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index dcb2aa8..acc41ef 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -9,10 +9,10 @@ import ( "os" "testing" "time" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -55,7 +55,7 @@ func TestInsert(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -91,13 +91,13 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) @@ -120,7 +120,7 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ ID: 1, Name: name, CreatedAt: &dummyDate, @@ -141,7 +141,7 @@ func TestDownDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ ID: 1, Name: name, CreatedAt: &dummyDate, @@ -149,7 +149,7 @@ func TestDownDeleteFlag(t *testing.T) { DeletedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { tag.DeletedAt = nil @@ -172,13 +172,13 @@ func TestDelete(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) tag.ID = newTagID @@ -207,13 +207,13 @@ func TestSelectByID(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) @@ -231,13 +231,13 @@ func TestSelectByName(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { repo.Insert(ctx, masterTx, tag) @@ -254,7 +254,7 @@ func TestSelectByName(t *testing.T) { ctx := context.Background() name, _ := makeRandomStr(10) - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByName(ctx, masterTx, name) @@ -271,7 +271,7 @@ func TestSelectByWishCardID(t *testing.T) { var err error ctx := context.Background() - var result model.TagModelSlice + var result tagEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByWishCardID(ctx, masterTx, 4) @@ -288,7 +288,7 @@ func TestSelectByMemoryID(t *testing.T) { var err error ctx := context.Background() - var result model.TagModelSlice + var result tagEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByMemoryID(ctx, masterTx, 4) diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index ff5d087..93c6812 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -4,11 +4,13 @@ import ( "context" "database/sql" "errors" + "log" "strings" + placeEntity "wantum/pkg/domain/entity/place" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -23,7 +25,7 @@ func New(txManager repository.MasterTxManager) wishcard.Repository { } } -func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { +func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) (int, error) { if err := checkIsNil(wishCard); err != nil { return 0, err } @@ -43,8 +45,8 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re wishCard.Date, wishCard.CreatedAt, wishCard.UpdatedAt, - wishCard.CategoryID, - wishCard.PlaceID, + categoryID, + wishCard.Place.ID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -58,7 +60,7 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re return int(id), nil } -func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -86,8 +88,8 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re wishCard.Date, wishCard.DoneAt, wishCard.UpdatedAt, - wishCard.CategoryID, - wishCard.PlaceID, + categoryID, + wishCard.Place.ID, wishCard.ID, ) if err != nil { @@ -97,7 +99,7 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re return nil } -func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -129,7 +131,7 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste return nil } -func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -170,18 +172,19 @@ func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx re return nil } -func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { +func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } row := tx.QueryRow(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE id=? `, wishCardID) - var result model.WishCardModel + var result wishCardEntity.Entity + var place placeEntity.Entity err = row.Scan( &result.ID, &result.UserID, @@ -192,17 +195,18 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT &result.CreatedAt, &result.UpdatedAt, &result.DeletedAt, - &result.CategoryID, - &result.PlaceID) + &place.ID) if err != nil { // TODO: これってno rowsでもえらーでおっけえなの? tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + result.Place = &place + log.Println(result.Place) return &result, nil } -func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -210,7 +214,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master } rows, err := tx.Query(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE id IN (` + strings.Join(wishCardIDs, ",") + `) @@ -219,9 +223,10 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice for rows.Next() { - var record model.WishCardModel + var record wishCardEntity.Entity + var place placeEntity.Entity err = rows.Scan( &record.ID, &record.UserID, @@ -232,8 +237,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master &record.CreatedAt, &record.UpdatedAt, &record.DeletedAt, - &record.CategoryID, - &record.PlaceID, + &place.ID, ) if err != nil { if err != sql.ErrNoRows { @@ -242,19 +246,20 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Place = &place result = append(result, &record) } return result, nil } -func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } rows, err := tx.Query(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE category_id=? `, categryID) @@ -262,9 +267,10 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice for rows.Next() { - var record model.WishCardModel + var record wishCardEntity.Entity + var place placeEntity.Entity err = rows.Scan( &record.ID, &record.UserID, @@ -275,8 +281,7 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, &record.CreatedAt, &record.UpdatedAt, &record.DeletedAt, - &record.CategoryID, - &record.PlaceID, + &place.ID, ) if err != nil { if err != sql.ErrNoRows { @@ -285,12 +290,13 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Place = &place result = append(result, &record) } return result, nil } -func checkIsNil(wishCard *model.WishCardModel) error { +func checkIsNil(wishCard *wishCardEntity.Entity) error { if wishCard == nil { return werrors.Newf( errors.New("required data(wishCard) is nil"), diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 31c9fc1..37d5785 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -8,10 +8,11 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" wcrepo "wantum/pkg/domain/repository/wishcard" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -52,19 +53,20 @@ func TestInsert(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, wishCard) + result, err = repo.Insert(ctx, masterTx, wishCard, 1) return err }) assert.NoError(t, err) @@ -77,7 +79,7 @@ func TestInsert(t *testing.T) { var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, nil) + result, err = repo.Insert(ctx, masterTx, nil, 1) return err }) assert.Error(t, err) @@ -89,7 +91,7 @@ func TestUpdate(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ ID: 1, UserID: 1, Activity: dummyActivity, @@ -98,12 +100,13 @@ func TestUpdate(t *testing.T) { DoneAt: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard) + err = repo.Update(ctx, masterTx, wishCard, 1) if err != nil { return err } @@ -119,7 +122,7 @@ func TestUpdate(t *testing.T) { t.Run("success_doneAtがnil", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ ID: 1, UserID: 1, Activity: dummyActivity, @@ -127,12 +130,13 @@ func TestUpdate(t *testing.T) { Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard) + err = repo.Update(ctx, masterTx, wishCard, 1) if err != nil { return err } @@ -149,9 +153,9 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, nil) + err = repo.Update(ctx, masterTx, nil, 1) return err }) assert.Error(t, err) @@ -164,19 +168,20 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID wishCard.DeletedAt = &dummyDate @@ -194,18 +199,19 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID err = repo.UpDeleteFlag(ctx, masterTx, wishCard) @@ -218,7 +224,7 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.UpDeleteFlag(ctx, masterTx, nil) return err @@ -232,7 +238,7 @@ func TestDownDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, @@ -240,12 +246,13 @@ func TestDownDeleteFlag(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID err = repo.DownDeleteFlag(ctx, masterTx, wishCard) @@ -263,7 +270,7 @@ func TestDownDeleteFlag(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.UpDeleteFlag(ctx, masterTx, nil) return err @@ -277,19 +284,20 @@ func TestDelete(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID wishCard.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, wishCard) @@ -314,19 +322,20 @@ func TestSelectByID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) result, err = repo.SelectByID(ctx, masterTx, newID) return err @@ -339,7 +348,7 @@ func TestSelectByID(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByID(ctx, masterTx, -1) return err @@ -356,7 +365,7 @@ func TestSelectByIDs(t *testing.T) { ids := []string{"1", "2", "3"} - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByIDs(ctx, masterTx, ids) @@ -372,28 +381,26 @@ func TestCategoryID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - repo.Insert(ctx, masterTx, wishCard) + repo.Insert(ctx, masterTx, wishCard, 1) result, err = repo.SelectByCategoryID(ctx, masterTx, 1) return err }) assert.NoError(t, err) assert.NotNil(t, result) - for _, row := range result { - assert.Equal(t, 1, row.CategoryID) - } }) t.Run("success_存在しないカテゴリ", func(t *testing.T) { From 88d96104943fdd7887b83bc500fce78f09d72c55 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 21:57:28 +0900 Subject: [PATCH 037/156] fix service of place and tag --- .../place/mock_place/mock_repository.go | 18 +++---- .../tag/mock_tag/mock_repository.go | 24 +++++----- pkg/domain/service/place/service.go | 41 ++++++++-------- pkg/domain/service/place/service_test.go | 20 ++++---- pkg/domain/service/tag/service.go | 47 +++++++++---------- pkg/domain/service/tag/service_test.go | 12 ++--- 6 files changed, 80 insertions(+), 82 deletions(-) diff --git a/pkg/domain/repository/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go index 011273d..3dfe568 100644 --- a/pkg/domain/repository/place/mock_place/mock_repository.go +++ b/pkg/domain/repository/place/mock_place/mock_repository.go @@ -8,8 +8,8 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + place "wantum/pkg/domain/entity/place" repository "wantum/pkg/domain/repository" - model "wantum/pkg/infrastructure/mysql/model" ) // MockRepository is a mock of Repository interface @@ -36,7 +36,7 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) ret0, _ := ret[0].(int) @@ -51,7 +51,7 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, place interface{}) * } // Update mocks base method -func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Update", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -79,7 +79,7 @@ func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, placeID interface{}) } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -93,7 +93,7 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interfac } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -107,10 +107,10 @@ func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, place interf } // SelectByID mocks base method -func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, placeID) - ret0, _ := ret[0].(*model.PlaceModel) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -122,10 +122,10 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, placeID interfac } // SelectAll mocks base method -func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { +func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectAll", ctx, masterTx) - ret0, _ := ret[0].(model.PlaceModelSlice) + ret0, _ := ret[0].(place.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index a906cf0..ab75e21 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -8,8 +8,8 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + tag "wantum/pkg/domain/entity/tag" repository "wantum/pkg/domain/repository" - model "wantum/pkg/infrastructure/mysql/model" ) // MockRepository is a mock of Repository interface @@ -36,7 +36,7 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, tag) ret0, _ := ret[0].(int) @@ -51,7 +51,7 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, tag interface{}) *go } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tag) ret0, _ := ret[0].(error) @@ -65,7 +65,7 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tag interface{ } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tag) ret0, _ := ret[0].(error) @@ -93,10 +93,10 @@ func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tagID interface{}) * } // SelectByID mocks base method -func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, tagID) - ret0, _ := ret[0].(*model.TagModel) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -108,10 +108,10 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{ } // SelectByName mocks base method -func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { +func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByName", ctx, masterTx, name) - ret0, _ := ret[0].(*model.TagModel) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -123,10 +123,10 @@ func (mr *MockRepositoryMockRecorder) SelectByName(ctx, masterTx, name interface } // SelectByWishCardID mocks base method -func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { +func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByWishCardID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(model.TagModelSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -138,10 +138,10 @@ func (mr *MockRepositoryMockRecorder) SelectByWishCardID(ctx, masterTx, wishCard } // SelectByMemoryID mocks base method -func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { +func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByMemoryID", ctx, masterTx, memoryID) - ret0, _ := ret[0].(model.TagModelSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 5f21689..d06911f 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -5,23 +5,22 @@ import ( "fmt" "net/http" "time" - "wantum/pkg/domain/entity" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) - Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) + Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) - GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) - GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) + GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) + GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) } type service struct { @@ -34,9 +33,9 @@ func New(repo place.Repository) Service { } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) { createdAt := time.Now() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: name, CreatedAt: &createdAt, UpdatedAt: &createdAt, @@ -46,12 +45,12 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return nil, werrors.Stack(err) } place.ID = result - return model.ConvertToPlaceEntity(place), nil + return place, nil } // NOTE: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ -func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -64,10 +63,10 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -79,10 +78,10 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -94,7 +93,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { @@ -117,18 +116,18 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac return nil } -func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { +func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) { places, err := s.placeRepository.SelectAll(ctx, masterTx) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceSliceEntity(places), nil + return places, nil } diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index d1dee7c..6d0be1f 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -5,9 +5,9 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place/mock_place" - "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -49,7 +49,7 @@ func TestService_Update(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -72,7 +72,7 @@ func TestService_UpDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -96,7 +96,7 @@ func TestService_DownDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -121,7 +121,7 @@ func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -143,7 +143,7 @@ func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -166,7 +166,7 @@ func TestService_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -188,14 +188,14 @@ func TestService_GetAll(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.PlaceModelSlice{ - &model.PlaceModel{ + dummyData := placeEntity.EntitySlice{ + &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, }, - &model.PlaceModel{ + &placeEntity.Entity{ ID: 2, Name: "shibuya", CreatedAt: &dummyDate, diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index e614149..7de8702 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -5,24 +5,23 @@ import ( "fmt" "net/http" "time" - "wantum/pkg/domain/entity" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) - GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) - GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) - GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) + GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) + GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) + GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) + GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) } type service struct { @@ -35,9 +34,9 @@ func New(repo tag.Repository) Service { } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { createdAt := time.Now() - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &createdAt, UpdatedAt: &createdAt, @@ -47,10 +46,10 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return nil, werrors.Stack(err) } tag.ID = result - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) @@ -62,10 +61,10 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) @@ -77,7 +76,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { @@ -100,34 +99,34 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI return nil } -func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByName(ctx, masterTx, name) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { +func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) { tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagSliceEntity(tags), nil + return tags, nil } -func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { +func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) { tags, err := s.tagRepository.SelectByMemoryID(ctx, masterTx, memoryID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagSliceEntity(tags), nil + return tags, nil } diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 9cb1cf5..4a7023b 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -5,9 +5,9 @@ import ( "os" "testing" "time" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag/mock_tag" - "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -18,14 +18,14 @@ var ( dummyDate time.Time ) -var dummyTagSlice = model.TagModelSlice{ - &model.TagModel{ +var dummyTagSlice = tagEntity.EntitySlice{ + &tagEntity.Entity{ ID: 1, Name: "sampleTag1", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, }, - &model.TagModel{ + &tagEntity.Entity{ ID: 2, Name: "sampleTag2", CreatedAt: &dummyDate, @@ -33,7 +33,7 @@ var dummyTagSlice = model.TagModelSlice{ }, } -var dummyTag = &model.TagModel{ +var dummyTag = &tagEntity.Entity{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, @@ -106,7 +106,7 @@ func TestService_Delete(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummy := &model.TagModel{ + dummy := &tagEntity.Entity{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, From f660495195d0399fe73b4c938c246ba588b842c5 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 29 Aug 2020 18:02:00 +0900 Subject: [PATCH 038/156] define model and entity of place --- pkg/domain/entity/place.go | 14 +++++ pkg/infrastructure/mysql/model/place.go | 40 ++++++++++++++ pkg/infrastructure/mysql/model/place_test.go | 55 ++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 pkg/domain/entity/place.go create mode 100644 pkg/infrastructure/mysql/model/place.go create mode 100644 pkg/infrastructure/mysql/model/place_test.go diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go new file mode 100644 index 0000000..3b1033a --- /dev/null +++ b/pkg/domain/entity/place.go @@ -0,0 +1,14 @@ +package entity + +import "time" + +type Place struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +// TODO: 使わなさそう +type PlaceSlice []*Place diff --git a/pkg/infrastructure/mysql/model/place.go b/pkg/infrastructure/mysql/model/place.go new file mode 100644 index 0000000..db4d44e --- /dev/null +++ b/pkg/infrastructure/mysql/model/place.go @@ -0,0 +1,40 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type PlaceModel struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type PlaceModelSlice []*PlaceModel + +func ConvertToPlaceEntity(place *PlaceModel) *entity.Place { + if place == nil { + return nil + } + return &entity.Place{ + ID: place.ID, + Name: place.Name, + CreatedAt: place.CreatedAt, + UpdatedAt: place.UpdatedAt, + DeletedAt: place.DeletedAt, + } +} + +func ConvertToPlaceSliceEntity(places PlaceModelSlice) entity.PlaceSlice { + if places == nil { + return nil + } + res := make(entity.PlaceSlice, 0, len(places)) + for _, place := range places { + res = append(res, ConvertToPlaceEntity(place)) + } + return res +} diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go new file mode 100644 index 0000000..7b3c45d --- /dev/null +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -0,0 +1,55 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToPlaceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + testData := &PlaceModel{ + ID: 1, + Name: "desney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + result := ConvertToPlaceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.Place{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToPlaceEntity(nil) + assert.Nil(t, result) + }) +} +func TestConvertToPlaceSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + data := &PlaceModel{ + ID: 1, + Name: "desney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + testData := PlaceModelSlice{data, data} + + result := ConvertToPlaceSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.PlaceSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToPlaceSliceEntity(nil) + assert.Nil(t, result) + }) +} From e76bc9b0297c8d98621c5430a2292bea310c124d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 29 Aug 2020 18:02:17 +0900 Subject: [PATCH 039/156] define model and entity of wishCard --- pkg/domain/entity/wish_card.go | 19 ++++++ pkg/infrastructure/mysql/model/wish_card.go | 50 +++++++++++++++ .../mysql/model/wish_card_test.go | 63 +++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 pkg/domain/entity/wish_card.go create mode 100644 pkg/infrastructure/mysql/model/wish_card.go create mode 100644 pkg/infrastructure/mysql/model/wish_card_test.go diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go new file mode 100644 index 0000000..db2613e --- /dev/null +++ b/pkg/domain/entity/wish_card.go @@ -0,0 +1,19 @@ +package entity + +import "time" + +type WishCard struct { + ID int + UserID int + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + Category interface{} // TODO: 未実装 + Place *Place +} + +type WishCardSlice []*WishCard diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go new file mode 100644 index 0000000..7ad4270 --- /dev/null +++ b/pkg/infrastructure/mysql/model/wish_card.go @@ -0,0 +1,50 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type WishCardModel struct { + ID int + UserID int + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + CategoryID int + PlaceID int +} + +type WishCardModelSlice []*WishCardModel + +func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { + if wishCard == nil { + return nil + } + return &entity.WishCard{ + ID: wishCard.ID, + UserID: wishCard.UserID, + Activity: wishCard.Activity, + Description: wishCard.Description, + Date: wishCard.Date, + DoneAt: wishCard.DoneAt, + CreatedAt: wishCard.CreatedAt, + UpdatedAt: wishCard.UpdatedAt, + DeletedAt: wishCard.DeletedAt, + } +} + +func ConvertToWishCardSliceEntity(wishCards WishCardModelSlice) entity.WishCardSlice { + if wishCards == nil { + return nil + } + res := make(entity.WishCardSlice, 0, len(wishCards)) + for _, wishCard := range wishCards { + res = append(res, ConvertToWishCardEntiry(wishCard)) + } + return res +} diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go new file mode 100644 index 0000000..195762a --- /dev/null +++ b/pkg/infrastructure/mysql/model/wish_card_test.go @@ -0,0 +1,63 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToWishCardEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + testData := &WishCardModel{ + ID: 1, + UserID: 1, + Activity: "タピる", + Description: "せつめいーーー", + Date: &date, + DoneAt: nil, + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: nil, + } + + result := ConvertToWishCardEntiry(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.WishCard{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToWishCardEntiry(nil) + assert.Nil(t, result) + }) +} +func TestConvertToWishCardSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) + data := &WishCardModel{ + ID: 1, + UserID: 1, + Activity: "タピる", + Description: "せつめいーーー", + Date: &date, + DoneAt: nil, + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: nil, + } + testData := WishCardModelSlice{data, data} + + result := ConvertToWishCardSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.WishCardSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToWishCardSliceEntity(nil) + assert.Nil(t, result) + }) +} From 49db043552e94f138b255bb53067759732571ccf Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 14:54:19 +0900 Subject: [PATCH 040/156] add place repository --- pkg/domain/repository/place/repository.go | 17 ++ pkg/infrastructure/mysql/place/repository.go | 166 +++++++++++++ .../mysql/place/repository_test.go | 226 ++++++++++++++++++ 3 files changed, 409 insertions(+) create mode 100644 pkg/domain/repository/place/repository.go create mode 100644 pkg/infrastructure/mysql/place/repository.go create mode 100644 pkg/infrastructure/mysql/place/repository_test.go diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go new file mode 100644 index 0000000..4a65494 --- /dev/null +++ b/pkg/domain/repository/place/repository.go @@ -0,0 +1,17 @@ +package place + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + // TODO: intでよくね? + Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) + + Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) + SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go new file mode 100644 index 0000000..0076874 --- /dev/null +++ b/pkg/infrastructure/mysql/place/repository.go @@ -0,0 +1,166 @@ +package place + +import ( + "context" + "database/sql" + "errors" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type placeRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) place.Repository { + return &placeRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + if place == nil { + return nil, werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO places( + name, created_at, updated_at + ) VALUES (?, ?, ?) + `, place.Name, + place.CreatedAt, + place.UpdatedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + place.ID = int(id) + return place, nil +} + +func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET name=?, updated_at=?, deleted_at=? + WHERE id=? + `, place.Name, + place.UpdatedAt, + place.DeletedAt, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM places + WHERE id=? + `, placeID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM places + WHERE id=? + `, placeID) + var result model.PlaceModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT id, name, created_at, updated_at, deleted_at + FROM places + `) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.PlaceModelSlice + for rows.Next() { + var place model.PlaceModel + err = rows.Scan( + &place.ID, + &place.Name, + &place.CreatedAt, + &place.UpdatedAt, + &place.DeletedAt) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &place) + } + return result, nil +} diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go new file mode 100644 index 0000000..0e3196c --- /dev/null +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -0,0 +1,226 @@ +package place + +import ( + "context" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/stretchr/testify/assert" + + _ "github.com/go-sql-driver/mysql" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo place.Repository + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +// repositoryを作ってもらう +func before() { + var err error + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) +} + +// dbのコネクションを閉じる +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, place) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.ID) + }) + + t.Run("failed to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestUpdate(t *testing.T) { + t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + ID: 1, + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, place) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, 1) + return err + }) + + assert.NoError(t, err) + assert.Equal(t, "sample place", result.Name) + }) + + t.Run("failure to update data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, nil) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, 1) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, _ = repo.Insert(ctx, masterTx, place) + + err = repo.Delete(ctx, masterTx, result.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, result.ID) + if err == nil { + return errors.New("削除されたデータが引っかかった") + } + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select by id", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newData, _ := repo.Insert(ctx, masterTx, place) + + result, err = repo.SelectByID(ctx, masterTx, newData.ID) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select by id. id is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newData, _ := repo.Insert(ctx, masterTx, place) + repo.Delete(ctx, masterTx, newData.ID) + + result, err = repo.SelectByID(ctx, masterTx, newData.ID) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectAll(t *testing.T) { + t.Run("success to select all", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.PlaceModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.SelectAll(ctx, masterTx) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} From 35274306c22285843e5ef84622d885c99fc48fda Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 14:57:21 +0900 Subject: [PATCH 041/156] typo --- pkg/infrastructure/mysql/model/place_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go index 7b3c45d..3cb54e1 100644 --- a/pkg/infrastructure/mysql/model/place_test.go +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -13,7 +13,7 @@ func TestConvertToPlaceEntity(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &PlaceModel{ ID: 1, - Name: "desney land", + Name: "disney land", CreatedAt: &date, UpdatedAt: &date, DeletedAt: &date, @@ -35,7 +35,7 @@ func TestConvertToPlaceSliceEntity(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &PlaceModel{ ID: 1, - Name: "desney land", + Name: "disney land", CreatedAt: &date, UpdatedAt: &date, DeletedAt: &date, From 2fda19f051947002a83f0e1d4659102df7745f18 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 15:52:43 +0900 Subject: [PATCH 042/156] add upDeleteFlag on plceRepository --- pkg/domain/repository/place/repository.go | 3 ++ pkg/infrastructure/mysql/place/repository.go | 36 +++++++++++++++++-- .../mysql/place/repository_test.go | 36 ++++++++++++++++++- 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 4a65494..3107fa7 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -11,7 +11,10 @@ type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) } diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 0076874..316f850 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -23,6 +23,7 @@ func New(txManager repository.MasterTxManager) place.Repository { } func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + // NOTE: nilで降りてきた用対策。いらないかも if place == nil { return nil, werrors.Newf( errors.New("required data(place) is nil"), @@ -59,6 +60,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos } func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + // NOTE: nilで降りてきた用対策。いらないかも if place == nil { return werrors.Newf( errors.New("required data(place) is nil"), @@ -74,7 +76,7 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos } _, err = tx.Exec(` UPDATE places - SET name=?, updated_at=?, deleted_at=? + SET name=?, updated_at=? WHERE id=? `, place.Name, place.UpdatedAt, @@ -88,6 +90,36 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos return nil } +func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + // NOTE: nilで降りてきた用対策。いらないかも + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET updated_at=?, deleted_at=? + WHERE id=? + `, place.UpdatedAt, + place.DeletedAt, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -96,7 +128,7 @@ func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repos } _, err = tx.Exec(` DELETE FROM places - WHERE id=? + WHERE id=? and deleted_at is not null `, placeID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 0e3196c..2e04bc1 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -130,6 +130,38 @@ func TestUpdate(t *testing.T) { }) } +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlace, _ := repo.Insert(ctx, masterTx, place) + assert.Nil(t, newPlace.DeletedAt) + + newPlace.DeletedAt = &date + newPlace.UpdatedAt = &date + err = repo.UpDeleteFlag(ctx, masterTx, newPlace) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, newPlace.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, date, result.DeletedAt) + }) +} + func TestDelete(t *testing.T) { t.Run("success to delete", func(t *testing.T) { var err error @@ -143,7 +175,9 @@ func TestDelete(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, _ = repo.Insert(ctx, masterTx, place) + newData, _ := repo.Insert(ctx, masterTx, place) + newData.DeletedAt = &date + repo.UpDeleteFlag(ctx, masterTx, newData) err = repo.Delete(ctx, masterTx, result.ID) if err != nil { From 9787a6c9f9eaef86680e58ab5a9e101c26ea8579 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:08:54 +0900 Subject: [PATCH 043/156] add place servic --- .../service/place/mock_place/mock_service.go | 123 +++++++++++ pkg/domain/service/place/service.go | 116 ++++++++++ pkg/domain/service/place/service_test.go | 200 ++++++++++++++++++ 3 files changed, 439 insertions(+) create mode 100644 pkg/domain/service/place/mock_place/mock_service.go create mode 100644 pkg/domain/service/place/service.go create mode 100644 pkg/domain/service/place/service_test.go diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go new file mode 100644 index 0000000..6a0f129 --- /dev/null +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -0,0 +1,123 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/place/repository.go + +// Package mock_place is a generated GoMock package. +package mock_place + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) + ret0, _ := ret[0].(*model.PlaceModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, place) +} + +// Update mocks base method +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// Update indicates an expected call of Update +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, place) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, placeID) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, place) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, placeID) + ret0, _ := ret[0].(*model.PlaceModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, placeID) +} + +// SelectAll mocks base method +func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectAll", ctx, masterTx) + ret0, _ := ret[0].(model.PlaceModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectAll indicates an expected call of SelectAll +func (mr *MockRepositoryMockRecorder) SelectAll(ctx, masterTx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectAll", reflect.TypeOf((*MockRepository)(nil).SelectAll), ctx, masterTx) +} diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go new file mode 100644 index 0000000..b454fab --- /dev/null +++ b/pkg/domain/service/place/service.go @@ -0,0 +1,116 @@ +package place + +import ( + "context" + "fmt" + "net/http" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) + Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) + + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + + GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) +} + +type service struct { + placeRepository place.Repository +} + +func New(repo place.Repository) Service { + return &service{ + placeRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { + createdAt := time.Now() + place := &model.PlaceModel{ + Name: name, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.placeRepository.Insert(ctx, masterTx, place) + + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(result), nil +} + +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + + updatedAt := time.Now() + place.Name = name + place.UpdatedAt = &updatedAt + err = s.placeRepository.Update(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + place.UpdatedAt = &updatedAt + place.DeletedAt = &updatedAt + err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return werrors.Stack(err) + } + if place.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. placeID=%v", placeID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.placeRepository.Delete(ctx, masterTx, placeID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + +func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { + places, err := s.placeRepository.SelectAll(ctx, masterTx) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceSliceEntity(places), nil +} diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go new file mode 100644 index 0000000..8568631 --- /dev/null +++ b/pkg/domain/service/place/service_test.go @@ -0,0 +1,200 @@ +package place + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place/mock_place" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func after() { +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyResult := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(dummyResult, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "tokyo") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_Update(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.Update(ctx, masterTx, dummyData.ID, "shibuya") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) + +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetAll(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.PlaceModelSlice{ + &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.PlaceModel{ + ID: 2, + Name: "shibuya", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectAll(ctx, masterTx).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetAll(ctx, masterTx) + + assert.NoError(t, err) + assert.NotNil(t, result) +} From e65cfd8732dd42f4a875066b2f9a2ec793596999 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:50:34 +0900 Subject: [PATCH 044/156] =?UTF-8?q?place=20repository:=20create=E3=81=AE?= =?UTF-8?q?=E6=88=BB=E3=82=8A=E5=80=A4=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/place/repository.go | 4 +- pkg/infrastructure/mysql/place/repository.go | 14 +++--- .../mysql/place/repository_test.go | 49 ++++++++----------- 3 files changed, 28 insertions(+), 39 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 3107fa7..bcb7f98 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -6,9 +6,9 @@ import ( "wantum/pkg/infrastructure/mysql/model" ) +// implement: wantum/pkg/infrastructure/mysql/place:placeRepositoryImpletent type Repository interface { - // TODO: intでよくね? - Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) + Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 316f850..8bb6763 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -22,10 +22,10 @@ func New(txManager repository.MasterTxManager) place.Repository { } } -func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも if place == nil { - return nil, werrors.Newf( + return 0, werrors.Newf( errors.New("required data(place) is nil"), werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, @@ -35,7 +35,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } result, err := tx.Exec(` INSERT INTO places( @@ -47,16 +47,15 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } id, err := result.LastInsertId() if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) + return 0, werrors.FromConstant(err, werrors.ServerError) } - place.ID = int(id) - return place, nil + return int(id), nil } func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { @@ -80,7 +79,6 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos WHERE id=? `, place.Name, place.UpdatedAt, - place.DeletedAt, place.ID, ) if err != nil { diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 2e04bc1..372d041 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -56,7 +56,7 @@ func TestInsert(t *testing.T) { UpdatedAt: &date, } - var result *model.PlaceModel + var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.Insert(ctx, masterTx, place) return err @@ -64,21 +64,20 @@ func TestInsert(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) - assert.NotNil(t, result.ID) }) t.Run("failed to insert data. data is nil", func(t *testing.T) { var err error ctx := context.Background() - var result *model.PlaceModel + var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.Insert(ctx, masterTx, nil) return err }) assert.Error(t, err) - assert.Nil(t, result) + assert.Equal(t, 0, result) }) } @@ -106,7 +105,8 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) - assert.Equal(t, "sample place", result.Name) + assert.NotNil(t, result) + // assert.Equal(t, "sample place", result.Name) }) t.Run("failure to update data. data is nil", func(t *testing.T) { @@ -143,22 +143,21 @@ func TestUpDeleteFlag(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newPlace, _ := repo.Insert(ctx, masterTx, place) - assert.Nil(t, newPlace.DeletedAt) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) - newPlace.DeletedAt = &date - newPlace.UpdatedAt = &date - err = repo.UpDeleteFlag(ctx, masterTx, newPlace) + place.ID = newPlaceID + place.DeletedAt = &date + err = repo.UpDeleteFlag(ctx, masterTx, place) if err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, newPlace.ID) + result, _ = repo.SelectByID(ctx, masterTx, place.ID) return nil }) assert.NoError(t, err) - assert.Nil(t, date, result.DeletedAt) + assert.NotNil(t, result.DeletedAt) }) } @@ -175,16 +174,17 @@ func TestDelete(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) - newData.DeletedAt = &date - repo.UpDeleteFlag(ctx, masterTx, newData) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + place.ID = newPlaceID + place.DeletedAt = &date + repo.UpDeleteFlag(ctx, masterTx, place) - err = repo.Delete(ctx, masterTx, result.ID) + err = repo.Delete(ctx, masterTx, place.ID) if err != nil { return err } - result, err = repo.SelectByID(ctx, masterTx, result.ID) + result, err = repo.SelectByID(ctx, masterTx, place.ID) if err == nil { return errors.New("削除されたデータが引っかかった") } @@ -209,9 +209,9 @@ func TestSelectByID(t *testing.T) { var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) + newPlaceID, _ := repo.Insert(ctx, masterTx, place) - result, err = repo.SelectByID(ctx, masterTx, newData.ID) + result, err = repo.SelectByID(ctx, masterTx, newPlaceID) return err }) @@ -222,19 +222,10 @@ func TestSelectByID(t *testing.T) { t.Run("failure to select by id. id is not exist", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) - place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, - } var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newData, _ := repo.Insert(ctx, masterTx, place) - repo.Delete(ctx, masterTx, newData.ID) - - result, err = repo.SelectByID(ctx, masterTx, newData.ID) + result, err = repo.SelectByID(ctx, masterTx, -1) return err }) From 53c89c67a91800e40ddc953f8b227f88e70d475a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 30 Aug 2020 17:56:17 +0900 Subject: [PATCH 045/156] =?UTF-8?q?repository=E3=81=AE=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=AB=E4=BC=B4=E3=81=A3=E3=81=9F=E3=80=81service=E3=81=AE?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/mock_place/mock_service.go | 4 ++-- pkg/domain/service/place/service.go | 3 ++- pkg/domain/service/place/service_test.go | 13 +------------ 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go index 6a0f129..6a92936 100644 --- a/pkg/domain/service/place/mock_place/mock_service.go +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -36,10 +36,10 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (*model.PlaceModel, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) - ret0, _ := ret[0].(*model.PlaceModel) + ret0, _ := ret[0].(int) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index b454fab..2c50132 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -41,11 +41,12 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name UpdatedAt: &createdAt, } result, err := s.placeRepository.Insert(ctx, masterTx, place) + place.ID = result if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(result), nil + return model.ConvertToPlaceEntity(place), nil } func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 8568631..3aabad2 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -21,7 +21,6 @@ var ( func TestMain(m *testing.M) { before() code := m.Run() - after() os.Exit(code) } @@ -30,23 +29,13 @@ func before() { masterTx = repository.NewMockMasterTx() } -func after() { -} - func TestService_Create(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyResult := &model.PlaceModel{ - ID: 1, - Name: "tokyo", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(dummyResult, nil) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) result, err := service.Create(ctx, masterTx, "tokyo") From 93f490fe4282aa122727d58dcfeb76efdcd703a9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 16:06:30 +0900 Subject: [PATCH 046/156] =?UTF-8?q?dry=E3=81=AB=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/place/repository.go | 42 ++++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 8bb6763..d28d673 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -24,14 +24,10 @@ func New(txManager repository.MasterTxManager) place.Repository { func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return 0, werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return 0, err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -60,14 +56,10 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -90,14 +82,10 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { // NOTE: nilで降りてきた用対策。いらないかも - if place == nil { - return werrors.Newf( - errors.New("required data(place) is nil"), - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) + if err := checkIsNil(place); err != nil { + return err } + tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -194,3 +182,15 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re } return result, nil } + +func checkIsNil(place *model.PlaceModel) error { + if place == nil { + return werrors.Newf( + errors.New("required data(place) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} From efcfc13c65b875c35bdc9168d48d89af41539c02 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:06:26 +0900 Subject: [PATCH 047/156] =?UTF-8?q?todo=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=82=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/place.go | 1 - pkg/infrastructure/mysql/place/repository.go | 1 + pkg/infrastructure/mysql/place/repository_test.go | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go index 3b1033a..73e4ee0 100644 --- a/pkg/domain/entity/place.go +++ b/pkg/domain/entity/place.go @@ -10,5 +10,4 @@ type Place struct { DeletedAt *time.Time } -// TODO: 使わなさそう type PlaceSlice []*Place diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index d28d673..d6fa0dc 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -142,6 +142,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r &result.UpdatedAt, &result.DeletedAt) if err != nil { + // TODO: no rows無くて大丈夫? tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 372d041..f612765 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -32,6 +32,7 @@ func TestMain(m *testing.M) { // repositoryを作ってもらう func before() { var err error + // TODO: 環境変数とか使いたい気持ちもする db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") if err != nil { log.Fatal("faild to connect db: ", err) From d1ec4887236ba6d61fb52eb5bbd1ca8ab6e2d4a6 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:07:22 +0900 Subject: [PATCH 048/156] add wishCard repository --- pkg/domain/repository/wish_card/repository.go | 19 ++ .../mysql/wish_card/repository.go | 275 ++++++++++++++++ .../mysql/wish_card/repository_test.go | 306 ++++++++++++++++++ 3 files changed, 600 insertions(+) create mode 100644 pkg/domain/repository/wish_card/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card/repository_test.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go new file mode 100644 index 0000000..8667e72 --- /dev/null +++ b/pkg/domain/repository/wish_card/repository.go @@ -0,0 +1,19 @@ +package wish_card + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) + + Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) + SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go new file mode 100644 index 0000000..a8ae757 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -0,0 +1,275 @@ +package wish_card + +import ( + "context" + "database/sql" + "errors" + "strconv" + "strings" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type wishCardRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) wish_card.Repository { + return &wishCardRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { + if err := checkIsNil(wishCard); err != nil { + return 0, err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO wish_cards( + user_id, activity, description, date, created_at, updated_at, category_id, place_id + ) VALUES (?,?,?,?,?,?,?,?) + `, wishCard.UserID, + wishCard.Activity, + wishCard.Description, + wishCard.Date, + wishCard.CreatedAt, + wishCard.UpdatedAt, + wishCard.CategoryID, + wishCard.PlaceID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + return int(id), nil +} + +func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET + user_id=?, + activity=?, + description=?, + date=?, + done_at=?, + updated_at=?, + category_id=?, + place_id=? + WHERE id=? + `, wishCard.UserID, + wishCard.Activity, + wishCard.Description, + wishCard.Date, + wishCard.DoneAt, + wishCard.UpdatedAt, + wishCard.CategoryID, + wishCard.PlaceID, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET updated_at=?, deleted_at=? + WHERE id=? + `, wishCard.UpdatedAt, + wishCard.DeletedAt, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards + WHERE id=? and deleted_at is not null + `, wishCardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE id=? + `, wishCardID) + var result model.WishCardModel + err = row.Scan( + &result.ID, + &result.UserID, + &result.Activity, + &result.Description, + &result.Date, + &result.DoneAt, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + &result.CategoryID, + &result.PlaceID) + if err != nil { + // TODO: これってno rowsでもえらーでおっけえなの? + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + wishCardStrIDs := make([]string, 0, len(wishCardIDs)) + for _, id := range wishCardIDs { + wishCardStrIDs = append(wishCardStrIDs, strconv.Itoa(id)) + } + rows, err := tx.Query(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE id + IN (` + strings.Join(wishCardStrIDs, ",") + `) + `) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.WishCardModelSlice + for rows.Next() { + var record model.WishCardModel + err = rows.Scan( + &record.ID, + &record.UserID, + &record.Activity, + &record.Description, + &record.Date, + &record.DoneAt, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + &record.CategoryID, + &record.PlaceID, + ) + if err != nil { + if err != sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + FROM wish_cards + WHERE category_id=? + `, categryID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.WishCardModelSlice + for rows.Next() { + var record model.WishCardModel + err = rows.Scan( + &record.ID, + &record.UserID, + &record.Activity, + &record.Description, + &record.Date, + &record.DoneAt, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + &record.CategoryID, + &record.PlaceID, + ) + if err != nil { + if err != sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func checkIsNil(wishCard *model.WishCardModel) error { + if wishCard == nil { + return werrors.Newf( + errors.New("required data(wishCard) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go new file mode 100644 index 0000000..8a81af9 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -0,0 +1,306 @@ +package wish_card + +import ( + "context" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + wcrepo "wantum/pkg/domain/repository/wish_card" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo wcrepo.Repository +var dummyDate time.Time + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, wishCard) + return err + }) + assert.NoError(t, err) + assert.NotEqual(t, 0, result) + }) + + t.Run("failure to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Equal(t, 0, result) + }) +} + +func TestUpdate(t *testing.T) { + t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, wishCard) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, "なんかしたい", result.Activity) + }) + + t.Run("failure to update data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) + +} + +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + wishCard.DeletedAt = &dummyDate + err = repo.UpDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return err + } + result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result.DeletedAt) + }) + + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to up delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + wishCard.ID = newID + wishCard.DeletedAt = &dummyDate + repo.UpDeleteFlag(ctx, masterTx, wishCard) + + err = repo.Delete(ctx, masterTx, wishCard.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, wishCard.ID) + if err == nil { + return errors.New("削除されたデータが見つかった") + } + return nil + }) + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + result, err = repo.SelectByID(ctx, masterTx, newID) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select data. data is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.SelectByID(ctx, masterTx, -1) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByIDs(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + + ids := []int{1, 2, 3} + + var result model.WishCardModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByIDs(ctx, masterTx, ids) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 3, len(result)) + }) +} + +func TestCategoryID(t *testing.T) { + t.Run("success to select data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result model.WishCardModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + repo.Insert(ctx, masterTx, wishCard) + + result, err = repo.SelectByCategoryID(ctx, masterTx, 1) + return err + }) + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("success to select data. category is not exist", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + _, err = repo.SelectByCategoryID(ctx, masterTx, -1) + return err + }) + assert.NoError(t, err) + }) +} From 5b8ec08dd60b7a1d36a0c973d31a75d1d021eb11 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 18:15:39 +0900 Subject: [PATCH 049/156] =?UTF-8?q?ids=E3=81=AE=E5=A4=89=E6=8F=9B=E3=81=AF?= =?UTF-8?q?service=E3=81=A7=E3=82=84=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/wish_card/repository.go | 2 +- pkg/infrastructure/mysql/wish_card/repository.go | 10 +++------- pkg/infrastructure/mysql/wish_card/repository_test.go | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go index 8667e72..8b64de8 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wish_card/repository.go @@ -14,6 +14,6 @@ type Repository interface { UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) - SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) } diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go index a8ae757..e03b7bd 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "errors" - "strconv" "strings" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wish_card" @@ -171,21 +170,18 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT return &result, nil } -func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - wishCardStrIDs := make([]string, 0, len(wishCardIDs)) - for _, id := range wishCardIDs { - wishCardStrIDs = append(wishCardStrIDs, strconv.Itoa(id)) - } + rows, err := tx.Query(` SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id FROM wish_cards WHERE id - IN (` + strings.Join(wishCardStrIDs, ",") + `) + IN (` + strings.Join(wishCardIDs, ",") + `) `) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go index 8a81af9..a83c59b 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -253,7 +253,7 @@ func TestSelectByIDs(t *testing.T) { var err error ctx := context.Background() - ids := []int{1, 2, 3} + ids := []string{"1", "2", "3"} var result model.WishCardModelSlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { From aebfe274ce31b0c379bdcf08188ff6938d5724f7 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 21:56:31 +0900 Subject: [PATCH 050/156] move mock repository of place --- pkg/domain/service/place/service.go | 5 +++-- pkg/domain/service/place/service_test.go | 2 +- .../mysql/place/mock_place/mock_repository.go} | 0 3 files changed, 4 insertions(+), 3 deletions(-) rename pkg/{domain/service/place/mock_place/mock_service.go => infrastructure/mysql/place/mock_place/mock_repository.go} (100%) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 2c50132..3b7a3e7 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -41,14 +41,15 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name UpdatedAt: &createdAt, } result, err := s.placeRepository.Insert(ctx, masterTx, place) - place.ID = result - if err != nil { return nil, werrors.Stack(err) } + place.ID = result return model.ConvertToPlaceEntity(place), nil } +// NOTE: 空値があった時、元データが消滅する。 +// NOTE: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 3aabad2..62b5b11 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/infrastructure/mysql/place/mock_place" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go similarity index 100% rename from pkg/domain/service/place/mock_place/mock_service.go rename to pkg/infrastructure/mysql/place/mock_place/mock_repository.go From 1d8abcc1a2935188992800e2b2b347181606f78b Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:03:16 +0900 Subject: [PATCH 051/156] add down delete flag in repository of place --- pkg/domain/repository/place/repository.go | 1 + .../mysql/place/mock_place/mock_repository.go | 14 ++++ pkg/infrastructure/mysql/place/repository.go | 33 ++++++++++ .../mysql/place/repository_test.go | 66 +++++++++++++++---- 4 files changed, 101 insertions(+), 13 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index bcb7f98..1ea17e9 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -14,6 +14,7 @@ type Repository interface { Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) diff --git a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go index 6a92936..011273d 100644 --- a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go +++ b/pkg/infrastructure/mysql/place/mock_place/mock_repository.go @@ -92,6 +92,20 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interfac return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, place) } +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, place) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, place) +} + // SelectByID mocks base method func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { m.ctrl.T.Helper() diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index d6fa0dc..2b8f452 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -85,6 +85,14 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx if err := checkIsNil(place); err != nil { return err } + if place.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -106,6 +114,31 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx return nil } +func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { + if err := checkIsNil(place); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET updated_at=?, deleted_at=? + WHERE id=? + `, place.UpdatedAt, + nil, + place.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index f612765..12983dd 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -160,6 +160,59 @@ func TestUpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result.DeletedAt) }) + + t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + } + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + + place.ID = newPlaceID + err = repo.UpDeleteFlag(ctx, masterTx, place) + return err + }) + + assert.Error(t, err) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + place := &model.PlaceModel{ + Name: "sample place", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + var result *model.PlaceModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newPlaceID, _ := repo.Insert(ctx, masterTx, place) + + place.ID = newPlaceID + place.DeletedAt = nil + err = repo.DownDeleteFlag(ctx, masterTx, place) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, place.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) } func TestDelete(t *testing.T) { @@ -220,19 +273,6 @@ func TestSelectByID(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select by id. id is not exist", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *model.PlaceModel - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.SelectByID(ctx, masterTx, -1) - return err - }) - - assert.Error(t, err) - assert.Nil(t, result) - }) } func TestSelectAll(t *testing.T) { From 3fe66937fe8023d607866d2b1d278f15debfa9b5 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:11:30 +0900 Subject: [PATCH 052/156] add down flag in repository of wish_card --- pkg/domain/repository/wish_card/repository.go | 3 + .../mock_wish_card/mock_repository.go | 152 ++++++++++++++++++ .../mysql/wish_card/repository.go | 32 ++++ .../mysql/wish_card/repository_test.go | 101 ++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wish_card/repository.go index 8b64de8..5196dfd 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wish_card/repository.go @@ -12,8 +12,11 @@ type Repository interface { Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) + // TODO: SelectByCategoryIDsあっても良いかもと思ったが? } diff --git a/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go b/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go new file mode 100644 index 0000000..0524c60 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go @@ -0,0 +1,152 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/wish_card/repository.go + +// Package mock_wish_card is a generated GoMock package. +package mock_wish_card + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCard) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCard) +} + +// Update mocks base method +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// Update indicates an expected call of Update +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, wishCard) +} + +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCard) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, wishCard) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCardID) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*model.WishCardModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, wishCardID) +} + +// SelectByIDs mocks base method +func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByIDs", ctx, masterTx, wishCardIDs) + ret0, _ := ret[0].(model.WishCardModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByIDs indicates an expected call of SelectByIDs +func (mr *MockRepositoryMockRecorder) SelectByIDs(ctx, masterTx, wishCardIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByIDs", reflect.TypeOf((*MockRepository)(nil).SelectByIDs), ctx, masterTx, wishCardIDs) +} + +// SelectByCategoryID mocks base method +func (m *MockRepository) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByCategoryID", ctx, masterTx, categryID) + ret0, _ := ret[0].(model.WishCardModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByCategoryID indicates an expected call of SelectByCategoryID +func (mr *MockRepositoryMockRecorder) SelectByCategoryID(ctx, masterTx, categryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByCategoryID", reflect.TypeOf((*MockRepository)(nil).SelectByCategoryID), ctx, masterTx, categryID) +} diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wish_card/repository.go index e03b7bd..8a72e65 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wish_card/repository.go @@ -101,6 +101,14 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste if err := checkIsNil(wishCard); err != nil { return err } + if wishCard.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -121,6 +129,30 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste return nil } +func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { + if err := checkIsNil(wishCard); err != nil { + return err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET updated_at=?, deleted_at=? + WHERE id=? + `, wishCard.UpdatedAt, + nil, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wish_card/repository_test.go index a83c59b..1cc589a 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wish_card/repository_test.go @@ -84,6 +84,36 @@ func TestInsert(t *testing.T) { func TestUpdate(t *testing.T) { t.Run("success to update data", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Update(ctx, masterTx, wishCard) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, "なんかしたい", result.Activity) + }) + + t.Run("success to update data. done at is null", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ @@ -158,6 +188,74 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) + t.Run("failure to up delete flag. flag is nil", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + err = repo.UpDeleteFlag(ctx, masterTx, wishCard) + return err + }) + assert.Error(t, err) + }) + + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, nil) + return err + }) + assert.Error(t, err) + assert.Nil(t, result) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down delete flag", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &model.WishCardModel{ + UserID: 1, + Activity: "なんかしたい", + Description: "何かがしたい", + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + } + var result *model.WishCardModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newID, _ := repo.Insert(ctx, masterTx, wishCard) + + wishCard.ID = newID + err = repo.DownDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return err + } + result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) + return nil + }) + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) + t.Run("failure to up delete flag. data is nil", func(t *testing.T) { var err error ctx := context.Background() @@ -290,6 +388,9 @@ func TestCategoryID(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) + for _, row := range result { + assert.Equal(t, 1, row.CategoryID) + } }) t.Run("success to select data. category is not exist", func(t *testing.T) { From 2ba3b4b2abfbee1778aae13e90e33ec1d59ca9bf Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:21:13 +0900 Subject: [PATCH 053/156] add down flag in service of place --- pkg/domain/service/place/service.go | 16 +++++++++++++++ pkg/domain/service/place/service_test.go | 26 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 3b7a3e7..564e552 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -18,6 +18,7 @@ type Service interface { Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) @@ -81,6 +82,21 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx return model.ConvertToPlaceEntity(place), nil } +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + place.UpdatedAt = &updatedAt + place.DeletedAt = nil + err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToPlaceEntity(place), nil +} + func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 62b5b11..a632819 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -88,6 +88,32 @@ func TestService_UpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.PlaceModel{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) } func TestService_Delete(t *testing.T) { From 81479a25a4da4a26f457df816d074fd862267e76 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 2 Sep 2020 23:25:47 +0900 Subject: [PATCH 054/156] add service of wish_card --- pkg/domain/service/wish_card/service.go | 158 ++++++++++ pkg/domain/service/wish_card/service_test.go | 308 +++++++++++++++++++ 2 files changed, 466 insertions(+) create mode 100644 pkg/domain/service/wish_card/service.go create mode 100644 pkg/domain/service/wish_card/service_test.go diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wish_card/service.go new file mode 100644 index 0000000..f613ac1 --- /dev/null +++ b/pkg/domain/service/wish_card/service.go @@ -0,0 +1,158 @@ +package wish_card + +import ( + "context" + "fmt" + "net/http" + "strconv" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) + Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) + + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + + GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) + GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) +} + +type service struct { + wishCardRepository wish_card.Repository +} + +func New(repo wish_card.Repository) Service { + return &service{ + wishCardRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + createdAt := time.Now() + wishCard := &model.WishCardModel{ + UserID: userID, + Activity: activity, + Description: description, + Date: date, + CategoryID: categoryID, + PlaceID: placeID, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard) + if err != nil { + return nil, err + } + wishCard.ID = result + return model.ConvertToWishCardEntiry(wishCard), nil +} + +// NOTE: 空値があった時、元データが消滅する。 +// NOTE: リクエストは、全フィールド埋める or 差分だけ +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.Activity = activity + wishCard.Description = description + wishCard.Date = date + wishCard.DoneAt = doneAt + wishCard.CategoryID = categoryID + wishCard.PlaceID = placeID + wishCard.UpdatedAt = &updatedAt + + err = s.wishCardRepository.Update(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.UpdatedAt = &updatedAt + wishCard.DeletedAt = &updatedAt + err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.UpdatedAt = &updatedAt + wishCard.DeletedAt = nil + err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + if wishCard.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. wishCardID=%v", wishCardID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.wishCardRepository.Delete(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardEntiry(wishCard), nil +} + +func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { + idList := make([]string, 0, len(wishCardIDs)) + for _, id := range wishCardIDs { + idList = append(idList, strconv.Itoa(id)) + } + wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, idList) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardSliceEntity(wishCards), nil +} + +func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { + wishCards, err := s.wishCardRepository.SelectByCategoryID(ctx, masterTx, categoryID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToWishCardSliceEntity(wishCards), nil +} diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wish_card/service_test.go new file mode 100644 index 0000000..5c009e8 --- /dev/null +++ b/pkg/domain/service/wish_card/service_test.go @@ -0,0 +1,308 @@ +package wish_card + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/infrastructure/mysql/wish_card/mock_wish_card" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "activity", "desc", &dummyDate, 1, 1, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 1, result.ID) +} + +func TestService_Update(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.Update(ctx, masterTx, 1, "activity", "desc", &dummyDate, &dummyDate, 1, 1, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, 1) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up a delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByIDs(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.WishCardModelSlice{ + &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.WishCardModel{ + ID: 2, + UserID: 1, + Activity: "activity2", + Description: "desc2", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 2, + PlaceID: 2, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByIDs(ctx, masterTx, []string{"1", "2"}).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 2, len(result)) +} + +func TestService_GetByCategoryID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.WishCardModelSlice{ + &model.WishCardModel{ + ID: 1, + UserID: 1, + Activity: "activity", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.WishCardModel{ + ID: 2, + UserID: 1, + Activity: "activity2", + Description: "desc2", + Date: &dummyDate, + DoneAt: &dummyDate, + CategoryID: 1, + PlaceID: 2, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + + repo := mock_wish_card.NewMockRepository(ctrl) + repo.EXPECT().SelectByCategoryID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByCategoryID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 2, len(result)) +} From f5a7297f22562c225cf3309caa919d2db0508185 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 11:25:34 +0900 Subject: [PATCH 055/156] add entity and model of tag --- pkg/domain/entity/Tag.go | 13 +++++ pkg/infrastructure/mysql/model/tag.go | 40 ++++++++++++++++ pkg/infrastructure/mysql/model/tag_test.go | 55 ++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 pkg/domain/entity/Tag.go create mode 100644 pkg/infrastructure/mysql/model/tag.go create mode 100644 pkg/infrastructure/mysql/model/tag_test.go diff --git a/pkg/domain/entity/Tag.go b/pkg/domain/entity/Tag.go new file mode 100644 index 0000000..0b394cb --- /dev/null +++ b/pkg/domain/entity/Tag.go @@ -0,0 +1,13 @@ +package entity + +import "time" + +type Tag struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type TagSlice []*Tag diff --git a/pkg/infrastructure/mysql/model/tag.go b/pkg/infrastructure/mysql/model/tag.go new file mode 100644 index 0000000..dd06839 --- /dev/null +++ b/pkg/infrastructure/mysql/model/tag.go @@ -0,0 +1,40 @@ +package model + +import ( + "time" + "wantum/pkg/domain/entity" +) + +type TagModel struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type TagModelSlice []*TagModel + +func ConvertToTagEntity(tag *TagModel) *entity.Tag { + if tag == nil { + return nil + } + return &entity.Tag{ + ID: tag.ID, + Name: tag.Name, + CreatedAt: tag.CreatedAt, + UpdatedAt: tag.UpdatedAt, + DeletedAt: tag.DeletedAt, + } +} + +func ConvertToTagSliceEntity(tags TagModelSlice) entity.TagSlice { + if tags == nil { + return nil + } + result := make(entity.TagSlice, 0, len(tags)) + for _, tag := range tags { + result = append(result, ConvertToTagEntity(tag)) + } + return result +} diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go new file mode 100644 index 0000000..7cd2084 --- /dev/null +++ b/pkg/infrastructure/mysql/model/tag_test.go @@ -0,0 +1,55 @@ +package model + +import ( + "testing" + "time" + "wantum/pkg/domain/entity" + + "github.com/stretchr/testify/assert" +) + +func TestConvertToTagEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) + testData := &TagModel{ + ID: 1, + Name: "disney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + + result := ConvertToTagEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, &entity.Tag{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToTagEntity(nil) + assert.Nil(t, result) + }) +} +func TestConvertToTagSliceEntity(t *testing.T) { + t.Run("ver success", func(t *testing.T) { + date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) + data := &TagModel{ + ID: 1, + Name: "disney land", + CreatedAt: &date, + UpdatedAt: &date, + DeletedAt: &date, + } + testData := TagModelSlice{data, data} + + result := ConvertToTagSliceEntity(testData) + + assert.NotNil(t, result) + assert.IsType(t, entity.TagSlice{}, result) + }) + + t.Run("ver nil", func(t *testing.T) { + result := ConvertToTagSliceEntity(nil) + assert.Nil(t, result) + }) +} From ba3cac6a9f12c32b4d1c7fe5fc4be3bb5c27d622 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:20:06 +0900 Subject: [PATCH 056/156] move mock of repository --- .../repository}/place/mock_place/mock_repository.go | 0 .../repository}/wish_card/mock_wish_card/mock_repository.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename pkg/{infrastructure/mysql => domain/repository}/place/mock_place/mock_repository.go (100%) rename pkg/{infrastructure/mysql => domain/repository}/wish_card/mock_wish_card/mock_repository.go (100%) diff --git a/pkg/infrastructure/mysql/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go similarity index 100% rename from pkg/infrastructure/mysql/place/mock_place/mock_repository.go rename to pkg/domain/repository/place/mock_place/mock_repository.go diff --git a/pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go b/pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go similarity index 100% rename from pkg/infrastructure/mysql/wish_card/mock_wish_card/mock_repository.go rename to pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go From 8e8a9713980829340badef59d1e06d32edf09e4e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:20:40 +0900 Subject: [PATCH 057/156] add tag repository --- pkg/domain/repository/tag/repository.go | 19 ++ pkg/infrastructure/mysql/tag/repository.go | 241 +++++++++++++++ .../mysql/tag/repository_test.go | 276 ++++++++++++++++++ 3 files changed, 536 insertions(+) create mode 100644 pkg/domain/repository/tag/repository.go create mode 100644 pkg/infrastructure/mysql/tag/repository.go create mode 100644 pkg/infrastructure/mysql/tag/repository_test.go diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go new file mode 100644 index 0000000..44d3246 --- /dev/null +++ b/pkg/domain/repository/tag/repository.go @@ -0,0 +1,19 @@ +package tag + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/infrastructure/mysql/model" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + + SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) + SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) + SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) +} diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go new file mode 100644 index 0000000..64c3ba8 --- /dev/null +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -0,0 +1,241 @@ +package tag + +import ( + "context" + "database/sql" + "errors" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type tagRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) tag.Repository { + return &tagRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { + if err := checkIsNil(tag); err != nil { + return 0, err + } + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + result, err := tx.Exec(` + INSERT INTO tags(name, created_at, updated_at) + VALUES (?,?,?) + `, tag.Name, + tag.CreatedAt, + tag.UpdatedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + id, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return 0, werrors.FromConstant(err, werrors.ServerError) + } + return int(id), nil +} + +func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + // NOTE: nilで降りてきた用対策。いらないかも + if err := checkIsNil(tag); err != nil { + return err + } + if tag.DeletedAt == nil { + return werrors.Newf( + errors.New("deletedAt is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE tags + SET updated_at=?, deleted_at=? + WHERE id=? + `, tag.UpdatedAt, + tag.DeletedAt, + tag.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + if err := checkIsNil(tag); err != nil { + return err + } + + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE tags + SET updated_at=?, deleted_at=? + WHERE id=? + `, tag.UpdatedAt, + nil, + tag.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM tags + WHERE id=? and deleted_at is not null + `, tagID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM tags + WHERE id=? + `, tagID) + var result model.TagModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + +func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT tags.id, tags.name, tags.created_at, tags.updated_at, tags.deleted_at + FROM wish_cards_tags as r + INNER JOIN tags ON tags.id = r.tag_id + WHERE r.wish_card_id=? + `, wishCardID) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.TagModelSlice + for rows.Next() { + var record model.TagModel + err = rows.Scan( + &record.ID, + &record.Name, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + rows, err := tx.Query(` + SELECT tags.id, tags.name, tags.created_at, tags.updated_at, tags.deleted_at + FROM memories_tags as r + INNER JOIN tags ON tags.id = r.tag_id + WHERE r.memory_id=? + `, memoryID) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result model.TagModelSlice + for rows.Next() { + var record model.TagModel + err = rows.Scan( + &record.ID, + &record.Name, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + +func checkIsNil(tag *model.TagModel) error { + if tag == nil { + return werrors.Newf( + errors.New("required data(tag) is nil"), + werrors.ServerError.ErrorCode, + werrors.ServerError.ErrorMessageJP, + werrors.ServerError.ErrorMessageEN, + ) + } + return nil +} diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go new file mode 100644 index 0000000..d8e53c7 --- /dev/null +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -0,0 +1,276 @@ +package tag + +import ( + "context" + "crypto/rand" + "database/sql" + "errors" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/infrastructure/mysql/model" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var ( + db *sql.DB + txManager repository.MasterTxManager + repo tag.Repository + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +// repositoryを作ってもらう +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +// dbのコネクションを閉じる +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, tag) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failed to insert data. data is nil", func(t *testing.T) { + var err error + ctx := context.Background() + + var result int + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + result, err = repo.Insert(ctx, masterTx, nil) + return err + }) + + assert.Error(t, err) + assert.Equal(t, 0, result) + }) +} + +func TestUpDeleteFlag(t *testing.T) { + t.Run("success to up deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + + tag.ID = newTagID + tag.DeletedAt = &dummyDate + err = repo.UpDeleteFlag(ctx, masterTx, tag) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + return nil + }) + + assert.NoError(t, err) + assert.NotNil(t, result.DeletedAt) + }) + + t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + ID: 1, + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.UpDeleteFlag(ctx, masterTx, tag) + return err + }) + + assert.Error(t, err) + }) +} + +func TestDownDeleteFlag(t *testing.T) { + t.Run("success to down deleteFlag", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + ID: 1, + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + tag.DeletedAt = nil + err = repo.DownDeleteFlag(ctx, masterTx, tag) + if err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result.DeletedAt) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + tag.ID = newTagID + tag.DeletedAt = &dummyDate + repo.UpDeleteFlag(ctx, masterTx, tag) + + err = repo.Delete(ctx, masterTx, tag.ID) + if err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, tag.ID) + if err == nil { + return errors.New("削除されたデータが引っかかった") + } + return nil + }) + + assert.NoError(t, err) + assert.Nil(t, result) + }) +} + +func TestSelectByID(t *testing.T) { + t.Run("success to select by id", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + newTagID, _ := repo.Insert(ctx, masterTx, tag) + + result, err = repo.SelectByID(ctx, masterTx, newTagID) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestSelectByWishCardID(t *testing.T) { + t.Run("success to select by wishCardID", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.TagModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByWishCardID(ctx, masterTx, 4) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestSelectByMemoryID(t *testing.T) { + t.Run("success to select by wishCardID", func(t *testing.T) { + var err error + ctx := context.Background() + + var result model.TagModelSlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByMemoryID(ctx, masterTx, 4) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func makeRandomStr(digit uint32) (string, error) { + const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + + b := make([]byte, digit) + if _, err := rand.Read(b); err != nil { + return "", errors.New("unexpected error...") + } + + var result string + for _, v := range b { + result += string(letters[int(v)%len(letters)]) + } + return result, nil +} From f08f5d6e66865ac9ee32598428a379ca9f144c4e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:54:27 +0900 Subject: [PATCH 058/156] add service of tag --- .../tag/mock_tag/mock_repository.go | 138 +++++++++++ pkg/domain/service/tag/service.go | 124 ++++++++++ pkg/domain/service/tag/service_test.go | 218 ++++++++++++++++++ 3 files changed, 480 insertions(+) create mode 100644 pkg/domain/repository/tag/mock_tag/mock_repository.go create mode 100644 pkg/domain/service/tag/service.go create mode 100644 pkg/domain/service/tag/service_test.go diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go new file mode 100644 index 0000000..f2f0c66 --- /dev/null +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -0,0 +1,138 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/tag/repository.go + +// Package mock_tag is a generated GoMock package. +package mock_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" + model "wantum/pkg/infrastructure/mysql/model" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, tag) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, tag) +} + +// UpDeleteFlag mocks base method +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tag) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, tag) +} + +// DownDeleteFlag mocks base method +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tag) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, tag) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, tagID) +} + +// SelectByID mocks base method +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, tagID) + ret0, _ := ret[0].(*model.TagModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByID indicates an expected call of SelectByID +func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, tagID) +} + +// SelectByWishCardID mocks base method +func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(model.TagModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByWishCardID indicates an expected call of SelectByWishCardID +func (mr *MockRepositoryMockRecorder) SelectByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByWishCardID", reflect.TypeOf((*MockRepository)(nil).SelectByWishCardID), ctx, masterTx, wishCardID) +} + +// SelectByMemoryID mocks base method +func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByMemoryID", ctx, masterTx, memoryID) + ret0, _ := ret[0].(model.TagModelSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByMemoryID indicates an expected call of SelectByMemoryID +func (mr *MockRepositoryMockRecorder) SelectByMemoryID(ctx, masterTx, memoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByMemoryID", reflect.TypeOf((*MockRepository)(nil).SelectByMemoryID), ctx, masterTx, memoryID) +} diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go new file mode 100644 index 0000000..4609b67 --- /dev/null +++ b/pkg/domain/service/tag/service.go @@ -0,0 +1,124 @@ +package tag + +import ( + "context" + "fmt" + "net/http" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag" + "wantum/pkg/infrastructure/mysql/model" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) + + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + + GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) + GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) +} + +type service struct { + tagRepository tag.Repository +} + +func New(repo tag.Repository) Service { + return &service{ + tagRepository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + createdAt := time.Now() + tag := &model.TagModel{ + Name: name, + CreatedAt: &createdAt, + UpdatedAt: &createdAt, + } + result, err := s.tagRepository.Insert(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + tag.ID = result + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + tag.UpdatedAt = &updatedAt + tag.DeletedAt = &updatedAt + err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + tag.UpdatedAt = &updatedAt + tag.DeletedAt = nil + err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return werrors.Stack(err) + } + if tag.DeletedAt == nil { + return werrors.Newf( + fmt.Errorf("can't delete this data. this data did not up a delete flag. tagID=%v", tagID), + http.StatusBadRequest, + "このデータは削除できません", + "could not delete this place", + ) + } + err = s.tagRepository.Delete(ctx, masterTx, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + +func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { + tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagSliceEntity(tags), nil +} + +func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { + tags, err := s.tagRepository.SelectByMemoryID(ctx, masterTx, memoryID) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagSliceEntity(tags), nil +} diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go new file mode 100644 index 0000000..6d19c54 --- /dev/null +++ b/pkg/domain/service/tag/service_test.go @@ -0,0 +1,218 @@ +package tag + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/tag/mock_tag" + "wantum/pkg/infrastructure/mysql/model" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + dummyDate time.Time +) + +func TestMain(m *testing.M) { + before() + code := m.Run() + os.Exit(code) +} + +func before() { + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + masterTx = repository.NewMockMasterTx() +} + +func TestService_Create(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) + + service := New(repo) + result, err := service.Create(ctx, masterTx, "sample tag") + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_UpDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "sample tag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) +} + +func TestService_DownDeleteFlag(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "samleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DeletedAt) +} + +func TestService_Delete(t *testing.T) { + t.Run("success to delete", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.NoError(t, err) + }) + + t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + err := service.Delete(ctx, masterTx, 1) + + assert.Error(t, err) + }) +} + +func TestService_GetByID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByID(ctx, masterTx, dummyData.ID) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByWishCardID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByWishCardID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestService_GetByMemoryID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } + repo := mock_tag.NewMockRepository(ctrl) + repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyData, nil) + + service := New(repo) + result, err := service.GetByMemoryID(ctx, masterTx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) +} From 4f980f833897b2ee4242336b7261720a40029822 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:56:16 +0900 Subject: [PATCH 059/156] change comment --- pkg/domain/service/place/service.go | 2 +- pkg/domain/service/place/service_test.go | 2 +- pkg/domain/service/wish_card/service.go | 2 +- pkg/domain/service/wish_card/service_test.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 564e552..5f21689 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -50,7 +50,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name } // NOTE: 空値があった時、元データが消滅する。 -// NOTE: リクエストは、全フィールド埋める or 差分だけ +// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index a632819..c6abf04 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place/mock_place" "wantum/pkg/infrastructure/mysql/model" - "wantum/pkg/infrastructure/mysql/place/mock_place" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wish_card/service.go index f613ac1..54b88b4 100644 --- a/pkg/domain/service/wish_card/service.go +++ b/pkg/domain/service/wish_card/service.go @@ -57,7 +57,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti } // NOTE: 空値があった時、元データが消滅する。 -// NOTE: リクエストは、全フィールド埋める or 差分だけ +// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wish_card/service_test.go index 5c009e8..3f731d9 100644 --- a/pkg/domain/service/wish_card/service_test.go +++ b/pkg/domain/service/wish_card/service_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card/mock_wish_card" "wantum/pkg/infrastructure/mysql/model" - "wantum/pkg/infrastructure/mysql/wish_card/mock_wish_card" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" From 77f7895b9a3699f4e25ae687cf07937fb520b198 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 3 Sep 2020 14:57:10 +0900 Subject: [PATCH 060/156] add tag in wishCard entity --- pkg/domain/entity/wish_card.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go index db2613e..9f37bbb 100644 --- a/pkg/domain/entity/wish_card.go +++ b/pkg/domain/entity/wish_card.go @@ -12,8 +12,8 @@ type WishCard struct { CreatedAt *time.Time UpdatedAt *time.Time DeletedAt *time.Time - Category interface{} // TODO: 未実装 Place *Place + Tags TagSlice } type WishCardSlice []*WishCard From 73f0721657837ff320a86814faec3d18c094afbb Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 12:22:57 +0900 Subject: [PATCH 061/156] usecase --- pkg/api/usecase/wish_card/interactor.go | 201 ++++++++++ pkg/api/usecase/wish_card/interactor_test.go | 375 ++++++++++++++++++ .../tag/mock_tag/mock_repository.go | 15 + pkg/domain/repository/tag/repository.go | 1 + .../mock_wish_card_tag/mock_repository.go | 91 +++++ .../repository/wish_card_tag/repository.go | 13 + .../service/place/mock_place/mock_service.go | 140 +++++++ .../service/tag/mock_tag/mock_service.go | 155 ++++++++ pkg/domain/service/tag/service.go | 9 + .../wish_card/mock_wish_card/mock_service.go | 156 ++++++++ .../mock_wish_card_tag/mock_service.go | 91 +++++ pkg/domain/service/wish_card_tag/service.go | 57 +++ pkg/infrastructure/mysql/model/wish_card.go | 3 + pkg/infrastructure/mysql/tag/repository.go | 26 ++ .../mysql/tag/repository_test.go | 40 ++ .../mysql/wish_card_tag/repository.go | 100 +++++ .../mysql/wish_card_tag/repository_test.go | 96 +++++ 17 files changed, 1569 insertions(+) create mode 100644 pkg/api/usecase/wish_card/interactor.go create mode 100644 pkg/api/usecase/wish_card/interactor_test.go create mode 100644 pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go create mode 100644 pkg/domain/repository/wish_card_tag/repository.go create mode 100644 pkg/domain/service/place/mock_place/mock_service.go create mode 100644 pkg/domain/service/tag/mock_tag/mock_service.go create mode 100644 pkg/domain/service/wish_card/mock_wish_card/mock_service.go create mode 100644 pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go create mode 100644 pkg/domain/service/wish_card_tag/service.go create mode 100644 pkg/infrastructure/mysql/wish_card_tag/repository.go create mode 100644 pkg/infrastructure/mysql/wish_card_tag/repository_test.go diff --git a/pkg/api/usecase/wish_card/interactor.go b/pkg/api/usecase/wish_card/interactor.go new file mode 100644 index 0000000..7ecce52 --- /dev/null +++ b/pkg/api/usecase/wish_card/interactor.go @@ -0,0 +1,201 @@ +package wish_card + +import ( + "context" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place" + "wantum/pkg/domain/service/tag" + "wantum/pkg/domain/service/wish_card" + "wantum/pkg/domain/service/wish_card_tag" + "wantum/pkg/werrors" +) + +type Interactor interface { + CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) + UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) + DeleteWishCardByID(ctx context.Context, wishCardID int) error + GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) + GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) +} + +type interactor struct { + masterTxManager repository.MasterTxManager + wishCardService wish_card.Service + tagService tag.Service + placeService place.Service + wishCardsTagsService wish_card_tag.Service +} + +func New(masterTxManager repository.MasterTxManager, wishCardService wish_card.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wish_card_tag.Service) Interactor { + return &interactor{ + masterTxManager: masterTxManager, + wishCardService: wishCardService, + tagService: tagService, + placeService: placeService, + wishCardsTagsService: wishCardsTagsService, + } +} + +func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { + + var newWishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + place, err := i.placeService.Create(ctx, masterTx, place) + if err != nil { + // TODO: placeがすでにあったら辛いね... + return werrors.Stack(err) + } + newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, userID, categoryID, place.ID) + if err != nil { + return werrors.Stack(err) + } + newWishCard.Place = place + + var tagIDs []int + for _, tagName := range tags { + var tag *entity.Tag + tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + if tag == nil { + tag, err = i.tagService.Create(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } + } + newWishCard.Tags = append(newWishCard.Tags, tag) + tagIDs = append(tagIDs, tag.ID) + } + + err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, newWishCard.ID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return newWishCard, nil +} + +func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { + var wishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + place, err := i.placeService.Create(ctx, masterTx, place) + if err != nil { + // TODO: placeがすでにあったら辛いね... + // bynameで撮ってきて、なかったらcreateかな...ぐぬぬ + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + + var tagIDs []int + for _, tagName := range tags { + var tag *entity.Tag + tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + if tag == nil { + tag, err = i.tagService.Create(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } + } + tagIDs = append(tagIDs, tag.ID) + wishCard.Tags = append(wishCard.Tags, tag) + } + + err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } + err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, wishCard.ID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) error { + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = i.wishCardService.Delete(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + + err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) { + var wishCard *entity.WishCard + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags = tags + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) { + var wishCards entity.WishCardSlice + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCards, err = i.wishCardService.GetByCategoryID(ctx, masterTx, categoryID) + if err != nil { + return werrors.Stack(err) + } + for _, wishCard := range wishCards { + place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place = place + tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags = tags + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCards, nil +} diff --git a/pkg/api/usecase/wish_card/interactor_test.go b/pkg/api/usecase/wish_card/interactor_test.go new file mode 100644 index 0000000..3dea49d --- /dev/null +++ b/pkg/api/usecase/wish_card/interactor_test.go @@ -0,0 +1,375 @@ +package wish_card + +import ( + "context" + "os" + "testing" + "time" + "wantum/pkg/domain/entity" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/service/place/mock_place" + "wantum/pkg/domain/service/tag/mock_tag" + "wantum/pkg/domain/service/wish_card/mock_wish_card" + "wantum/pkg/domain/service/wish_card_tag/mock_wish_card_tag" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" +) + +var ( + masterTx repository.MasterTx + masterTxManager repository.MasterTxManager +) + +var dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + +var dummyTag1 = entity.Tag{ + ID: 1, + Name: "tag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, +} + +var dummyTag2 = entity.Tag{ + ID: 2, + Name: "tag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, +} + +var dummyTagSlice = entity.TagSlice{ + &dummyTag1, + &dummyTag2, +} + +var dummyPlace = entity.Place{ + ID: 1, + Name: "samplePlace", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, +} + +// var dummyWishCard = entity.WishCard{ +// ID: 1, +// UserID: 1, +// Activity: "sampleActivity", +// Description: "sampleDescription", +// Date: &dummyDate, +// DoneAt: nil, +// CreatedAt: &dummyDate, +// UpdatedAt: &dummyDate, +// DeletedAt: &dummyDate, +// Place: &dummyPlace, +// Tags: entity.TagSlice{ +// &dummyTag1, +// &dummyTag2, +// }, +// } + +// var dummyWishCards = entity.WishCardSlice{ +// &dummyWishCard, +// &entity.WishCard{ +// ID: 2, +// UserID: 1, +// Activity: "sampleActivity", +// Description: "sampleDescription", +// Date: &dummyDate, +// DoneAt: nil, +// CreatedAt: &dummyDate, +// UpdatedAt: &dummyDate, +// DeletedAt: &dummyDate, +// Place: &dummyPlace, +// Tags: entity.TagSlice{ +// &dummyTag1, +// &dummyTag2, +// }, +// }, +// } + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + masterTx = repository.NewMockMasterTx() + masterTxManager = repository.NewMockMasterTxManager(masterTx) +} + +func after() {} + +func TestInteractor_CreateNewWishCard(t *testing.T) { + t.Run("success to create data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + tags := []string{"tag1", "tag2"} + result, err := interactor.CreateNewWishCard(ctx, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, 1, tags) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.Equal(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_UpdateWishCard(t *testing.T) { + t.Run("success to update data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + tags := []string{"tag1", "tag2"} + result, err := interactor.UpdateWishCard(ctx, 1, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, &dummyDate, 1, tags) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_DeleteWishCard(t *testing.T) { + t.Run("success to delete data.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().Delete(ctx, masterTx, 1).Return(nil) + + tagService := mock_tag.NewMockService(ctrl) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + err := interactor.DeleteWishCardByID(ctx, 1) + + assert.NoError(t, err) + }) +} + +func TestInteractor_GetByID(t *testing.T) { + t.Run("success to get data by id.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + result, err := interactor.GetByID(ctx, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + + // validate time + assert.Equal(t, (*time.Time)(nil), result.DeletedAt) + assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) + // validate place + assert.Equal(t, "samplePlace", result.Place.Name) + // validate tag + assert.Equal(t, 2, len(result.Tags)) + assert.Equal(t, "tag1", result.Tags[0].Name) + }) +} + +func TestInteractor_GetByCategoryID(t *testing.T) { + t.Run("success to get data by categoryID.", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard1 := entity.WishCard{ + ID: 1, + UserID: 1, + Activity: "sampleActivity", + Description: "sampleDescription", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + dummyWishCard2 := entity.WishCard{ + ID: 2, + UserID: 2, + Activity: "sampleActivity2", + Description: "sampleDescription2", + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &entity.Place{ + ID: 1, + Name: "", + CreatedAt: nil, + UpdatedAt: nil, + }, + Tags: entity.TagSlice{}, + } + dummyWishCards := entity.WishCardSlice{ + &dummyWishCard1, + &dummyWishCard2, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyWishCards, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil).Times(2) + + wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + + wishCards, err := interactor.GetByCategoryID(ctx, 1) + + assert.NoError(t, err) + assert.NotNil(t, wishCards) + assert.Equal(t, 2, len(wishCards)) + + assert.Equal(t, "samplePlace", wishCards[0].Place.Name) + assert.Equal(t, "samplePlace", wishCards[1].Place.Name) + + assert.Equal(t, "tag1", wishCards[0].Tags[0].Name) + assert.Equal(t, 2, len(wishCards[0].Tags)) + assert.Equal(t, "tag1", wishCards[1].Tags[0].Name) + assert.Equal(t, 2, len(wishCards[1].Tags)) + }) +} diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index f2f0c66..a906cf0 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -107,6 +107,21 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, tagID) } +// SelectByName mocks base method +func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByName", ctx, masterTx, name) + ret0, _ := ret[0].(*model.TagModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByName indicates an expected call of SelectByName +func (mr *MockRepositoryMockRecorder) SelectByName(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByName", reflect.TypeOf((*MockRepository)(nil).SelectByName), ctx, masterTx, name) +} + // SelectByWishCardID mocks base method func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { m.ctrl.T.Helper() diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 44d3246..9489bd1 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -14,6 +14,7 @@ type Repository interface { Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) + SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) } diff --git a/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go b/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go new file mode 100644 index 0000000..d7871dc --- /dev/null +++ b/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go @@ -0,0 +1,91 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/repository/wish_card_tag/repository.go + +// Package mock_wish_card_tag is a generated GoMock package. +package mock_wish_card_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" +) + +// MockRepository is a mock of Repository interface +type MockRepository struct { + ctrl *gomock.Controller + recorder *MockRepositoryMockRecorder +} + +// MockRepositoryMockRecorder is the mock recorder for MockRepository +type MockRepositoryMockRecorder struct { + mock *MockRepository +} + +// NewMockRepository creates a new mock instance +func NewMockRepository(ctrl *gomock.Controller) *MockRepository { + mock := &MockRepository{ctrl: ctrl} + mock.recorder = &MockRepositoryMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { + return m.recorder +} + +// Insert mocks base method +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Insert indicates an expected call of Insert +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCardID, tagID) +} + +// BulkInsert mocks base method +func (m *MockRepository) BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BulkInsert", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(error) + return ret0 +} + +// BulkInsert indicates an expected call of BulkInsert +func (mr *MockRepositoryMockRecorder) BulkInsert(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BulkInsert", reflect.TypeOf((*MockRepository)(nil).BulkInsert), ctx, masterTx, wishCardID, tagIDs) +} + +// Delete mocks base method +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCardID, tagID) +} + +// DeleteByWishCardID mocks base method +func (m *MockRepository) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteByWishCardID indicates an expected call of DeleteByWishCardID +func (mr *MockRepositoryMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockRepository)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) +} diff --git a/pkg/domain/repository/wish_card_tag/repository.go b/pkg/domain/repository/wish_card_tag/repository.go new file mode 100644 index 0000000..e2a69c3 --- /dev/null +++ b/pkg/domain/repository/wish_card_tag/repository.go @@ -0,0 +1,13 @@ +package wish_card_tag + +import ( + "context" + "wantum/pkg/domain/repository" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error +} diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go new file mode 100644 index 0000000..0678629 --- /dev/null +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -0,0 +1,140 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/place/service.go + +// Package mock_place is a generated GoMock package. +package mock_place + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, name) +} + +// Update mocks base method +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, placeID, name) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, placeID, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, placeID, name) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, placeID) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, placeID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, placeID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, placeID) + ret0, _ := ret[0].(*entity.Place) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, placeID) +} + +// GetAll mocks base method +func (m *MockService) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAll", ctx, masterTx) + ret0, _ := ret[0].(entity.PlaceSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetAll indicates an expected call of GetAll +func (mr *MockServiceMockRecorder) GetAll(ctx, masterTx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAll", reflect.TypeOf((*MockService)(nil).GetAll), ctx, masterTx) +} diff --git a/pkg/domain/service/tag/mock_tag/mock_service.go b/pkg/domain/service/tag/mock_tag/mock_service.go new file mode 100644 index 0000000..6426d14 --- /dev/null +++ b/pkg/domain/service/tag/mock_tag/mock_service.go @@ -0,0 +1,155 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/tag/service.go + +// Package mock_tag is a generated GoMock package. +package mock_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, name) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, tagID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, tagID) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, tagID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, tagID) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, tagID) +} + +// GetByName mocks base method +func (m *MockService) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByName", ctx, masterTx, name) + ret0, _ := ret[0].(*entity.Tag) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByName indicates an expected call of GetByName +func (mr *MockServiceMockRecorder) GetByName(ctx, masterTx, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByName", reflect.TypeOf((*MockService)(nil).GetByName), ctx, masterTx, name) +} + +// GetByWishCardID mocks base method +func (m *MockService) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(entity.TagSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByWishCardID indicates an expected call of GetByWishCardID +func (mr *MockServiceMockRecorder) GetByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByWishCardID", reflect.TypeOf((*MockService)(nil).GetByWishCardID), ctx, masterTx, wishCardID) +} + +// GetByMemoryID mocks base method +func (m *MockService) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByMemoryID", ctx, masterTx, memoryID) + ret0, _ := ret[0].(entity.TagSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByMemoryID indicates an expected call of GetByMemoryID +func (mr *MockServiceMockRecorder) GetByMemoryID(ctx, masterTx, memoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByMemoryID", reflect.TypeOf((*MockService)(nil).GetByMemoryID), ctx, masterTx, memoryID) +} diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 4609b67..e614149 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -20,6 +20,7 @@ type Service interface { Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) } @@ -107,6 +108,14 @@ func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tag return model.ConvertToTagEntity(tag), nil } +func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { + tag, err := s.tagRepository.SelectByName(ctx, masterTx, name) + if err != nil { + return nil, werrors.Stack(err) + } + return model.ConvertToTagEntity(tag), nil +} + func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) if err != nil { diff --git a/pkg/domain/service/wish_card/mock_wish_card/mock_service.go b/pkg/domain/service/wish_card/mock_wish_card/mock_service.go new file mode 100644 index 0000000..433f4c5 --- /dev/null +++ b/pkg/domain/service/wish_card/mock_wish_card/mock_service.go @@ -0,0 +1,156 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/wish_card/service.go + +// Package mock_wish_card is a generated GoMock package. +package mock_wish_card + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + time "time" + entity "wantum/pkg/domain/entity" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, activity, description, date, userID, categoryID, placeID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, activity, description, date, userID, categoryID, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, activity, description, date, userID, categoryID, placeID) +} + +// Update mocks base method +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, wishCardID) +} + +// UpDeleteFlag mocks base method +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpDeleteFlag indicates an expected call of UpDeleteFlag +func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, wishCardID) +} + +// DownDeleteFlag mocks base method +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DownDeleteFlag indicates an expected call of DownDeleteFlag +func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, wishCardID) +} + +// GetByID mocks base method +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(*entity.WishCard) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByID indicates an expected call of GetByID +func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByID", reflect.TypeOf((*MockService)(nil).GetByID), ctx, masterTx, wishCardID) +} + +// GetByIDs mocks base method +func (m *MockService) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByIDs", ctx, masterTx, wishCardIDs) + ret0, _ := ret[0].(entity.WishCardSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByIDs indicates an expected call of GetByIDs +func (mr *MockServiceMockRecorder) GetByIDs(ctx, masterTx, wishCardIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByIDs", reflect.TypeOf((*MockService)(nil).GetByIDs), ctx, masterTx, wishCardIDs) +} + +// GetByCategoryID mocks base method +func (m *MockService) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetByCategoryID", ctx, masterTx, categoryID) + ret0, _ := ret[0].(entity.WishCardSlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetByCategoryID indicates an expected call of GetByCategoryID +func (mr *MockServiceMockRecorder) GetByCategoryID(ctx, masterTx, categoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByCategoryID", reflect.TypeOf((*MockService)(nil).GetByCategoryID), ctx, masterTx, categoryID) +} diff --git a/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go new file mode 100644 index 0000000..24156d1 --- /dev/null +++ b/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go @@ -0,0 +1,91 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: pkg/domain/service/wish_card_tag/service.go + +// Package mock_wish_card_tag is a generated GoMock package. +package mock_wish_card_tag + +import ( + context "context" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + repository "wantum/pkg/domain/repository" +) + +// MockService is a mock of Service interface +type MockService struct { + ctrl *gomock.Controller + recorder *MockServiceMockRecorder +} + +// MockServiceMockRecorder is the mock recorder for MockService +type MockServiceMockRecorder struct { + mock *MockService +} + +// NewMockService creates a new mock instance +func NewMockService(ctrl *gomock.Controller) *MockService { + mock := &MockService{ctrl: ctrl} + mock.recorder = &MockServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockService) EXPECT() *MockServiceMockRecorder { + return m.recorder +} + +// Create mocks base method +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Create indicates an expected call of Create +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, wishCardID, tagID) +} + +// CreateMultipleTags mocks base method +func (m *MockService) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateMultipleTags", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateMultipleTags indicates an expected call of CreateMultipleTags +func (mr *MockServiceMockRecorder) CreateMultipleTags(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMultipleTags", reflect.TypeOf((*MockService)(nil).CreateMultipleTags), ctx, masterTx, wishCardID, tagIDs) +} + +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID, tagID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, wishCardID, tagID) +} + +// DeleteByWishCardID mocks base method +func (m *MockService) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteByWishCardID", ctx, masterTx, wishCardID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteByWishCardID indicates an expected call of DeleteByWishCardID +func (mr *MockServiceMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockService)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) +} diff --git a/pkg/domain/service/wish_card_tag/service.go b/pkg/domain/service/wish_card_tag/service.go new file mode 100644 index 0000000..b46cd0a --- /dev/null +++ b/pkg/domain/service/wish_card_tag/service.go @@ -0,0 +1,57 @@ +package wish_card_tag + +import ( + "context" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error + DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error +} + +type service struct { + repository wish_card_tag.Repository +} + +func New(repo wish_card_tag.Repository) Service { + return &service{ + repository: repo, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + err := s.repository.Insert(ctx, masterTx, wishCardID, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + err := s.repository.BulkInsert(ctx, masterTx, wishCardID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + err := s.repository.Delete(ctx, masterTx, wishCardID, tagID) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + err := s.repository.DeleteByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + return nil +} diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go index 7ad4270..211633e 100644 --- a/pkg/infrastructure/mysql/model/wish_card.go +++ b/pkg/infrastructure/mysql/model/wish_card.go @@ -35,6 +35,9 @@ func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { CreatedAt: wishCard.CreatedAt, UpdatedAt: wishCard.UpdatedAt, DeletedAt: wishCard.DeletedAt, + Place: &entity.Place{ + ID: wishCard.PlaceID, + }, } } diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 64c3ba8..634fe7e 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -152,6 +152,32 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep return &result, nil } +func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + row := tx.QueryRow(` + SELECT id, name, created_at, updated_at, deleted_at + FROM tags + WHERE name=? + `, name) + var result model.TagModel + err = row.Scan( + &result.ID, + &result.Name, + &result.CreatedAt, + &result.UpdatedAt, + &result.DeletedAt, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &result, nil +} + func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index d8e53c7..0646a96 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -226,6 +226,46 @@ func TestSelectByID(t *testing.T) { }) } +func TestSelectByName(t *testing.T) { + t.Run("success to select by name", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + tag := &model.TagModel{ + Name: name, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + repo.Insert(ctx, masterTx, tag) + + result, err = repo.SelectByName(ctx, masterTx, name) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("failure to select by name. data not exists", func(t *testing.T) { + var err error + ctx := context.Background() + name, _ := makeRandomStr(10) + + var result *model.TagModel + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByName(ctx, masterTx, name) + return err + }) + + assert.Error(t, err) + assert.Nil(t, result) + }) +} + func TestSelectByWishCardID(t *testing.T) { t.Run("success to select by wishCardID", func(t *testing.T) { var err error diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository.go b/pkg/infrastructure/mysql/wish_card_tag/repository.go new file mode 100644 index 0000000..0437012 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card_tag/repository.go @@ -0,0 +1,100 @@ +package wish_card_tag + +import ( + "context" + "strings" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type wishCardTagRepositoryImplement struct { + masterTxManager repository.MasterTxManager +} + +func New(txManager repository.MasterTxManager) wish_card_tag.Repository { + return &wishCardTagRepositoryImplement{ + masterTxManager: txManager, + } +} + +func (repo *wishCardTagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + INSERT INTO wish_cards_tags(wish_card_id, tag_id) + VALUES (?,?) + `, wishCardID, + tagID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + query := "INSERT INTO wish_cards_tags(wish_card_id, tag_id) VALUES " + values := make([]interface{}, 0, len(tagIDs)) + for _, tagID := range tagIDs { + query = query + "(?, ?)," + values = append(values, wishCardID, tagID) + } + query = strings.TrimSuffix(query, ",") + + _, err = tx.Exec(query, values...) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards_tags + WHERE wish_card_id = ? and tag_id = ? + `, wishCardID, + tagID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardTagRepositoryImplement) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + DELETE FROM wish_cards_tags + WHERE wish_card_id = ? + `, wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go b/pkg/infrastructure/mysql/wish_card_tag/repository_test.go new file mode 100644 index 0000000..6470d90 --- /dev/null +++ b/pkg/infrastructure/mysql/wish_card_tag/repository_test.go @@ -0,0 +1,96 @@ +package wish_card_tag + +import ( + "context" + "database/sql" + "log" + "os" + "testing" + "time" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/wish_card_tag" + tx "wantum/pkg/infrastructure/mysql" + + _ "github.com/go-sql-driver/mysql" + "github.com/stretchr/testify/assert" +) + +var db *sql.DB +var txManager repository.MasterTxManager +var repo wish_card_tag.Repository +var dummyDate time.Time + +func TestMain(m *testing.M) { + before() + code := m.Run() + after() + os.Exit(code) +} + +func before() { + var err error + // TODO: 環境変数とか使いたい気持ちもする + db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + if err != nil { + log.Fatal("faild to connect db: ", err) + } + txManager = tx.NewDBMasterTxManager(db) + repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +} + +func after() { + db.Close() +} + +func TestInsert(t *testing.T) { + t.Run("success to insert data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Insert(ctx, masterTx, 1, 1) + return err + }) + assert.NoError(t, err) + }) +} + +func TestBulkInsert(t *testing.T) { + t.Run("success to bulk insert data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.BulkInsert(ctx, masterTx, 1, []int{2, 3, 4}) + return err + }) + assert.NoError(t, err) + }) +} + +func TestDelete(t *testing.T) { + t.Run("success to delete data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.Delete(ctx, masterTx, 1, 1) + return err + }) + assert.NoError(t, err) + }) +} + +func TestDeleteByWishCardID(t *testing.T) { + t.Run("success to delete data", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.DeleteByWishCardID(ctx, masterTx, 1) + return err + }) + assert.NoError(t, err) + }) +} From 0043767a495054712d8586542e6550245ba8f6e6 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 12:27:04 +0900 Subject: [PATCH 062/156] update gomock --- go.sum | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go.sum b/go.sum index 31b9b82..3e58c71 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -75,6 +76,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -169,6 +172,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= From 749a5b33e995c634a5c2e84b7805487200453519 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 17:29:34 +0900 Subject: [PATCH 063/156] =?UTF-8?q?package=E3=82=92=E3=82=B9=E3=83=8D?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=81=8B=E3=82=89=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 6 ++++++ .../usecase/{wish_card => wishcard}/interactor.go | 12 ++++++------ .../{wish_card => wishcard}/interactor_test.go | 6 +++--- .../mock_wish_card/mock_repository.go | 0 .../repository/{wish_card => wishcard}/repository.go | 2 +- .../mock_wish_card_tag/mock_repository.go | 0 .../{wish_card_tag => wishcardtag}/repository.go | 2 +- .../mock_wish_card/mock_service.go | 0 .../service/{wish_card => wishcard}/service.go | 8 ++++---- .../service/{wish_card => wishcard}/service_test.go | 4 ++-- .../mock_wish_card_tag/mock_service.go | 0 .../{wish_card_tag => wishcardtag}/service.go | 8 ++++---- .../mysql/{wish_card => wishcard}/repository.go | 6 +++--- .../mysql/{wish_card => wishcard}/repository_test.go | 4 ++-- .../{wish_card_tag => wishcardtag}/repository.go | 6 +++--- .../repository_test.go | 6 +++--- 17 files changed, 39 insertions(+), 32 deletions(-) rename pkg/api/usecase/{wish_card => wishcard}/interactor.go (95%) rename pkg/api/usecase/{wish_card => wishcard}/interactor_test.go (98%) rename pkg/domain/repository/{wish_card => wishcard}/mock_wish_card/mock_repository.go (100%) rename pkg/domain/repository/{wish_card => wishcard}/repository.go (98%) rename pkg/domain/repository/{wish_card_tag => wishcardtag}/mock_wish_card_tag/mock_repository.go (100%) rename pkg/domain/repository/{wish_card_tag => wishcardtag}/repository.go (95%) rename pkg/domain/service/{wish_card => wishcard}/mock_wish_card/mock_service.go (100%) rename pkg/domain/service/{wish_card => wishcard}/service.go (97%) rename pkg/domain/service/{wish_card => wishcard}/service_test.go (98%) rename pkg/domain/service/{wish_card_tag => wishcardtag}/mock_wish_card_tag/mock_service.go (100%) rename pkg/domain/service/{wish_card_tag => wishcardtag}/service.go (90%) rename pkg/infrastructure/mysql/{wish_card => wishcard}/repository.go (98%) rename pkg/infrastructure/mysql/{wish_card => wishcard}/repository_test.go (99%) rename pkg/infrastructure/mysql/{wish_card_tag => wishcardtag}/repository.go (94%) rename pkg/infrastructure/mysql/{wish_card_tag => wishcardtag}/repository_test.go (95%) diff --git a/go.mod b/go.mod index e091e28..49f45f3 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/rs/cors v1.7.0 github.com/stretchr/testify v1.5.1 go.uber.org/zap v1.10.0 + golang.org/x/arch v0.0.0-20200826200359-b19915210f00 // indirect golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3 // indirect golang.org/x/tools v0.0.0-20200425043458-8463f397d07c // indirect golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 diff --git a/go.sum b/go.sum index 3e58c71..4cab31a 100644 --- a/go.sum +++ b/go.sum @@ -107,6 +107,7 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -123,6 +124,7 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.2.1 h1:V59tBiPuMkySHwJkuq/OYkK0W github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -168,9 +170,12 @@ go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/arch v0.0.0-20200826200359-b19915210f00 h1:cfd5G6xu8iZTFmjBYVemyBmE/sTf0A3vpE3BmoOuLCI= +golang.org/x/arch v0.0.0-20200826200359-b19915210f00/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -398,5 +403,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/api/usecase/wish_card/interactor.go b/pkg/api/usecase/wishcard/interactor.go similarity index 95% rename from pkg/api/usecase/wish_card/interactor.go rename to pkg/api/usecase/wishcard/interactor.go index 7ecce52..381290d 100644 --- a/pkg/api/usecase/wish_card/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -7,8 +7,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place" "wantum/pkg/domain/service/tag" - "wantum/pkg/domain/service/wish_card" - "wantum/pkg/domain/service/wish_card_tag" + "wantum/pkg/domain/service/wishcard" + "wantum/pkg/domain/service/wishcardtag" "wantum/pkg/werrors" ) @@ -22,13 +22,13 @@ type Interactor interface { type interactor struct { masterTxManager repository.MasterTxManager - wishCardService wish_card.Service + wishCardService wishcard.Service tagService tag.Service placeService place.Service - wishCardsTagsService wish_card_tag.Service + wishCardsTagsService wishcardtag.Service } -func New(masterTxManager repository.MasterTxManager, wishCardService wish_card.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wish_card_tag.Service) Interactor { +func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wishcardtag.Service) Interactor { return &interactor{ masterTxManager: masterTxManager, wishCardService: wishCardService, diff --git a/pkg/api/usecase/wish_card/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go similarity index 98% rename from pkg/api/usecase/wish_card/interactor_test.go rename to pkg/api/usecase/wishcard/interactor_test.go index 3dea49d..293676c 100644 --- a/pkg/api/usecase/wish_card/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -9,8 +9,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/domain/service/tag/mock_tag" - "wantum/pkg/domain/service/wish_card/mock_wish_card" - "wantum/pkg/domain/service/wish_card_tag/mock_wish_card_tag" + "wantum/pkg/domain/service/wishcard/mock_wish_card" + "wantum/pkg/domain/service/wishcardtag/mock_wish_card_tag" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" diff --git a/pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go similarity index 100% rename from pkg/domain/repository/wish_card/mock_wish_card/mock_repository.go rename to pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go diff --git a/pkg/domain/repository/wish_card/repository.go b/pkg/domain/repository/wishcard/repository.go similarity index 98% rename from pkg/domain/repository/wish_card/repository.go rename to pkg/domain/repository/wishcard/repository.go index 5196dfd..2aa9105 100644 --- a/pkg/domain/repository/wish_card/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" diff --git a/pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go b/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go similarity index 100% rename from pkg/domain/repository/wish_card_tag/mock_wish_card_tag/mock_repository.go rename to pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go diff --git a/pkg/domain/repository/wish_card_tag/repository.go b/pkg/domain/repository/wishcardtag/repository.go similarity index 95% rename from pkg/domain/repository/wish_card_tag/repository.go rename to pkg/domain/repository/wishcardtag/repository.go index e2a69c3..7142d30 100644 --- a/pkg/domain/repository/wish_card_tag/repository.go +++ b/pkg/domain/repository/wishcardtag/repository.go @@ -1,4 +1,4 @@ -package wish_card_tag +package wishcardtag import ( "context" diff --git a/pkg/domain/service/wish_card/mock_wish_card/mock_service.go b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go similarity index 100% rename from pkg/domain/service/wish_card/mock_wish_card/mock_service.go rename to pkg/domain/service/wishcard/mock_wish_card/mock_service.go diff --git a/pkg/domain/service/wish_card/service.go b/pkg/domain/service/wishcard/service.go similarity index 97% rename from pkg/domain/service/wish_card/service.go rename to pkg/domain/service/wishcard/service.go index 54b88b4..8c35485 100644 --- a/pkg/domain/service/wish_card/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -8,7 +8,7 @@ import ( "time" "wantum/pkg/domain/entity" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) @@ -27,10 +27,10 @@ type Service interface { } type service struct { - wishCardRepository wish_card.Repository + wishCardRepository wishcard.Repository } -func New(repo wish_card.Repository) Service { +func New(repo wishcard.Repository) Service { return &service{ wishCardRepository: repo, } diff --git a/pkg/domain/service/wish_card/service_test.go b/pkg/domain/service/wishcard/service_test.go similarity index 98% rename from pkg/domain/service/wish_card/service_test.go rename to pkg/domain/service/wishcard/service_test.go index 3f731d9..ebb0f49 100644 --- a/pkg/domain/service/wish_card/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -6,7 +6,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card/mock_wish_card" + "wantum/pkg/domain/repository/wishcard/mock_wish_card" "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" diff --git a/pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go similarity index 100% rename from pkg/domain/service/wish_card_tag/mock_wish_card_tag/mock_service.go rename to pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go diff --git a/pkg/domain/service/wish_card_tag/service.go b/pkg/domain/service/wishcardtag/service.go similarity index 90% rename from pkg/domain/service/wish_card_tag/service.go rename to pkg/domain/service/wishcardtag/service.go index b46cd0a..277c0fa 100644 --- a/pkg/domain/service/wish_card_tag/service.go +++ b/pkg/domain/service/wishcardtag/service.go @@ -1,9 +1,9 @@ -package wish_card_tag +package wishcardtag import ( "context" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/werrors" ) @@ -15,10 +15,10 @@ type Service interface { } type service struct { - repository wish_card_tag.Repository + repository wishcardtag.Repository } -func New(repo wish_card_tag.Repository) Service { +func New(repo wishcardtag.Repository) Service { return &service{ repository: repo, } diff --git a/pkg/infrastructure/mysql/wish_card/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go similarity index 98% rename from pkg/infrastructure/mysql/wish_card/repository.go rename to pkg/infrastructure/mysql/wishcard/repository.go index 8a72e65..ff5d087 100644 --- a/pkg/infrastructure/mysql/wish_card/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -6,7 +6,7 @@ import ( "errors" "strings" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card" + "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" @@ -17,7 +17,7 @@ type wishCardRepositoryImplement struct { masterTxManager repository.MasterTxManager } -func New(txManager repository.MasterTxManager) wish_card.Repository { +func New(txManager repository.MasterTxManager) wishcard.Repository { return &wishCardRepositoryImplement{ masterTxManager: txManager, } diff --git a/pkg/infrastructure/mysql/wish_card/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go similarity index 99% rename from pkg/infrastructure/mysql/wish_card/repository_test.go rename to pkg/infrastructure/mysql/wishcard/repository_test.go index 1cc589a..6bcddfe 100644 --- a/pkg/infrastructure/mysql/wish_card/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -1,4 +1,4 @@ -package wish_card +package wishcard import ( "context" @@ -9,7 +9,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - wcrepo "wantum/pkg/domain/repository/wish_card" + wcrepo "wantum/pkg/domain/repository/wishcard" tx "wantum/pkg/infrastructure/mysql" "wantum/pkg/infrastructure/mysql/model" diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository.go b/pkg/infrastructure/mysql/wishcardtag/repository.go similarity index 94% rename from pkg/infrastructure/mysql/wish_card_tag/repository.go rename to pkg/infrastructure/mysql/wishcardtag/repository.go index 0437012..6166d93 100644 --- a/pkg/infrastructure/mysql/wish_card_tag/repository.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository.go @@ -1,10 +1,10 @@ -package wish_card_tag +package wishcardtag import ( "context" "strings" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/infrastructure/mysql" "wantum/pkg/tlog" "wantum/pkg/werrors" @@ -14,7 +14,7 @@ type wishCardTagRepositoryImplement struct { masterTxManager repository.MasterTxManager } -func New(txManager repository.MasterTxManager) wish_card_tag.Repository { +func New(txManager repository.MasterTxManager) wishcardtag.Repository { return &wishCardTagRepositoryImplement{ masterTxManager: txManager, } diff --git a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go similarity index 95% rename from pkg/infrastructure/mysql/wish_card_tag/repository_test.go rename to pkg/infrastructure/mysql/wishcardtag/repository_test.go index 6470d90..602d458 100644 --- a/pkg/infrastructure/mysql/wish_card_tag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -1,4 +1,4 @@ -package wish_card_tag +package wishcardtag import ( "context" @@ -8,7 +8,7 @@ import ( "testing" "time" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wish_card_tag" + "wantum/pkg/domain/repository/wishcardtag" tx "wantum/pkg/infrastructure/mysql" _ "github.com/go-sql-driver/mysql" @@ -17,7 +17,7 @@ import ( var db *sql.DB var txManager repository.MasterTxManager -var repo wish_card_tag.Repository +var repo wishcardtag.Repository var dummyDate time.Time func TestMain(m *testing.M) { From 82f78c6c1e7fadb44f65e3b9e4d36b4109a0e71f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 17:34:57 +0900 Subject: [PATCH 064/156] =?UTF-8?q?mysql/model=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E5=90=8D=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/model/place_test.go | 8 ++++---- pkg/infrastructure/mysql/model/tag_test.go | 8 ++++---- pkg/infrastructure/mysql/model/wish_card_test.go | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go index 3cb54e1..a147b5d 100644 --- a/pkg/infrastructure/mysql/model/place_test.go +++ b/pkg/infrastructure/mysql/model/place_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToPlaceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &PlaceModel{ ID: 1, @@ -25,13 +25,13 @@ func TestConvertToPlaceEntity(t *testing.T) { assert.IsType(t, &entity.Place{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToPlaceEntity(nil) assert.Nil(t, result) }) } func TestConvertToPlaceSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &PlaceModel{ ID: 1, @@ -48,7 +48,7 @@ func TestConvertToPlaceSliceEntity(t *testing.T) { assert.IsType(t, entity.PlaceSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToPlaceSliceEntity(nil) assert.Nil(t, result) }) diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go index 7cd2084..b0bcbbd 100644 --- a/pkg/infrastructure/mysql/model/tag_test.go +++ b/pkg/infrastructure/mysql/model/tag_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToTagEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) testData := &TagModel{ ID: 1, @@ -25,13 +25,13 @@ func TestConvertToTagEntity(t *testing.T) { assert.IsType(t, &entity.Tag{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToTagEntity(nil) assert.Nil(t, result) }) } func TestConvertToTagSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) data := &TagModel{ ID: 1, @@ -48,7 +48,7 @@ func TestConvertToTagSliceEntity(t *testing.T) { assert.IsType(t, entity.TagSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToTagSliceEntity(nil) assert.Nil(t, result) }) diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go index 195762a..b8c7a89 100644 --- a/pkg/infrastructure/mysql/model/wish_card_test.go +++ b/pkg/infrastructure/mysql/model/wish_card_test.go @@ -9,7 +9,7 @@ import ( ) func TestConvertToWishCardEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) testData := &WishCardModel{ ID: 1, @@ -29,13 +29,13 @@ func TestConvertToWishCardEntity(t *testing.T) { assert.IsType(t, &entity.WishCard{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToWishCardEntiry(nil) assert.Nil(t, result) }) } func TestConvertToWishCardSliceEntity(t *testing.T) { - t.Run("ver success", func(t *testing.T) { + t.Run("success", func(t *testing.T) { date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) data := &WishCardModel{ ID: 1, @@ -56,7 +56,7 @@ func TestConvertToWishCardSliceEntity(t *testing.T) { assert.IsType(t, entity.WishCardSlice{}, result) }) - t.Run("ver nil", func(t *testing.T) { + t.Run("failure_nil", func(t *testing.T) { result := ConvertToWishCardSliceEntity(nil) assert.Nil(t, result) }) From 415429ea064c196bdafef6b18385315bb405b328 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:02:18 +0900 Subject: [PATCH 065/156] fix test of repo.place --- .../mysql/place/repository_test.go | 81 +++++++++---------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 12983dd..92f50f1 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -21,6 +21,9 @@ import ( var db *sql.DB var txManager repository.MasterTxManager var repo place.Repository +var dummyDate time.Time + +var dummyPlace = "samplePlace" func TestMain(m *testing.M) { before() @@ -39,6 +42,7 @@ func before() { } txManager = tx.NewDBMasterTxManager(db) repo = New(txManager) + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) } // dbのコネクションを閉じる @@ -47,14 +51,13 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result int @@ -67,7 +70,7 @@ func TestInsert(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failed to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -83,15 +86,14 @@ func TestInsert(t *testing.T) { } func TestUpdate(t *testing.T) { - t.Run("success to update data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ ID: 1, - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -107,10 +109,10 @@ func TestUpdate(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) - // assert.Equal(t, "sample place", result.Name) + assert.Equal(t, dummyPlace, result.Name) }) - t.Run("failure to update data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -132,14 +134,13 @@ func TestUpdate(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -147,7 +148,7 @@ func TestUpDeleteFlag(t *testing.T) { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - place.DeletedAt = &date + place.DeletedAt = &dummyDate err = repo.UpDeleteFlag(ctx, masterTx, place) if err != nil { return err @@ -161,14 +162,13 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -184,15 +184,14 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, } var result *model.PlaceModel @@ -216,21 +215,20 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - place.DeletedAt = &date + place.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, place) err = repo.Delete(ctx, masterTx, place.ID) @@ -251,14 +249,13 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select by id", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - date := time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) place := &model.PlaceModel{ - Name: "sample place", - CreatedAt: &date, - UpdatedAt: &date, + Name: dummyPlace, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, } var result *model.PlaceModel @@ -276,7 +273,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectAll(t *testing.T) { - t.Run("success to select all", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From 698b0f3711115dba3e40eb53c68060b033905c4c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:06:33 +0900 Subject: [PATCH 066/156] fix test of repo.tag --- .../mysql/tag/repository_test.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index 0646a96..dcb2aa8 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -51,7 +51,7 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -71,7 +71,7 @@ func TestInsert(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failed to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -87,7 +87,7 @@ func TestInsert(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -116,7 +116,7 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up deleteFlag. deletedAt is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -137,7 +137,7 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down deleteFlag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -168,7 +168,7 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -203,7 +203,7 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select by id", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -227,7 +227,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectByName(t *testing.T) { - t.Run("success to select by name", func(t *testing.T) { + t.Run("successe", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -249,7 +249,7 @@ func TestSelectByName(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select by name. data not exists", func(t *testing.T) { + t.Run("failure_存在しないデータ", func(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) @@ -267,7 +267,7 @@ func TestSelectByName(t *testing.T) { } func TestSelectByWishCardID(t *testing.T) { - t.Run("success to select by wishCardID", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -284,7 +284,7 @@ func TestSelectByWishCardID(t *testing.T) { } func TestSelectByMemoryID(t *testing.T) { - t.Run("success to select by wishCardID", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From 654f715b81c636ec69a3b15165ff22018745e7a4 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:16:28 +0900 Subject: [PATCH 067/156] fix test of repo.wish_card --- .../mysql/wishcard/repository_test.go | 75 ++++++++++--------- 1 file changed, 39 insertions(+), 36 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 6bcddfe..31c9fc1 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -22,6 +22,9 @@ var txManager repository.MasterTxManager var repo wcrepo.Repository var dummyDate time.Time +var dummyActivity = "sampleActivity" +var dummyDescription = "sampleDescription" + func TestMain(m *testing.M) { before() code := m.Run() @@ -46,13 +49,13 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -68,7 +71,7 @@ func TestInsert(t *testing.T) { assert.NotEqual(t, 0, result) }) - t.Run("failure to insert data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -83,14 +86,14 @@ func TestInsert(t *testing.T) { } func TestUpdate(t *testing.T) { - t.Run("success to update data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CreatedAt: &dummyDate, @@ -110,17 +113,17 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, "なんかしたい", result.Activity) + assert.Equal(t, dummyActivity, result.Activity) }) - t.Run("success to update data. done at is null", func(t *testing.T) { + t.Run("success_doneAtがnil", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -139,10 +142,10 @@ func TestUpdate(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, "なんかしたい", result.Activity) + assert.Equal(t, dummyActivity, result.Activity) }) - t.Run("failure to update data. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -158,13 +161,13 @@ func TestUpdate(t *testing.T) { } func TestUpDeleteFlag(t *testing.T) { - t.Run("success to up delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -188,13 +191,13 @@ func TestUpDeleteFlag(t *testing.T) { assert.NotNil(t, result.DeletedAt) }) - t.Run("failure to up delete flag. flag is nil", func(t *testing.T) { + t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -211,7 +214,7 @@ func TestUpDeleteFlag(t *testing.T) { assert.Error(t, err) }) - t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -226,13 +229,13 @@ func TestUpDeleteFlag(t *testing.T) { } func TestDownDeleteFlag(t *testing.T) { - t.Run("success to down delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -256,7 +259,7 @@ func TestDownDeleteFlag(t *testing.T) { assert.Nil(t, result.DeletedAt) }) - t.Run("failure to up delete flag. data is nil", func(t *testing.T) { + t.Run("failure_データがnil", func(t *testing.T) { var err error ctx := context.Background() @@ -271,13 +274,13 @@ func TestDownDeleteFlag(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to up delete flag", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -308,13 +311,13 @@ func TestDelete(t *testing.T) { } func TestSelectByID(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -332,7 +335,7 @@ func TestSelectByID(t *testing.T) { assert.NotNil(t, result) }) - t.Run("failure to select data. data is not exist", func(t *testing.T) { + t.Run("failure_存在しないデータ", func(t *testing.T) { var err error ctx := context.Background() @@ -347,7 +350,7 @@ func TestSelectByID(t *testing.T) { } func TestSelectByIDs(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -366,13 +369,13 @@ func TestSelectByIDs(t *testing.T) { } func TestCategoryID(t *testing.T) { - t.Run("success to select data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() wishCard := &model.WishCardModel{ UserID: 1, - Activity: "なんかしたい", - Description: "何かがしたい", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -393,7 +396,7 @@ func TestCategoryID(t *testing.T) { } }) - t.Run("success to select data. category is not exist", func(t *testing.T) { + t.Run("success_存在しないカテゴリ", func(t *testing.T) { var err error ctx := context.Background() From 30b0528ffcee6c1455f2ab43ab88ea837d290a59 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 18:16:53 +0900 Subject: [PATCH 068/156] fix test repo.wish_card_tag --- pkg/infrastructure/mysql/wishcardtag/repository_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index 602d458..a765597 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -44,7 +44,7 @@ func after() { } func TestInsert(t *testing.T) { - t.Run("success to insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -57,7 +57,7 @@ func TestInsert(t *testing.T) { } func TestBulkInsert(t *testing.T) { - t.Run("success to bulk insert data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -70,7 +70,7 @@ func TestBulkInsert(t *testing.T) { } func TestDelete(t *testing.T) { - t.Run("success to delete data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() @@ -83,7 +83,7 @@ func TestDelete(t *testing.T) { } func TestDeleteByWishCardID(t *testing.T) { - t.Run("success to delete data", func(t *testing.T) { + t.Run("success", func(t *testing.T) { var err error ctx := context.Background() From b6b67a0e7456780689a0243eade0422b6d03a2dc Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:28:35 +0900 Subject: [PATCH 069/156] fix test of service.place --- pkg/domain/service/place/service_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index c6abf04..d1dee7c 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -117,7 +117,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -139,7 +139,7 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグが上がってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() From 49402b069a338a9548ba0bb22da3600336a09f6a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:40:51 +0900 Subject: [PATCH 070/156] fix test of service.tag --- pkg/domain/service/tag/service_test.go | 109 +++++++++---------------- 1 file changed, 38 insertions(+), 71 deletions(-) diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 6d19c54..9cb1cf5 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -18,6 +18,28 @@ var ( dummyDate time.Time ) +var dummyTagSlice = model.TagModelSlice{ + &model.TagModel{ + ID: 1, + Name: "sampleTag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &model.TagModel{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, +} + +var dummyTag = &model.TagModel{ + ID: 1, + Name: "sampleTag", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, +} + func TestMain(m *testing.M) { before() code := m.Run() @@ -38,7 +60,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) - result, err := service.Create(ctx, masterTx, "sample tag") + result, err := service.Create(ctx, masterTx, "sampleTag") assert.NoError(t, err) assert.NotNil(t, result) @@ -49,19 +71,12 @@ func TestService_UpDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sample tag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + result, err := service.UpDeleteFlag(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -73,20 +88,12 @@ func TestService_DownDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "samleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) + result, err := service.DownDeleteFlag(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -94,11 +101,12 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ + + dummy := &model.TagModel{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, @@ -107,8 +115,8 @@ func TestService_Delete(t *testing.T) { } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummy, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -116,19 +124,13 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグがたってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -142,18 +144,11 @@ func TestService_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.GetByID(ctx, masterTx, dummyData.ID) + result, err := service.GetByID(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) @@ -164,22 +159,8 @@ func TestService_GetByWishCardID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.TagModelSlice{ - &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - &model.TagModel{ - ID: 2, - Name: "sampleTag2", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByWishCardID(ctx, masterTx, 1).Return(dummyTagSlice, nil) service := New(repo) result, err := service.GetByWishCardID(ctx, masterTx, 1) @@ -193,22 +174,8 @@ func TestService_GetByMemoryID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.TagModelSlice{ - &model.TagModel{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - &model.TagModel{ - ID: 2, - Name: "sampleTag2", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - } repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByMemoryID(ctx, masterTx, 1).Return(dummyTagSlice, nil) service := New(repo) result, err := service.GetByMemoryID(ctx, masterTx, 1) From 64a7733acf1033a4cf4fbbf730dbe11de4afa376 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 9 Sep 2020 20:56:28 +0900 Subject: [PATCH 071/156] fix test of service --- pkg/domain/service/wishcard/service_test.go | 69 ++++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index ebb0f49..d012e11 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -14,8 +14,13 @@ import ( ) var ( - masterTx repository.MasterTx - dummyDate time.Time + masterTx repository.MasterTx +) + +var ( + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + dummyActivity = "sampleActivity" + dummyDescription = "sampleDescription" ) func TestMain(m *testing.M) { @@ -25,7 +30,6 @@ func TestMain(m *testing.M) { } func before() { - dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) masterTx = repository.NewMockMasterTx() } @@ -38,7 +42,7 @@ func TestService_Create(t *testing.T) { repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) service := New(repo) - result, err := service.Create(ctx, masterTx, "activity", "desc", &dummyDate, 1, 1, 1) + result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1) assert.NoError(t, err) assert.NotNil(t, result) @@ -53,7 +57,7 @@ func TestService_Update(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", + Activity: "act", Description: "desc", Date: &dummyDate, DoneAt: &dummyDate, @@ -64,14 +68,16 @@ func TestService_Update(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) - result, err := service.Update(ctx, masterTx, 1, "activity", "desc", &dummyDate, &dummyDate, 1, 1, 1) + result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1) assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + assert.Equal(t, dummyDescription, result.Description) } @@ -83,8 +89,8 @@ func TestService_UpDeleteFlag(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -94,7 +100,7 @@ func TestService_UpDeleteFlag(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) @@ -102,6 +108,7 @@ func TestService_UpDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) + assert.NotNil(t, result.DeletedAt) } func TestService_DownDeleteFlag(t *testing.T) { @@ -112,8 +119,8 @@ func TestService_DownDeleteFlag(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -124,7 +131,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) @@ -136,7 +143,7 @@ func TestService_DownDeleteFlag(t *testing.T) { } func TestService_Delete(t *testing.T) { - t.Run("success to delete", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -144,8 +151,8 @@ func TestService_Delete(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -156,8 +163,8 @@ func TestService_Delete(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) - repo.EXPECT().Delete(ctx, masterTx, 1) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -165,7 +172,7 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) - t.Run("failure to delete. doesn't up a delete flag", func(t *testing.T) { + t.Run("failure_deleteフラグがたってない", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -173,8 +180,8 @@ func TestService_Delete(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -184,7 +191,7 @@ func TestService_Delete(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) err := service.Delete(ctx, masterTx, 1) @@ -201,8 +208,8 @@ func TestService_GetByID(t *testing.T) { dummyData := &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -212,7 +219,7 @@ func TestService_GetByID(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByID(ctx, masterTx, 1) @@ -230,8 +237,8 @@ func TestService_GetByIDs(t *testing.T) { &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: "activity1", + Description: "desc2", Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -254,7 +261,7 @@ func TestService_GetByIDs(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByIDs(ctx, masterTx, []string{"1", "2"}).Return(dummyData, nil) + repo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) @@ -273,8 +280,8 @@ func TestService_GetByCategoryID(t *testing.T) { &model.WishCardModel{ ID: 1, UserID: 1, - Activity: "activity", - Description: "desc", + Activity: "activity1", + Description: "desc1", Date: &dummyDate, DoneAt: &dummyDate, CategoryID: 1, @@ -297,7 +304,7 @@ func TestService_GetByCategoryID(t *testing.T) { } repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByCategoryID(ctx, masterTx, 1).Return(dummyData, nil) + repo.EXPECT().SelectByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) service := New(repo) result, err := service.GetByCategoryID(ctx, masterTx, 1) From 090e97299103257161ccf80a35b8e9c452fb0920 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 15:52:40 +0900 Subject: [PATCH 072/156] =?UTF-8?q?=E3=81=84=E3=82=89=E3=82=93=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/Tag.go | 13 ---- pkg/domain/entity/place.go | 13 ---- pkg/domain/entity/wish_card.go | 19 ------ pkg/infrastructure/mysql/model/place.go | 40 ------------ pkg/infrastructure/mysql/model/place_test.go | 55 ---------------- pkg/infrastructure/mysql/model/tag.go | 40 ------------ pkg/infrastructure/mysql/model/tag_test.go | 55 ---------------- pkg/infrastructure/mysql/model/wish_card.go | 53 ---------------- .../mysql/model/wish_card_test.go | 63 ------------------- 9 files changed, 351 deletions(-) delete mode 100644 pkg/domain/entity/Tag.go delete mode 100644 pkg/domain/entity/place.go delete mode 100644 pkg/domain/entity/wish_card.go delete mode 100644 pkg/infrastructure/mysql/model/place.go delete mode 100644 pkg/infrastructure/mysql/model/place_test.go delete mode 100644 pkg/infrastructure/mysql/model/tag.go delete mode 100644 pkg/infrastructure/mysql/model/tag_test.go delete mode 100644 pkg/infrastructure/mysql/model/wish_card.go delete mode 100644 pkg/infrastructure/mysql/model/wish_card_test.go diff --git a/pkg/domain/entity/Tag.go b/pkg/domain/entity/Tag.go deleted file mode 100644 index 0b394cb..0000000 --- a/pkg/domain/entity/Tag.go +++ /dev/null @@ -1,13 +0,0 @@ -package entity - -import "time" - -type Tag struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type TagSlice []*Tag diff --git a/pkg/domain/entity/place.go b/pkg/domain/entity/place.go deleted file mode 100644 index 73e4ee0..0000000 --- a/pkg/domain/entity/place.go +++ /dev/null @@ -1,13 +0,0 @@ -package entity - -import "time" - -type Place struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type PlaceSlice []*Place diff --git a/pkg/domain/entity/wish_card.go b/pkg/domain/entity/wish_card.go deleted file mode 100644 index 9f37bbb..0000000 --- a/pkg/domain/entity/wish_card.go +++ /dev/null @@ -1,19 +0,0 @@ -package entity - -import "time" - -type WishCard struct { - ID int - UserID int - Activity string - Description string - Date *time.Time - DoneAt *time.Time - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time - Place *Place - Tags TagSlice -} - -type WishCardSlice []*WishCard diff --git a/pkg/infrastructure/mysql/model/place.go b/pkg/infrastructure/mysql/model/place.go deleted file mode 100644 index db4d44e..0000000 --- a/pkg/infrastructure/mysql/model/place.go +++ /dev/null @@ -1,40 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type PlaceModel struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type PlaceModelSlice []*PlaceModel - -func ConvertToPlaceEntity(place *PlaceModel) *entity.Place { - if place == nil { - return nil - } - return &entity.Place{ - ID: place.ID, - Name: place.Name, - CreatedAt: place.CreatedAt, - UpdatedAt: place.UpdatedAt, - DeletedAt: place.DeletedAt, - } -} - -func ConvertToPlaceSliceEntity(places PlaceModelSlice) entity.PlaceSlice { - if places == nil { - return nil - } - res := make(entity.PlaceSlice, 0, len(places)) - for _, place := range places { - res = append(res, ConvertToPlaceEntity(place)) - } - return res -} diff --git a/pkg/infrastructure/mysql/model/place_test.go b/pkg/infrastructure/mysql/model/place_test.go deleted file mode 100644 index a147b5d..0000000 --- a/pkg/infrastructure/mysql/model/place_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToPlaceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - testData := &PlaceModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - - result := ConvertToPlaceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.Place{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToPlaceEntity(nil) - assert.Nil(t, result) - }) -} -func TestConvertToPlaceSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - data := &PlaceModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - testData := PlaceModelSlice{data, data} - - result := ConvertToPlaceSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.PlaceSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToPlaceSliceEntity(nil) - assert.Nil(t, result) - }) -} diff --git a/pkg/infrastructure/mysql/model/tag.go b/pkg/infrastructure/mysql/model/tag.go deleted file mode 100644 index dd06839..0000000 --- a/pkg/infrastructure/mysql/model/tag.go +++ /dev/null @@ -1,40 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type TagModel struct { - ID int - Name string - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time -} - -type TagModelSlice []*TagModel - -func ConvertToTagEntity(tag *TagModel) *entity.Tag { - if tag == nil { - return nil - } - return &entity.Tag{ - ID: tag.ID, - Name: tag.Name, - CreatedAt: tag.CreatedAt, - UpdatedAt: tag.UpdatedAt, - DeletedAt: tag.DeletedAt, - } -} - -func ConvertToTagSliceEntity(tags TagModelSlice) entity.TagSlice { - if tags == nil { - return nil - } - result := make(entity.TagSlice, 0, len(tags)) - for _, tag := range tags { - result = append(result, ConvertToTagEntity(tag)) - } - return result -} diff --git a/pkg/infrastructure/mysql/model/tag_test.go b/pkg/infrastructure/mysql/model/tag_test.go deleted file mode 100644 index b0bcbbd..0000000 --- a/pkg/infrastructure/mysql/model/tag_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToTagEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) - testData := &TagModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - - result := ConvertToTagEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.Tag{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToTagEntity(nil) - assert.Nil(t, result) - }) -} -func TestConvertToTagSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.Local) - data := &TagModel{ - ID: 1, - Name: "disney land", - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: &date, - } - testData := TagModelSlice{data, data} - - result := ConvertToTagSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.TagSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToTagSliceEntity(nil) - assert.Nil(t, result) - }) -} diff --git a/pkg/infrastructure/mysql/model/wish_card.go b/pkg/infrastructure/mysql/model/wish_card.go deleted file mode 100644 index 211633e..0000000 --- a/pkg/infrastructure/mysql/model/wish_card.go +++ /dev/null @@ -1,53 +0,0 @@ -package model - -import ( - "time" - "wantum/pkg/domain/entity" -) - -type WishCardModel struct { - ID int - UserID int - Activity string - Description string - Date *time.Time - DoneAt *time.Time - CreatedAt *time.Time - UpdatedAt *time.Time - DeletedAt *time.Time - CategoryID int - PlaceID int -} - -type WishCardModelSlice []*WishCardModel - -func ConvertToWishCardEntiry(wishCard *WishCardModel) *entity.WishCard { - if wishCard == nil { - return nil - } - return &entity.WishCard{ - ID: wishCard.ID, - UserID: wishCard.UserID, - Activity: wishCard.Activity, - Description: wishCard.Description, - Date: wishCard.Date, - DoneAt: wishCard.DoneAt, - CreatedAt: wishCard.CreatedAt, - UpdatedAt: wishCard.UpdatedAt, - DeletedAt: wishCard.DeletedAt, - Place: &entity.Place{ - ID: wishCard.PlaceID, - }, - } -} - -func ConvertToWishCardSliceEntity(wishCards WishCardModelSlice) entity.WishCardSlice { - if wishCards == nil { - return nil - } - res := make(entity.WishCardSlice, 0, len(wishCards)) - for _, wishCard := range wishCards { - res = append(res, ConvertToWishCardEntiry(wishCard)) - } - return res -} diff --git a/pkg/infrastructure/mysql/model/wish_card_test.go b/pkg/infrastructure/mysql/model/wish_card_test.go deleted file mode 100644 index b8c7a89..0000000 --- a/pkg/infrastructure/mysql/model/wish_card_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package model - -import ( - "testing" - "time" - "wantum/pkg/domain/entity" - - "github.com/stretchr/testify/assert" -) - -func TestConvertToWishCardEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - testData := &WishCardModel{ - ID: 1, - UserID: 1, - Activity: "タピる", - Description: "せつめいーーー", - Date: &date, - DoneAt: nil, - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: nil, - } - - result := ConvertToWishCardEntiry(testData) - - assert.NotNil(t, result) - assert.IsType(t, &entity.WishCard{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToWishCardEntiry(nil) - assert.Nil(t, result) - }) -} -func TestConvertToWishCardSliceEntity(t *testing.T) { - t.Run("success", func(t *testing.T) { - date := time.Date(2020, 9, 1, 10, 10, 10, 0, time.UTC) - data := &WishCardModel{ - ID: 1, - UserID: 1, - Activity: "タピる", - Description: "せつめいーーー", - Date: &date, - DoneAt: nil, - CreatedAt: &date, - UpdatedAt: &date, - DeletedAt: nil, - } - testData := WishCardModelSlice{data, data} - - result := ConvertToWishCardSliceEntity(testData) - - assert.NotNil(t, result) - assert.IsType(t, entity.WishCardSlice{}, result) - }) - - t.Run("failure_nil", func(t *testing.T) { - result := ConvertToWishCardSliceEntity(nil) - assert.Nil(t, result) - }) -} From 0a750c04a1086e2b8d959bda8546efbeb6b7c583 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 16:49:50 +0900 Subject: [PATCH 073/156] update repository --- pkg/domain/entity/place/entity.go | 13 ++ pkg/domain/entity/tag/entity.go | 13 ++ pkg/domain/entity/wishcard/entity.go | 23 ++++ pkg/domain/repository/place/repository.go | 14 +-- pkg/domain/repository/tag/repository.go | 16 +-- pkg/domain/repository/wishcard/repository.go | 16 +-- pkg/domain/service/wishcard/service.go | 4 + pkg/infrastructure/mysql/place/repository.go | 22 ++-- .../mysql/place/repository_test.go | 30 ++--- pkg/infrastructure/mysql/tag/repository.go | 30 ++--- .../mysql/tag/repository_test.go | 32 ++--- .../mysql/wishcard/repository.go | 60 +++++---- .../mysql/wishcard/repository_test.go | 115 ++++++++++-------- 13 files changed, 227 insertions(+), 161 deletions(-) create mode 100644 pkg/domain/entity/place/entity.go create mode 100644 pkg/domain/entity/tag/entity.go create mode 100644 pkg/domain/entity/wishcard/entity.go diff --git a/pkg/domain/entity/place/entity.go b/pkg/domain/entity/place/entity.go new file mode 100644 index 0000000..f8ce875 --- /dev/null +++ b/pkg/domain/entity/place/entity.go @@ -0,0 +1,13 @@ +package place + +import "time" + +type Entity struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type EntitySlice []*Entity diff --git a/pkg/domain/entity/tag/entity.go b/pkg/domain/entity/tag/entity.go new file mode 100644 index 0000000..c6e5feb --- /dev/null +++ b/pkg/domain/entity/tag/entity.go @@ -0,0 +1,13 @@ +package tag + +import "time" + +type Entity struct { + ID int + Name string + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type EntitySlice []*Entity diff --git a/pkg/domain/entity/wishcard/entity.go b/pkg/domain/entity/wishcard/entity.go new file mode 100644 index 0000000..fc8c68b --- /dev/null +++ b/pkg/domain/entity/wishcard/entity.go @@ -0,0 +1,23 @@ +package wishcard + +import ( + "time" + "wantum/pkg/domain/entity/place" + "wantum/pkg/domain/entity/tag" +) + +type Entity struct { + ID int + UserID int // TODO: entityの差し返して + Activity string + Description string + Date *time.Time + DoneAt *time.Time + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time + Place *place.Entity + Tags tag.EntitySlice +} + +type EntitySlice []*Entity diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 1ea17e9..5eeae76 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -2,20 +2,20 @@ package place import ( "context" + "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) // implement: wantum/pkg/infrastructure/mysql/place:placeRepositoryImpletent type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) - SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) + SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) } diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 9489bd1..2caa586 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -2,19 +2,19 @@ package tag import ( "context" + "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) - SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) - SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) - SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) + SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) + SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) + SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) } diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 2aa9105..9370eb5 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -2,21 +2,21 @@ package wishcard import ( "context" + "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" - "wantum/pkg/infrastructure/mysql/model" ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) + Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) - SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) - SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) + SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) + SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) // TODO: SelectByCategoryIDsあっても良いかもと思ったが? } diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 8c35485..d44417a 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -8,6 +8,8 @@ import ( "time" "wantum/pkg/domain/entity" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place" + "wantum/pkg/domain/repository/tag" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" @@ -28,6 +30,8 @@ type Service interface { type service struct { wishCardRepository wishcard.Repository + placeRepository place.Repository + tagsRepository tag.Repository } func New(repo wishcard.Repository) Service { diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 2b8f452..6c93c29 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -4,10 +4,10 @@ import ( "context" "database/sql" "errors" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -22,7 +22,7 @@ func New(txManager repository.MasterTxManager) place.Repository { } } -func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { +func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) (int, error) { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return 0, err @@ -54,7 +54,7 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos return int(id), nil } -func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return err @@ -80,7 +80,7 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos return nil } -func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(place); err != nil { return err @@ -114,7 +114,7 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx return nil } -func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { if err := checkIsNil(place); err != nil { return err } @@ -156,7 +156,7 @@ func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repos return nil } -func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { +func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -167,7 +167,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r FROM places WHERE id=? `, placeID) - var result model.PlaceModel + var result placeEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -182,7 +182,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r return &result, nil } -func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { +func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -199,9 +199,9 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.PlaceModelSlice + var result placeEntity.EntitySlice for rows.Next() { - var place model.PlaceModel + var place placeEntity.Entity err = rows.Scan( &place.ID, &place.Name, @@ -217,7 +217,7 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re return result, nil } -func checkIsNil(place *model.PlaceModel) error { +func checkIsNil(place *placeEntity.Entity) error { if place == nil { return werrors.Newf( errors.New("required data(place) is nil"), diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 92f50f1..3b99166 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -8,10 +8,10 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "github.com/stretchr/testify/assert" @@ -54,7 +54,7 @@ func TestInsert(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -89,14 +89,14 @@ func TestUpdate(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ ID: 1, Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.Update(ctx, masterTx, place) if err != nil { @@ -116,7 +116,7 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.Update(ctx, masterTx, nil) if err != nil { @@ -137,13 +137,13 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -165,7 +165,7 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -187,14 +187,14 @@ func TestDownDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -218,13 +218,13 @@ func TestDelete(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID @@ -252,13 +252,13 @@ func TestSelectByID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: dummyPlace, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.PlaceModel + var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) @@ -277,7 +277,7 @@ func TestSelectAll(t *testing.T) { var err error ctx := context.Background() - var result model.PlaceModelSlice + var result placeEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectAll(ctx, masterTx) return err diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 634fe7e..417954b 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -4,10 +4,10 @@ import ( "context" "database/sql" "errors" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -22,7 +22,7 @@ func New(txManager repository.MasterTxManager) tag.Repository { } } -func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { +func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) (int, error) { if err := checkIsNil(tag); err != nil { return 0, err } @@ -50,7 +50,7 @@ func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx reposit return int(id), nil } -func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { // NOTE: nilで降りてきた用対策。いらないかも if err := checkIsNil(tag); err != nil { return err @@ -84,7 +84,7 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r return nil } -func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { if err := checkIsNil(tag); err != nil { return err } @@ -126,7 +126,7 @@ func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx reposit return nil } -func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { +func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -137,7 +137,7 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep FROM tags WHERE id=? `, tagID) - var result model.TagModel + var result tagEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -152,7 +152,7 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep return &result, nil } -func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { +func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -163,7 +163,7 @@ func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx r FROM tags WHERE name=? `, name) - var result model.TagModel + var result tagEntity.Entity err = row.Scan( &result.ID, &result.Name, @@ -178,7 +178,7 @@ func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx r return &result, nil } -func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { +func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -197,9 +197,9 @@ func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, mast tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.TagModelSlice + var result tagEntity.EntitySlice for rows.Next() { - var record model.TagModel + var record tagEntity.Entity err = rows.Scan( &record.ID, &record.Name, @@ -216,7 +216,7 @@ func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, mast return result, nil } -func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { +func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -235,9 +235,9 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.TagModelSlice + var result tagEntity.EntitySlice for rows.Next() { - var record model.TagModel + var record tagEntity.Entity err = rows.Scan( &record.ID, &record.Name, @@ -254,7 +254,7 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master return result, nil } -func checkIsNil(tag *model.TagModel) error { +func checkIsNil(tag *tagEntity.Entity) error { if tag == nil { return werrors.Newf( errors.New("required data(tag) is nil"), diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index dcb2aa8..acc41ef 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -9,10 +9,10 @@ import ( "os" "testing" "time" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -55,7 +55,7 @@ func TestInsert(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, @@ -91,13 +91,13 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) @@ -120,7 +120,7 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ ID: 1, Name: name, CreatedAt: &dummyDate, @@ -141,7 +141,7 @@ func TestDownDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ ID: 1, Name: name, CreatedAt: &dummyDate, @@ -149,7 +149,7 @@ func TestDownDeleteFlag(t *testing.T) { DeletedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { tag.DeletedAt = nil @@ -172,13 +172,13 @@ func TestDelete(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) tag.ID = newTagID @@ -207,13 +207,13 @@ func TestSelectByID(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) @@ -231,13 +231,13 @@ func TestSelectByName(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, } - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { repo.Insert(ctx, masterTx, tag) @@ -254,7 +254,7 @@ func TestSelectByName(t *testing.T) { ctx := context.Background() name, _ := makeRandomStr(10) - var result *model.TagModel + var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByName(ctx, masterTx, name) @@ -271,7 +271,7 @@ func TestSelectByWishCardID(t *testing.T) { var err error ctx := context.Background() - var result model.TagModelSlice + var result tagEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByWishCardID(ctx, masterTx, 4) @@ -288,7 +288,7 @@ func TestSelectByMemoryID(t *testing.T) { var err error ctx := context.Background() - var result model.TagModelSlice + var result tagEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByMemoryID(ctx, masterTx, 4) diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index ff5d087..93c6812 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -4,11 +4,13 @@ import ( "context" "database/sql" "errors" + "log" "strings" + placeEntity "wantum/pkg/domain/entity/place" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/tlog" "wantum/pkg/werrors" ) @@ -23,7 +25,7 @@ func New(txManager repository.MasterTxManager) wishcard.Repository { } } -func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { +func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) (int, error) { if err := checkIsNil(wishCard); err != nil { return 0, err } @@ -43,8 +45,8 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re wishCard.Date, wishCard.CreatedAt, wishCard.UpdatedAt, - wishCard.CategoryID, - wishCard.PlaceID, + categoryID, + wishCard.Place.ID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -58,7 +60,7 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re return int(id), nil } -func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -86,8 +88,8 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re wishCard.Date, wishCard.DoneAt, wishCard.UpdatedAt, - wishCard.CategoryID, - wishCard.PlaceID, + categoryID, + wishCard.Place.ID, wishCard.ID, ) if err != nil { @@ -97,7 +99,7 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re return nil } -func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -129,7 +131,7 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste return nil } -func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { if err := checkIsNil(wishCard); err != nil { return err } @@ -170,18 +172,19 @@ func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx re return nil } -func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { +func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } row := tx.QueryRow(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE id=? `, wishCardID) - var result model.WishCardModel + var result wishCardEntity.Entity + var place placeEntity.Entity err = row.Scan( &result.ID, &result.UserID, @@ -192,17 +195,18 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT &result.CreatedAt, &result.UpdatedAt, &result.DeletedAt, - &result.CategoryID, - &result.PlaceID) + &place.ID) if err != nil { // TODO: これってno rowsでもえらーでおっけえなの? tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + result.Place = &place + log.Println(result.Place) return &result, nil } -func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -210,7 +214,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master } rows, err := tx.Query(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE id IN (` + strings.Join(wishCardIDs, ",") + `) @@ -219,9 +223,10 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice for rows.Next() { - var record model.WishCardModel + var record wishCardEntity.Entity + var place placeEntity.Entity err = rows.Scan( &record.ID, &record.UserID, @@ -232,8 +237,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master &record.CreatedAt, &record.UpdatedAt, &record.DeletedAt, - &record.CategoryID, - &record.PlaceID, + &place.ID, ) if err != nil { if err != sql.ErrNoRows { @@ -242,19 +246,20 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Place = &place result = append(result, &record) } return result, nil } -func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { +func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } rows, err := tx.Query(` - SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, category_id, place_id + SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE category_id=? `, categryID) @@ -262,9 +267,10 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice for rows.Next() { - var record model.WishCardModel + var record wishCardEntity.Entity + var place placeEntity.Entity err = rows.Scan( &record.ID, &record.UserID, @@ -275,8 +281,7 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, &record.CreatedAt, &record.UpdatedAt, &record.DeletedAt, - &record.CategoryID, - &record.PlaceID, + &place.ID, ) if err != nil { if err != sql.ErrNoRows { @@ -285,12 +290,13 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Place = &place result = append(result, &record) } return result, nil } -func checkIsNil(wishCard *model.WishCardModel) error { +func checkIsNil(wishCard *wishCardEntity.Entity) error { if wishCard == nil { return werrors.Newf( errors.New("required data(wishCard) is nil"), diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 31c9fc1..37d5785 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -8,10 +8,11 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" wcrepo "wantum/pkg/domain/repository/wishcard" tx "wantum/pkg/infrastructure/mysql" - "wantum/pkg/infrastructure/mysql/model" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -52,19 +53,20 @@ func TestInsert(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, wishCard) + result, err = repo.Insert(ctx, masterTx, wishCard, 1) return err }) assert.NoError(t, err) @@ -77,7 +79,7 @@ func TestInsert(t *testing.T) { var result int err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, nil) + result, err = repo.Insert(ctx, masterTx, nil, 1) return err }) assert.Error(t, err) @@ -89,7 +91,7 @@ func TestUpdate(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ ID: 1, UserID: 1, Activity: dummyActivity, @@ -98,12 +100,13 @@ func TestUpdate(t *testing.T) { DoneAt: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard) + err = repo.Update(ctx, masterTx, wishCard, 1) if err != nil { return err } @@ -119,7 +122,7 @@ func TestUpdate(t *testing.T) { t.Run("success_doneAtがnil", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ ID: 1, UserID: 1, Activity: dummyActivity, @@ -127,12 +130,13 @@ func TestUpdate(t *testing.T) { Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard) + err = repo.Update(ctx, masterTx, wishCard, 1) if err != nil { return err } @@ -149,9 +153,9 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, nil) + err = repo.Update(ctx, masterTx, nil, 1) return err }) assert.Error(t, err) @@ -164,19 +168,20 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID wishCard.DeletedAt = &dummyDate @@ -194,18 +199,19 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID err = repo.UpDeleteFlag(ctx, masterTx, wishCard) @@ -218,7 +224,7 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.UpDeleteFlag(ctx, masterTx, nil) return err @@ -232,7 +238,7 @@ func TestDownDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, @@ -240,12 +246,13 @@ func TestDownDeleteFlag(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID err = repo.DownDeleteFlag(ctx, masterTx, wishCard) @@ -263,7 +270,7 @@ func TestDownDeleteFlag(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { err = repo.UpDeleteFlag(ctx, masterTx, nil) return err @@ -277,19 +284,20 @@ func TestDelete(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID wishCard.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, wishCard) @@ -314,19 +322,20 @@ func TestSelectByID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - newID, _ := repo.Insert(ctx, masterTx, wishCard) + newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) result, err = repo.SelectByID(ctx, masterTx, newID) return err @@ -339,7 +348,7 @@ func TestSelectByID(t *testing.T) { var err error ctx := context.Background() - var result *model.WishCardModel + var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByID(ctx, masterTx, -1) return err @@ -356,7 +365,7 @@ func TestSelectByIDs(t *testing.T) { ids := []string{"1", "2", "3"} - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { result, err = repo.SelectByIDs(ctx, masterTx, ids) @@ -372,28 +381,26 @@ func TestCategoryID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - wishCard := &model.WishCardModel{ + wishCard := &wishCardEntity.Entity{ UserID: 1, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, + Place: &placeEntity.Entity{ + ID: 1, + }, } - var result model.WishCardModelSlice + var result wishCardEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - repo.Insert(ctx, masterTx, wishCard) + repo.Insert(ctx, masterTx, wishCard, 1) result, err = repo.SelectByCategoryID(ctx, masterTx, 1) return err }) assert.NoError(t, err) assert.NotNil(t, result) - for _, row := range result { - assert.Equal(t, 1, row.CategoryID) - } }) t.Run("success_存在しないカテゴリ", func(t *testing.T) { From 8b4e4f104f87fddb34d9f3bf783dd90dc14433e8 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 12 Sep 2020 21:57:28 +0900 Subject: [PATCH 074/156] fix service of place and tag --- .../place/mock_place/mock_repository.go | 18 +++---- .../tag/mock_tag/mock_repository.go | 24 +++++----- pkg/domain/service/place/service.go | 41 ++++++++-------- pkg/domain/service/place/service_test.go | 20 ++++---- pkg/domain/service/tag/service.go | 47 +++++++++---------- pkg/domain/service/tag/service_test.go | 12 ++--- 6 files changed, 80 insertions(+), 82 deletions(-) diff --git a/pkg/domain/repository/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go index 011273d..3dfe568 100644 --- a/pkg/domain/repository/place/mock_place/mock_repository.go +++ b/pkg/domain/repository/place/mock_place/mock_repository.go @@ -8,8 +8,8 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + place "wantum/pkg/domain/entity/place" repository "wantum/pkg/domain/repository" - model "wantum/pkg/infrastructure/mysql/model" ) // MockRepository is a mock of Repository interface @@ -36,7 +36,7 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) (int, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, place) ret0, _ := ret[0].(int) @@ -51,7 +51,7 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, place interface{}) * } // Update mocks base method -func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Update", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -79,7 +79,7 @@ func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, placeID interface{}) } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -93,7 +93,7 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interfac } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *model.PlaceModel) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, place) ret0, _ := ret[0].(error) @@ -107,10 +107,10 @@ func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, place interf } // SelectByID mocks base method -func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*model.PlaceModel, error) { +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, placeID) - ret0, _ := ret[0].(*model.PlaceModel) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -122,10 +122,10 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, placeID interfac } // SelectAll mocks base method -func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (model.PlaceModelSlice, error) { +func (m *MockRepository) SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectAll", ctx, masterTx) - ret0, _ := ret[0].(model.PlaceModelSlice) + ret0, _ := ret[0].(place.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index a906cf0..ab75e21 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -8,8 +8,8 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + tag "wantum/pkg/domain/entity/tag" repository "wantum/pkg/domain/repository" - model "wantum/pkg/infrastructure/mysql/model" ) // MockRepository is a mock of Repository interface @@ -36,7 +36,7 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) (int, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Insert", ctx, masterTx, tag) ret0, _ := ret[0].(int) @@ -51,7 +51,7 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, tag interface{}) *go } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tag) ret0, _ := ret[0].(error) @@ -65,7 +65,7 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tag interface{ } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *model.TagModel) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tag) ret0, _ := ret[0].(error) @@ -93,10 +93,10 @@ func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tagID interface{}) * } // SelectByID mocks base method -func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*model.TagModel, error) { +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, tagID) - ret0, _ := ret[0].(*model.TagModel) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -108,10 +108,10 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{ } // SelectByName mocks base method -func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*model.TagModel, error) { +func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByName", ctx, masterTx, name) - ret0, _ := ret[0].(*model.TagModel) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -123,10 +123,10 @@ func (mr *MockRepositoryMockRecorder) SelectByName(ctx, masterTx, name interface } // SelectByWishCardID mocks base method -func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (model.TagModelSlice, error) { +func (m *MockRepository) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByWishCardID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(model.TagModelSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -138,10 +138,10 @@ func (mr *MockRepositoryMockRecorder) SelectByWishCardID(ctx, masterTx, wishCard } // SelectByMemoryID mocks base method -func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (model.TagModelSlice, error) { +func (m *MockRepository) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByMemoryID", ctx, masterTx, memoryID) - ret0, _ := ret[0].(model.TagModelSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 5f21689..d06911f 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -5,23 +5,22 @@ import ( "fmt" "net/http" "time" - "wantum/pkg/domain/entity" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) - Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) + Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) - GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) - GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) + GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) + GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) } type service struct { @@ -34,9 +33,9 @@ func New(repo place.Repository) Service { } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) { createdAt := time.Now() - place := &model.PlaceModel{ + place := &placeEntity.Entity{ Name: name, CreatedAt: &createdAt, UpdatedAt: &createdAt, @@ -46,12 +45,12 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return nil, werrors.Stack(err) } place.ID = result - return model.ConvertToPlaceEntity(place), nil + return place, nil } // NOTE: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ -func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -64,10 +63,10 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -79,10 +78,10 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -94,7 +93,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { @@ -117,18 +116,18 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac return nil } -func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceEntity(place), nil + return place, nil } -func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { +func (s *service) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) { places, err := s.placeRepository.SelectAll(ctx, masterTx) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToPlaceSliceEntity(places), nil + return places, nil } diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index d1dee7c..6d0be1f 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -5,9 +5,9 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place/mock_place" - "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -49,7 +49,7 @@ func TestService_Update(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -72,7 +72,7 @@ func TestService_UpDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -96,7 +96,7 @@ func TestService_DownDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -121,7 +121,7 @@ func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -143,7 +143,7 @@ func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -166,7 +166,7 @@ func TestService_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.PlaceModel{ + dummyData := &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, @@ -188,14 +188,14 @@ func TestService_GetAll(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.PlaceModelSlice{ - &model.PlaceModel{ + dummyData := placeEntity.EntitySlice{ + &placeEntity.Entity{ ID: 1, Name: "tokyo", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, }, - &model.PlaceModel{ + &placeEntity.Entity{ ID: 2, Name: "shibuya", CreatedAt: &dummyDate, diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index e614149..7de8702 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -5,24 +5,23 @@ import ( "fmt" "net/http" "time" - "wantum/pkg/domain/entity" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) + Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) - GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) - GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) - GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) + GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) + GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) + GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) + GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) } type service struct { @@ -35,9 +34,9 @@ func New(repo tag.Repository) Service { } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { createdAt := time.Now() - tag := &model.TagModel{ + tag := &tagEntity.Entity{ Name: name, CreatedAt: &createdAt, UpdatedAt: &createdAt, @@ -47,10 +46,10 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return nil, werrors.Stack(err) } tag.ID = result - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) @@ -62,10 +61,10 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) @@ -77,7 +76,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { @@ -100,34 +99,34 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI return nil } -func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (s *service) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByName(ctx, masterTx, name) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagEntity(tag), nil + return tag, nil } -func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { +func (s *service) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) { tags, err := s.tagRepository.SelectByWishCardID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagSliceEntity(tags), nil + return tags, nil } -func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { +func (s *service) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tagEntity.EntitySlice, error) { tags, err := s.tagRepository.SelectByMemoryID(ctx, masterTx, memoryID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToTagSliceEntity(tags), nil + return tags, nil } diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 9cb1cf5..4a7023b 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -5,9 +5,9 @@ import ( "os" "testing" "time" + tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag/mock_tag" - "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -18,14 +18,14 @@ var ( dummyDate time.Time ) -var dummyTagSlice = model.TagModelSlice{ - &model.TagModel{ +var dummyTagSlice = tagEntity.EntitySlice{ + &tagEntity.Entity{ ID: 1, Name: "sampleTag1", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, }, - &model.TagModel{ + &tagEntity.Entity{ ID: 2, Name: "sampleTag2", CreatedAt: &dummyDate, @@ -33,7 +33,7 @@ var dummyTagSlice = model.TagModelSlice{ }, } -var dummyTag = &model.TagModel{ +var dummyTag = &tagEntity.Entity{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, @@ -106,7 +106,7 @@ func TestService_Delete(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummy := &model.TagModel{ + dummy := &tagEntity.Entity{ ID: 1, Name: "sampleTag", CreatedAt: &dummyDate, From 4f189f504ed80d692e66528d379028f7ffa72f26 Mon Sep 17 00:00:00 2001 From: Takumaron Date: Tue, 15 Sep 2020 11:19:44 +0900 Subject: [PATCH 075/156] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=95=E3=83=AA?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 6 +----- go.sum | 18 ------------------ 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/go.mod b/go.mod index d50eb0c..6948a39 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,9 @@ require ( cloud.google.com/go/firestore v1.2.0 // indirect firebase.google.com/go v3.12.0+incompatible github.com/go-sql-driver/mysql v1.5.0 -<<<<<<< HEAD - github.com/golang/mock v1.4.3 + github.com/golang/mock v1.4.4 github.com/golang/protobuf v1.4.1 github.com/google/uuid v1.1.2 -======= - github.com/golang/mock v1.4.4 ->>>>>>> 88d96104943fdd7887b83bc500fce78f09d72c55 github.com/google/wire v0.4.0 github.com/gorilla/mux v1.7.4 github.com/grpc-ecosystem/go-grpc-middleware v1.2.1 diff --git a/go.sum b/go.sum index 9176b82..242680e 100644 --- a/go.sum +++ b/go.sum @@ -57,12 +57,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -<<<<<<< HEAD github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -======= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= ->>>>>>> 88d96104943fdd7887b83bc500fce78f09d72c55 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -78,7 +74,6 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= @@ -87,7 +82,6 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -101,7 +95,6 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -111,16 +104,11 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3 h1:SRgJV+IoxM5MKyFdlSUeNy6/ycRUF2yBAKdAQswoHUk= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -<<<<<<< HEAD github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -======= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= ->>>>>>> 88d96104943fdd7887b83bc500fce78f09d72c55 github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -132,7 +120,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.2.1 h1:V59tBiPuMkySHwJkuq/OYkK0W github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -178,14 +165,11 @@ go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/arch v0.0.0-20200826200359-b19915210f00 h1:cfd5G6xu8iZTFmjBYVemyBmE/sTf0A3vpE3BmoOuLCI= golang.org/x/arch v0.0.0-20200826200359-b19915210f00/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -235,7 +219,6 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd h1:QPwSajcTUrFriMF1nJ3XzgoqakqQEsnZf9LdXdi2nkI= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -382,7 +365,6 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= From 588c51721902d9b1b7e718b250b66a3ebb105ece Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Wed, 16 Sep 2020 23:35:09 +0900 Subject: [PATCH 076/156] =?UTF-8?q?wishcard=20service=E3=81=AF=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 18 +- pkg/domain/entity/wishcard/entity.go | 3 +- .../tag/mock_tag/mock_repository.go | 15 + pkg/domain/repository/tag/repository.go | 1 + .../mock_wish_card/mock_repository.go | 36 +- pkg/domain/service/wishcard/service.go | 231 +++++++++-- pkg/domain/service/wishcard/service_test.go | 391 +++++++++++++----- pkg/domain/service/wishcardtag/service.go | 4 +- pkg/infrastructure/mysql/tag/repository.go | 50 +++ .../mysql/tag/repository_test.go | 18 + .../mysql/wishcard/repository.go | 21 +- .../mysql/wishcard/repository_test.go | 41 +- 12 files changed, 653 insertions(+), 176 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 381290d..ccc98dd 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -48,12 +48,6 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity // TODO: placeがすでにあったら辛いね... return werrors.Stack(err) } - newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, userID, categoryID, place.ID) - if err != nil { - return werrors.Stack(err) - } - newWishCard.Place = place - var tagIDs []int for _, tagName := range tags { var tag *entity.Tag @@ -64,11 +58,15 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity return werrors.Stack(err) } } - newWishCard.Tags = append(newWishCard.Tags, tag) tagIDs = append(tagIDs, tag.ID) } - err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, newWishCard.ID, tagIDs) + newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, userID, categoryID, place.ID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + + err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, newWishCard.ID, tagIDs) if err != nil { return werrors.Stack(err) } @@ -80,6 +78,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity return newWishCard, nil } +// TODO: serviceに色々以降 func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { var wishCard *entity.WishCard var err error @@ -126,6 +125,7 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, return wishCard, nil } +// TODO: serviceに色々以降 func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) error { var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -146,6 +146,7 @@ func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) err return nil } +// TODO: serviceに色々以降 func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) { var wishCard *entity.WishCard var err error @@ -172,6 +173,7 @@ func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishC return wishCard, nil } +// TODO: serviceに色々以降 func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) { var wishCards entity.WishCardSlice var err error diff --git a/pkg/domain/entity/wishcard/entity.go b/pkg/domain/entity/wishcard/entity.go index fc8c68b..27e674c 100644 --- a/pkg/domain/entity/wishcard/entity.go +++ b/pkg/domain/entity/wishcard/entity.go @@ -4,11 +4,12 @@ import ( "time" "wantum/pkg/domain/entity/place" "wantum/pkg/domain/entity/tag" + "wantum/pkg/domain/entity/user" ) type Entity struct { ID int - UserID int // TODO: entityの差し返して + Author *user.Entity Activity string Description string Date *time.Time diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index ab75e21..48ea632 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -107,6 +107,21 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, tagID interface{ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByID", reflect.TypeOf((*MockRepository)(nil).SelectByID), ctx, masterTx, tagID) } +// SelectByIDs mocks base method +func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tag.EntitySlice, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SelectByIDs", ctx, masterTx, tagIDs) + ret0, _ := ret[0].(tag.EntitySlice) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SelectByIDs indicates an expected call of SelectByIDs +func (mr *MockRepositoryMockRecorder) SelectByIDs(ctx, masterTx, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SelectByIDs", reflect.TypeOf((*MockRepository)(nil).SelectByIDs), ctx, masterTx, tagIDs) +} + // SelectByName mocks base method func (m *MockRepository) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) { m.ctrl.T.Helper() diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 2caa586..06fc03a 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -14,6 +14,7 @@ type Repository interface { Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tag.EntitySlice, error) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) SelectByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) diff --git a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go index 0524c60..e82089f 100644 --- a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go +++ b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: pkg/domain/repository/wish_card/repository.go +// Source: pkg/domain/repository/wishcard/repository.go // Package mock_wish_card is a generated GoMock package. package mock_wish_card @@ -8,8 +8,8 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + wishcard "wantum/pkg/domain/entity/wishcard" repository "wantum/pkg/domain/repository" - model "wantum/pkg/infrastructure/mysql/model" ) // MockRepository is a mock of Repository interface @@ -36,36 +36,36 @@ func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { } // Insert mocks base method -func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) (int, error) { +func (m *MockRepository) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCard) + ret := m.ctrl.Call(m, "Insert", ctx, masterTx, wishCard, categoryID) ret0, _ := ret[0].(int) ret1, _ := ret[1].(error) return ret0, ret1 } // Insert indicates an expected call of Insert -func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCard interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCard, categoryID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCard) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Insert", reflect.TypeOf((*MockRepository)(nil).Insert), ctx, masterTx, wishCard, categoryID) } // Update mocks base method -func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard) + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard, categoryID) ret0, _ := ret[0].(error) return ret0 } // Update indicates an expected call of Update -func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard, categoryID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard, categoryID) } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCard) ret0, _ := ret[0].(error) @@ -79,7 +79,7 @@ func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, wishCard inter } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *model.WishCardModel) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCard) ret0, _ := ret[0].(error) @@ -107,10 +107,10 @@ func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID interface } // SelectByID mocks base method -func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*model.WishCardModel, error) { +func (m *MockRepository) SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(*model.WishCardModel) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -122,10 +122,10 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, wishCardID inter } // SelectByIDs mocks base method -func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (model.WishCardModelSlice, error) { +func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByIDs", ctx, masterTx, wishCardIDs) - ret0, _ := ret[0].(model.WishCardModelSlice) + ret0, _ := ret[0].(wishcard.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -137,10 +137,10 @@ func (mr *MockRepositoryMockRecorder) SelectByIDs(ctx, masterTx, wishCardIDs int } // SelectByCategoryID mocks base method -func (m *MockRepository) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (model.WishCardModelSlice, error) { +func (m *MockRepository) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByCategoryID", ctx, masterTx, categryID) - ret0, _ := ret[0].(model.WishCardModelSlice) + ret0, _ := ret[0].(wishcard.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index d44417a..77a336b 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -6,111 +6,203 @@ import ( "net/http" "strconv" "time" - "wantum/pkg/domain/entity" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" + "wantum/pkg/domain/repository/profile" "wantum/pkg/domain/repository/tag" + "wantum/pkg/domain/repository/user" "wantum/pkg/domain/repository/wishcard" - "wantum/pkg/infrastructure/mysql/model" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) + Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagsIDs []int) (*wishCardEntity.Entity, error) + Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) - GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) - GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) - GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) + GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) + GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) + GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) } type service struct { - wishCardRepository wishcard.Repository - placeRepository place.Repository - tagsRepository tag.Repository + userRepository user.Repository + userProfileRepository profile.Repository + wishCardRepository wishcard.Repository + placeRepository place.Repository + tagsRepository tag.Repository } -func New(repo wishcard.Repository) Service { +func New(wcRepo wishcard.Repository, userRepo user.Repository, upRepo profile.Repository, placeRepo place.Repository, tagRepo tag.Repository) Service { return &service{ - wishCardRepository: repo, + wishCardRepository: wcRepo, + userRepository: userRepo, + userProfileRepository: upRepo, + placeRepository: placeRepo, + tagsRepository: tagRepo, } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { + // get user + author, err := s.userRepository.SelectByPK(ctx, masterTx, userID) + if err != nil { + return nil, werrors.Stack(err) + } + authorProfile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, userID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = authorProfile + + // get place + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + + // get tag + tags, err := s.tagsRepository.SelectByIDs(ctx, masterTx, tagIDs) + if err != nil { + return nil, werrors.Stack(err) + } + createdAt := time.Now() - wishCard := &model.WishCardModel{ - UserID: userID, + wishCard := &wishCardEntity.Entity{ + Author: author, Activity: activity, Description: description, Date: date, - CategoryID: categoryID, - PlaceID: placeID, CreatedAt: &createdAt, UpdatedAt: &createdAt, + Place: place, + Tags: tags, } - result, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard) + result, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard, categoryID) if err != nil { return nil, err } wishCard.ID = result - return model.ConvertToWishCardEntiry(wishCard), nil + + return wishCard, nil } // NOTE: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ -func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByIDs(ctx, masterTx, tagIDs) + if err != nil { + return nil, werrors.Stack(err) + } + updatedAt := time.Now() + wishCard.Author = author // TODO: 今後、authorの更新があるかも wishCard.Activity = activity wishCard.Description = description wishCard.Date = date wishCard.DoneAt = doneAt - wishCard.CategoryID = categoryID - wishCard.PlaceID = placeID + wishCard.Place = place wishCard.UpdatedAt = &updatedAt + wishCard.Tags = tags - err = s.wishCardRepository.Update(ctx, masterTx, wishCard) + err = s.wishCardRepository.Update(ctx, masterTx, wishCard, categoryID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardEntiry(wishCard), nil + return wishCard, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } updatedAt := time.Now() wishCard.UpdatedAt = &updatedAt wishCard.DeletedAt = &updatedAt + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardEntiry(wishCard), nil + return wishCard, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } updatedAt := time.Now() wishCard.UpdatedAt = &updatedAt wishCard.DeletedAt = nil + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardEntiry(wishCard), nil + return wishCard, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { @@ -121,6 +213,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish if wishCard.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. wishCardID=%v", wishCardID), + codes.InvalidArgument, // TODO: 適切か? http.StatusBadRequest, "このデータは削除できません", "could not delete this place", @@ -133,30 +226,96 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish return nil } -func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardEntiry(wishCard), nil + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags + return wishCard, nil } -func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { +func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) { idList := make([]string, 0, len(wishCardIDs)) for _, id := range wishCardIDs { idList = append(idList, strconv.Itoa(id)) } wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, idList) + // OPTIMIZE: 絶対遅い + for _, wishCard := range wishCards { + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags + } if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardSliceEntity(wishCards), nil + return wishCards, nil } -func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { +func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) { wishCards, err := s.wishCardRepository.SelectByCategoryID(ctx, masterTx, categoryID) if err != nil { return nil, werrors.Stack(err) } - return model.ConvertToWishCardSliceEntity(wishCards), nil + // OPTIMIZE: 絶対遅い + for _, wishCard := range wishCards { + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags + } + return wishCards, nil } diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index d012e11..125d38a 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -5,9 +5,17 @@ import ( "os" "testing" "time" + placeEntity "wantum/pkg/domain/entity/place" + tagEntity "wantum/pkg/domain/entity/tag" + userEntity "wantum/pkg/domain/entity/user" + profileEntity "wantum/pkg/domain/entity/userprofile" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/place/mock_place" + "wantum/pkg/domain/repository/profile/mock_profile" + "wantum/pkg/domain/repository/tag/mock_tag" + "wantum/pkg/domain/repository/user/mock_user" "wantum/pkg/domain/repository/wishcard/mock_wish_card" - "wantum/pkg/infrastructure/mysql/model" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -23,6 +31,55 @@ var ( dummyDescription = "sampleDescription" ) +var dummyProfile = profileEntity.Entity{ + UserID: 1, + Name: "dummyName", + Thumbnail: "dummyThumbnail", + Bio: "dummyBio", + Gender: 1, + Phone: "12345678901", + Birth: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, +} + +var dummyUser = userEntity.Entity{ + ID: 1, + AuthID: "dummyID", + UserName: "dummyUserName", + Mail: "hogehoge@example.com", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + Profile: nil, +} + +var dummyPlace = placeEntity.Entity{ + ID: 1, + Name: "dummyPlace", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, +} + +var dummyTags = tagEntity.EntitySlice{ + &tagEntity.Entity{ + ID: 1, + Name: "tag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, + &tagEntity.Entity{ + ID: 2, + Name: "tag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, +} + func TestMain(m *testing.M) { before() code := m.Run() @@ -38,15 +95,30 @@ func TestService_Create(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().Insert(ctx, masterTx, gomock.Any()).Return(1, nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().Insert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(1, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - service := New(repo) - result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1) + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 1, result.ID) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) } func TestService_Update(t *testing.T) { @@ -54,31 +126,48 @@ func TestService_Update(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: "act", Description: "desc", Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - repo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - service := New(repo) - result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1) + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, dummyActivity, result.Activity) assert.Equal(t, dummyDescription, result.Description) - + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) } func TestService_UpDeleteFlag(t *testing.T) { @@ -86,29 +175,47 @@ func TestService_UpDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - service := New(repo) + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) result, err := service.UpDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.NotNil(t, result.DeletedAt) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) } func TestService_DownDeleteFlag(t *testing.T) { @@ -116,30 +223,48 @@ func TestService_DownDeleteFlag(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - service := New(repo) + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) result, err := service.DownDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.Nil(t, result.DeletedAt) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) } func TestService_Delete(t *testing.T) { @@ -148,28 +273,37 @@ func TestService_Delete(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) - service := New(repo) + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) err := service.Delete(ctx, masterTx, 1) assert.NoError(t, err) + }) t.Run("failure_deleteフラグがたってない", func(t *testing.T) { @@ -177,23 +311,30 @@ func TestService_Delete(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) - service := New(repo) + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) err := service.Delete(ctx, masterTx, 1) assert.Error(t, err) @@ -205,27 +346,45 @@ func TestService_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := &model.WishCardModel{ - ID: 1, - UserID: 1, + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - service := New(repo) + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) result, err := service.GetByID(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) } func TestService_GetByIDs(t *testing.T) { @@ -233,42 +392,63 @@ func TestService_GetByIDs(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.WishCardModelSlice{ - &model.WishCardModel{ - ID: 1, - UserID: 1, - Activity: "activity1", - Description: "desc2", + dummyData := wishCardEntity.EntitySlice{ + &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, }, - &model.WishCardModel{ - ID: 2, - UserID: 1, - Activity: "activity2", - Description: "desc2", + &wishCardEntity.Entity{ + ID: 2, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 2, - PlaceID: 2, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil).Times(2) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil).Times(2) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) - service := New(repo) + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 2, len(result)) + assert.Equal(t, &dummyUser, result[0].Author) + assert.Equal(t, &dummyPlace, result[0].Place) + assert.Equal(t, dummyTags, result[0].Tags) } func TestService_GetByCategoryID(t *testing.T) { @@ -276,40 +456,61 @@ func TestService_GetByCategoryID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyData := model.WishCardModelSlice{ - &model.WishCardModel{ - ID: 1, - UserID: 1, - Activity: "activity1", - Description: "desc1", + dummyData := wishCardEntity.EntitySlice{ + &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, }, - &model.WishCardModel{ - ID: 2, - UserID: 1, - Activity: "activity2", - Description: "desc2", + &wishCardEntity.Entity{ + ID: 2, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, - CategoryID: 1, - PlaceID: 2, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, }, } - repo := mock_wish_card.NewMockRepository(ctrl) - repo.EXPECT().SelectByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil).Times(2) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil).Times(2) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) - service := New(repo) + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) result, err := service.GetByCategoryID(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 2, len(result)) + assert.Equal(t, &dummyUser, result[0].Author) + assert.Equal(t, &dummyPlace, result[0].Place) + assert.Equal(t, dummyTags, result[0].Tags) } diff --git a/pkg/domain/service/wishcardtag/service.go b/pkg/domain/service/wishcardtag/service.go index 277c0fa..646f923 100644 --- a/pkg/domain/service/wishcardtag/service.go +++ b/pkg/domain/service/wishcardtag/service.go @@ -9,7 +9,7 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error - CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error + CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error } @@ -32,7 +32,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, wish return nil } -func (s *service) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { +func (s *service) CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { err := s.repository.BulkInsert(ctx, masterTx, wishCardID, tagIDs) if err != nil { return werrors.Stack(err) diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 417954b..79eee42 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -4,12 +4,16 @@ import ( "context" "database/sql" "errors" + "strconv" + "strings" tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" "wantum/pkg/infrastructure/mysql" "wantum/pkg/tlog" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type tagRepositoryImplement struct { @@ -58,6 +62,7 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r if tag.DeletedAt == nil { return werrors.Newf( errors.New("deletedAt is nil"), + codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, @@ -152,6 +157,50 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep return &result, nil } +func (repo *tagRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tagEntity.EntitySlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + tagIDsStr := make([]string, 0, len(tagIDs)) + for _, id := range tagIDs { + tagIDsStr = append(tagIDsStr, strconv.Itoa(id)) + } + + rows, err := tx.Query(` + SELECT id, name, created_at, updated_at, deleted_at + FROM tags + WHERE id + IN (` + strings.Join(tagIDsStr, ",") + `) + `) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + var result tagEntity.EntitySlice + for rows.Next() { + var record tagEntity.Entity + err = rows.Scan( + &record.ID, + &record.Name, + &record.CreatedAt, + &record.UpdatedAt, + &record.DeletedAt, + ) + if err != nil { + if err != sql.ErrNoRows { + return nil, nil + } + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + result = append(result, &record) + } + return result, nil +} + func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -258,6 +307,7 @@ func checkIsNil(tag *tagEntity.Entity) error { if tag == nil { return werrors.Newf( errors.New("required data(tag) is nil"), + codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index acc41ef..ec059d2 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -226,6 +226,24 @@ func TestSelectByID(t *testing.T) { }) } +func TestSelectByIDs(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result tagEntity.EntitySlice + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + + result, err = repo.SelectByIDs(ctx, masterTx, []int{1, 2, 3}) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, 3, len(result)) + }) +} + func TestSelectByName(t *testing.T) { t.Run("successe", func(t *testing.T) { var err error diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index 93c6812..0133c5c 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -7,12 +7,15 @@ import ( "log" "strings" placeEntity "wantum/pkg/domain/entity/place" + userEntity "wantum/pkg/domain/entity/user" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/infrastructure/mysql" "wantum/pkg/tlog" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type wishCardRepositoryImplement struct { @@ -39,7 +42,7 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re INSERT INTO wish_cards( user_id, activity, description, date, created_at, updated_at, category_id, place_id ) VALUES (?,?,?,?,?,?,?,?) - `, wishCard.UserID, + `, wishCard.Author.ID, wishCard.Activity, wishCard.Description, wishCard.Date, @@ -82,7 +85,7 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re category_id=?, place_id=? WHERE id=? - `, wishCard.UserID, + `, wishCard.Author.ID, wishCard.Activity, wishCard.Description, wishCard.Date, @@ -106,6 +109,7 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste if wishCard.DeletedAt == nil { return werrors.Newf( errors.New("deletedAt is nil"), + codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, @@ -185,9 +189,10 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT `, wishCardID) var result wishCardEntity.Entity var place placeEntity.Entity + var user userEntity.Entity err = row.Scan( &result.ID, - &result.UserID, + &user.ID, &result.Activity, &result.Description, &result.Date, @@ -201,6 +206,7 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + result.Author = &user result.Place = &place log.Println(result.Place) return &result, nil @@ -227,9 +233,10 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master for rows.Next() { var record wishCardEntity.Entity var place placeEntity.Entity + var user userEntity.Entity err = rows.Scan( &record.ID, - &record.UserID, + &user.ID, &record.Activity, &record.Description, &record.Date, @@ -246,6 +253,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Author = &user record.Place = &place result = append(result, &record) } @@ -271,9 +279,10 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, for rows.Next() { var record wishCardEntity.Entity var place placeEntity.Entity + var user userEntity.Entity err = rows.Scan( &record.ID, - &record.UserID, + &user.ID, &record.Activity, &record.Description, &record.Date, @@ -290,6 +299,7 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + record.Author = &user record.Place = &place result = append(result, &record) } @@ -300,6 +310,7 @@ func checkIsNil(wishCard *wishCardEntity.Entity) error { if wishCard == nil { return werrors.Newf( errors.New("required data(wishCard) is nil"), + codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 37d5785..317e387 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" placeEntity "wantum/pkg/domain/entity/place" + userEntity "wantum/pkg/domain/entity/user" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" wcrepo "wantum/pkg/domain/repository/wishcard" @@ -54,7 +55,9 @@ func TestInsert(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -92,8 +95,10 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - ID: 1, - UserID: 1, + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -123,8 +128,10 @@ func TestUpdate(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - ID: 1, - UserID: 1, + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -169,7 +176,9 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -200,7 +209,9 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -239,7 +250,9 @@ func TestDownDeleteFlag(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -285,7 +298,9 @@ func TestDelete(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -323,7 +338,9 @@ func TestSelectByID(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -382,7 +399,9 @@ func TestCategoryID(t *testing.T) { var err error ctx := context.Background() wishCard := &wishCardEntity.Entity{ - UserID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, From e037220e2ca7b12e823f32c5791732dea1e3e6ae Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 00:23:36 +0900 Subject: [PATCH 077/156] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?= =?UTF-8?q?=E3=81=9Ainteractor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 70 ++---- pkg/api/usecase/wishcard/interactor_test.go | 227 +++++++----------- .../service/place/mock_place/mock_service.go | 26 +- pkg/domain/service/place/service.go | 3 + .../service/tag/mock_tag/mock_service.go | 30 +-- pkg/domain/service/tag/service.go | 3 + .../wishcard/mock_wish_card/mock_service.go | 44 ++-- .../mock_wish_card_tag/mock_service.go | 14 +- 8 files changed, 171 insertions(+), 246 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index ccc98dd..ac0c349 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -3,7 +3,8 @@ package wishcard import ( "context" "time" - "wantum/pkg/domain/entity" + tagEntity "wantum/pkg/domain/entity/tag" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place" "wantum/pkg/domain/service/tag" @@ -13,11 +14,11 @@ import ( ) type Interactor interface { - CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) - UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) + CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) + UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) DeleteWishCardByID(ctx context.Context, wishCardID int) error - GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) - GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) + GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) + GetByCategoryID(ctx context.Context, categoryID int) (wishCardEntity.EntitySlice, error) } type interactor struct { @@ -38,9 +39,9 @@ func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Se } } -func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { +func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { - var newWishCard *entity.WishCard + var newWishCard *wishCardEntity.Entity var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) @@ -50,7 +51,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity } var tagIDs []int for _, tagName := range tags { - var tag *entity.Tag + var tag *tagEntity.Entity tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) if tag == nil { tag, err = i.tagService.Create(ctx, masterTx, tagName) @@ -78,9 +79,8 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity return newWishCard, nil } -// TODO: serviceに色々以降 -func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*entity.WishCard, error) { - var wishCard *entity.WishCard +func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) @@ -89,15 +89,9 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, // bynameで撮ってきて、なかったらcreateかな...ぐぬぬ return werrors.Stack(err) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID) - if err != nil { - return werrors.Stack(err) - } - wishCard.Place = place - var tagIDs []int for _, tagName := range tags { - var tag *entity.Tag + var tag *tagEntity.Entity tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) if tag == nil { tag, err = i.tagService.Create(ctx, masterTx, tagName) @@ -106,14 +100,17 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, } } tagIDs = append(tagIDs, tag.ID) - wishCard.Tags = append(wishCard.Tags, tag) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID, tagIDs) + if err != nil { + return werrors.Stack(err) } err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } - err = i.wishCardsTagsService.CreateMultipleTags(ctx, masterTx, wishCard.ID, tagIDs) + err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, wishCard.ID, tagIDs) if err != nil { return werrors.Stack(err) } @@ -125,7 +122,6 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, return wishCard, nil } -// TODO: serviceに色々以降 func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) error { var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -146,25 +142,14 @@ func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) err return nil } -// TODO: serviceに色々以降 -func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishCard, error) { - var wishCard *entity.WishCard +func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { return werrors.Stack(err) } - place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return werrors.Stack(err) - } - wishCard.Place = place - tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCardID) - if err != nil { - return werrors.Stack(err) - } - wishCard.Tags = tags return nil }) if err != nil { @@ -173,27 +158,14 @@ func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*entity.WishC return wishCard, nil } -// TODO: serviceに色々以降 -func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (entity.WishCardSlice, error) { - var wishCards entity.WishCardSlice +func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (wishCardEntity.EntitySlice, error) { + var wishCards wishCardEntity.EntitySlice var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCards, err = i.wishCardService.GetByCategoryID(ctx, masterTx, categoryID) if err != nil { return werrors.Stack(err) } - for _, wishCard := range wishCards { - place, err := i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return werrors.Stack(err) - } - wishCard.Place = place - tags, err := i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return werrors.Stack(err) - } - wishCard.Tags = tags - } return nil }) if err != nil { diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 293676c..332ef82 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -5,7 +5,12 @@ import ( "os" "testing" "time" - "wantum/pkg/domain/entity" + + placeEntity "wantum/pkg/domain/entity/place" + tagEntity "wantum/pkg/domain/entity/tag" + userEntity "wantum/pkg/domain/entity/user" + profileEntity "wantum/pkg/domain/entity/userprofile" + wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/domain/service/tag/mock_tag" @@ -21,9 +26,37 @@ var ( masterTxManager repository.MasterTxManager ) -var dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) +var ( + dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + dummyActivity = "dummyActivity" + dummyDescription = "dummyDescription" +) -var dummyTag1 = entity.Tag{ +var dummyProfile = profileEntity.Entity{ + UserID: 1, + Name: "dummyName", + Thumbnail: "dummyThumbnail", + Bio: "dummyBio", + Gender: 1, + Phone: "12345678901", + Birth: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, +} + +var dummyUser = userEntity.Entity{ + ID: 1, + AuthID: "dummyID", + UserName: "dummyUserName", + Mail: "hogehoge@example.com", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + Profile: nil, +} + +var dummyTag1 = tagEntity.Entity{ ID: 1, Name: "tag1", CreatedAt: &dummyDate, @@ -31,7 +64,7 @@ var dummyTag1 = entity.Tag{ DeletedAt: &dummyDate, } -var dummyTag2 = entity.Tag{ +var dummyTag2 = tagEntity.Entity{ ID: 2, Name: "tag2", CreatedAt: &dummyDate, @@ -39,12 +72,12 @@ var dummyTag2 = entity.Tag{ DeletedAt: nil, } -var dummyTagSlice = entity.TagSlice{ +var dummyTagSlice = tagEntity.EntitySlice{ &dummyTag1, &dummyTag2, } -var dummyPlace = entity.Place{ +var dummyPlace = placeEntity.Entity{ ID: 1, Name: "samplePlace", CreatedAt: &dummyDate, @@ -52,42 +85,18 @@ var dummyPlace = entity.Place{ DeletedAt: nil, } -// var dummyWishCard = entity.WishCard{ -// ID: 1, -// UserID: 1, -// Activity: "sampleActivity", -// Description: "sampleDescription", -// Date: &dummyDate, -// DoneAt: nil, -// CreatedAt: &dummyDate, -// UpdatedAt: &dummyDate, -// DeletedAt: &dummyDate, -// Place: &dummyPlace, -// Tags: entity.TagSlice{ -// &dummyTag1, -// &dummyTag2, -// }, -// } - -// var dummyWishCards = entity.WishCardSlice{ -// &dummyWishCard, -// &entity.WishCard{ -// ID: 2, -// UserID: 1, -// Activity: "sampleActivity", -// Description: "sampleDescription", -// Date: &dummyDate, -// DoneAt: nil, -// CreatedAt: &dummyDate, -// UpdatedAt: &dummyDate, -// DeletedAt: &dummyDate, -// Place: &dummyPlace, -// Tags: entity.TagSlice{ -// &dummyTag1, -// &dummyTag2, -// }, -// }, -// } +var dummyWishCard = wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &dummyPlace, + Tags: dummyTagSlice, +} func TestMain(m *testing.M) { before() @@ -109,30 +118,11 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := entity.WishCard{ - ID: 1, - UserID: 1, - Activity: "sampleActivity", - Description: "sampleDescription", - Date: &dummyDate, - DoneAt: nil, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, - Place: &entity.Place{ - ID: 1, - Name: "", - CreatedAt: nil, - UpdatedAt: nil, - }, - Tags: entity.TagSlice{}, - } - placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) @@ -140,7 +130,7 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) @@ -167,30 +157,25 @@ func TestInteractor_UpdateWishCard(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := entity.WishCard{ + dummyWishCard := wishCardEntity.Entity{ ID: 1, - UserID: 1, - Activity: "sampleActivity", - Description: "sampleDescription", + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, Date: &dummyDate, DoneAt: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &entity.Place{ - ID: 1, - Name: "", - CreatedAt: nil, - UpdatedAt: nil, - }, - Tags: entity.TagSlice{}, + Place: &dummyPlace, + Tags: dummyTagSlice, } placeService := mock_place.NewMockService(ctrl) placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) @@ -198,7 +183,7 @@ func TestInteractor_UpdateWishCard(t *testing.T) { tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - wishCardTagService.EXPECT().CreateMultipleTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) @@ -250,33 +235,12 @@ func TestInteractor_GetByID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := entity.WishCard{ - ID: 1, - UserID: 1, - Activity: "sampleActivity", - Description: "sampleDescription", - Date: &dummyDate, - DoneAt: &dummyDate, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, - Place: &entity.Place{ - ID: 1, - Name: "", - CreatedAt: nil, - UpdatedAt: nil, - }, - Tags: entity.TagSlice{}, - } - placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) @@ -287,9 +251,6 @@ func TestInteractor_GetByID(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) - // validate time - assert.Equal(t, (*time.Time)(nil), result.DeletedAt) - assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) // validate place assert.Equal(t, "samplePlace", result.Place.Name) // validate tag @@ -304,55 +265,41 @@ func TestInteractor_GetByCategoryID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard1 := entity.WishCard{ - ID: 1, - UserID: 1, - Activity: "sampleActivity", - Description: "sampleDescription", - Date: &dummyDate, - DoneAt: &dummyDate, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, - Place: &entity.Place{ - ID: 1, - Name: "", - CreatedAt: nil, - UpdatedAt: nil, + dummyWishCards := wishCardEntity.EntitySlice{ + &wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, }, - Tags: entity.TagSlice{}, - } - dummyWishCard2 := entity.WishCard{ - ID: 2, - UserID: 2, - Activity: "sampleActivity2", - Description: "sampleDescription2", - Date: &dummyDate, - DoneAt: nil, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, - Place: &entity.Place{ - ID: 1, - Name: "", - CreatedAt: nil, - UpdatedAt: nil, + &wishCardEntity.Entity{ + ID: 2, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, }, - Tags: entity.TagSlice{}, - } - dummyWishCards := entity.WishCardSlice{ - &dummyWishCard1, - &dummyWishCard2, } placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) wishCardService := mock_wish_card.NewMockService(ctrl) wishCardService.EXPECT().GetByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyWishCards, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil).Times(2) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go index 0678629..90a2d65 100644 --- a/pkg/domain/service/place/mock_place/mock_service.go +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -8,7 +8,7 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" - entity "wantum/pkg/domain/entity" + place "wantum/pkg/domain/entity/place" repository "wantum/pkg/domain/repository" ) @@ -36,10 +36,10 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { } // Create mocks base method -func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Place, error) { +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) - ret0, _ := ret[0].(*entity.Place) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -51,10 +51,10 @@ func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomo } // Update mocks base method -func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*entity.Place, error) { +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Update", ctx, masterTx, placeID, name) - ret0, _ := ret[0].(*entity.Place) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -80,10 +80,10 @@ func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, placeID interface{}) *g } // UpDeleteFlag mocks base method -func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, placeID) - ret0, _ := ret[0].(*entity.Place) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -95,10 +95,10 @@ func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, placeID interface } // DownDeleteFlag mocks base method -func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, placeID) - ret0, _ := ret[0].(*entity.Place) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -110,10 +110,10 @@ func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, placeID interfa } // GetByID mocks base method -func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*entity.Place, error) { +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, placeID) - ret0, _ := ret[0].(*entity.Place) + ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -125,10 +125,10 @@ func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, placeID interface{}) * } // GetAll mocks base method -func (m *MockService) GetAll(ctx context.Context, masterTx repository.MasterTx) (entity.PlaceSlice, error) { +func (m *MockService) GetAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetAll", ctx, masterTx) - ret0, _ := ret[0].(entity.PlaceSlice) + ret0, _ := ret[0].(place.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index d06911f..b761b15 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -9,6 +9,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type Service interface { @@ -104,6 +106,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac if place.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. placeID=%v", placeID), + codes.Internal, // TODO: 適切か? http.StatusBadRequest, "このデータは削除できません", "could not delete this place", diff --git a/pkg/domain/service/tag/mock_tag/mock_service.go b/pkg/domain/service/tag/mock_tag/mock_service.go index 6426d14..f9cca6f 100644 --- a/pkg/domain/service/tag/mock_tag/mock_service.go +++ b/pkg/domain/service/tag/mock_tag/mock_service.go @@ -8,7 +8,7 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" - entity "wantum/pkg/domain/entity" + tag "wantum/pkg/domain/entity/tag" repository "wantum/pkg/domain/repository" ) @@ -36,10 +36,10 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { } // Create mocks base method -func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Create", ctx, masterTx, name) - ret0, _ := ret[0].(*entity.Tag) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -51,10 +51,10 @@ func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomo } // UpDeleteFlag mocks base method -func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tagID) - ret0, _ := ret[0].(*entity.Tag) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -66,10 +66,10 @@ func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, tagID interface{} } // DownDeleteFlag mocks base method -func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tagID) - ret0, _ := ret[0].(*entity.Tag) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -95,10 +95,10 @@ func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gom } // GetByID mocks base method -func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*entity.Tag, error) { +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, tagID) - ret0, _ := ret[0].(*entity.Tag) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -110,10 +110,10 @@ func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, tagID interface{}) *go } // GetByName mocks base method -func (m *MockService) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*entity.Tag, error) { +func (m *MockService) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByName", ctx, masterTx, name) - ret0, _ := ret[0].(*entity.Tag) + ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -125,10 +125,10 @@ func (mr *MockServiceMockRecorder) GetByName(ctx, masterTx, name interface{}) *g } // GetByWishCardID mocks base method -func (m *MockService) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (entity.TagSlice, error) { +func (m *MockService) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByWishCardID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(entity.TagSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -140,10 +140,10 @@ func (mr *MockServiceMockRecorder) GetByWishCardID(ctx, masterTx, wishCardID int } // GetByMemoryID mocks base method -func (m *MockService) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (entity.TagSlice, error) { +func (m *MockService) GetByMemoryID(ctx context.Context, masterTx repository.MasterTx, memoryID int) (tag.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByMemoryID", ctx, masterTx, memoryID) - ret0, _ := ret[0].(entity.TagSlice) + ret0, _ := ret[0].(tag.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 7de8702..9a44877 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -9,6 +9,8 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type Service interface { @@ -87,6 +89,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI if tag.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. tagID=%v", tagID), + codes.Internal, // TODO: 適切か? http.StatusBadRequest, "このデータは削除できません", "could not delete this place", diff --git a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go index 433f4c5..6fa4292 100644 --- a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go +++ b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: pkg/domain/service/wish_card/service.go +// Source: pkg/domain/service/wishcard/service.go // Package mock_wish_card is a generated GoMock package. package mock_wish_card @@ -9,7 +9,7 @@ import ( gomock "github.com/golang/mock/gomock" reflect "reflect" time "time" - entity "wantum/pkg/domain/entity" + wishcard "wantum/pkg/domain/entity/wishcard" repository "wantum/pkg/domain/repository" ) @@ -37,33 +37,33 @@ func (m *MockService) EXPECT() *MockServiceMockRecorder { } // Create mocks base method -func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { +func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagsIDs []int) (*wishcard.Entity, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Create", ctx, masterTx, activity, description, date, userID, categoryID, placeID) - ret0, _ := ret[0].(*entity.WishCard) + ret := m.ctrl.Call(m, "Create", ctx, masterTx, activity, description, date, userID, categoryID, placeID, tagsIDs) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } // Create indicates an expected call of Create -func (mr *MockServiceMockRecorder) Create(ctx, masterTx, activity, description, date, userID, categoryID, placeID interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) Create(ctx, masterTx, activity, description, date, userID, categoryID, placeID, tagsIDs interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, activity, description, date, userID, categoryID, placeID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, activity, description, date, userID, categoryID, placeID, tagsIDs) } // Update mocks base method -func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int) (*entity.WishCard, error) { +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishcard.Entity, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) - ret0, _ := ret[0].(*entity.WishCard) + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } // Update indicates an expected call of Update -func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) } // Delete mocks base method @@ -81,10 +81,10 @@ func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) } // UpDeleteFlag mocks base method -func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(*entity.WishCard) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -96,10 +96,10 @@ func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, wishCardID interf } // DownDeleteFlag mocks base method -func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(*entity.WishCard) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -111,10 +111,10 @@ func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, wishCardID inte } // GetByID mocks base method -func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*entity.WishCard, error) { +func (m *MockService) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(*entity.WishCard) + ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -126,10 +126,10 @@ func (mr *MockServiceMockRecorder) GetByID(ctx, masterTx, wishCardID interface{} } // GetByIDs mocks base method -func (m *MockService) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (entity.WishCardSlice, error) { +func (m *MockService) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishcard.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByIDs", ctx, masterTx, wishCardIDs) - ret0, _ := ret[0].(entity.WishCardSlice) + ret0, _ := ret[0].(wishcard.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -141,10 +141,10 @@ func (mr *MockServiceMockRecorder) GetByIDs(ctx, masterTx, wishCardIDs interface } // GetByCategoryID mocks base method -func (m *MockService) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (entity.WishCardSlice, error) { +func (m *MockService) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishcard.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetByCategoryID", ctx, masterTx, categoryID) - ret0, _ := ret[0].(entity.WishCardSlice) + ret0, _ := ret[0].(wishcard.EntitySlice) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go index 24156d1..2a3d449 100644 --- a/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go +++ b/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: pkg/domain/service/wish_card_tag/service.go +// Source: pkg/domain/service/wishcardtag/service.go // Package mock_wish_card_tag is a generated GoMock package. package mock_wish_card_tag @@ -48,18 +48,18 @@ func (mr *MockServiceMockRecorder) Create(ctx, masterTx, wishCardID, tagID inter return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, wishCardID, tagID) } -// CreateMultipleTags mocks base method -func (m *MockService) CreateMultipleTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { +// CreateMultipleRelation mocks base method +func (m *MockService) CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateMultipleTags", ctx, masterTx, wishCardID, tagIDs) + ret := m.ctrl.Call(m, "CreateMultipleRelation", ctx, masterTx, wishCardID, tagIDs) ret0, _ := ret[0].(error) return ret0 } -// CreateMultipleTags indicates an expected call of CreateMultipleTags -func (mr *MockServiceMockRecorder) CreateMultipleTags(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { +// CreateMultipleRelation indicates an expected call of CreateMultipleRelation +func (mr *MockServiceMockRecorder) CreateMultipleRelation(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMultipleTags", reflect.TypeOf((*MockService)(nil).CreateMultipleTags), ctx, masterTx, wishCardID, tagIDs) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMultipleRelation", reflect.TypeOf((*MockService)(nil).CreateMultipleRelation), ctx, masterTx, wishCardID, tagIDs) } // Delete mocks base method From db4e51384cb8c9bd833380c1b3e6af94005067d8 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 11:06:55 +0900 Subject: [PATCH 078/156] add comment --- pkg/api/usecase/wishcard/interactor_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 332ef82..0348c0f 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -21,6 +21,9 @@ import ( "github.com/stretchr/testify/assert" ) +// TODO: dummyデータを充実させる +// TODO: test名を日本語にする + var ( masterTx repository.MasterTx masterTxManager repository.MasterTxManager From 36a198dc357adfede1a8e1da7011389fedde0c3e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 11:44:26 +0900 Subject: [PATCH 079/156] fix error code --- pkg/domain/service/place/service.go | 2 +- pkg/domain/service/tag/service.go | 2 +- pkg/domain/service/wishcard/service.go | 2 +- pkg/infrastructure/mysql/place/repository.go | 8 ++++++-- pkg/infrastructure/mysql/tag/repository.go | 4 ++-- pkg/infrastructure/mysql/wishcard/repository.go | 4 ++-- 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index b761b15..2187dfd 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -106,7 +106,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac if place.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. placeID=%v", placeID), - codes.Internal, // TODO: 適切か? + codes.FailedPrecondition, http.StatusBadRequest, "このデータは削除できません", "could not delete this place", diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 9a44877..b5dabe5 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -89,7 +89,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI if tag.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. tagID=%v", tagID), - codes.Internal, // TODO: 適切か? + codes.FailedPrecondition, http.StatusBadRequest, "このデータは削除できません", "could not delete this place", diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 77a336b..c0cabc8 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -213,7 +213,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish if wishCard.DeletedAt == nil { return werrors.Newf( fmt.Errorf("can't delete this data. this data did not up a delete flag. wishCardID=%v", wishCardID), - codes.InvalidArgument, // TODO: 適切か? + codes.FailedPrecondition, http.StatusBadRequest, "このデータは削除できません", "could not delete this place", diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 6c93c29..f13a52b 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -10,6 +10,8 @@ import ( "wantum/pkg/infrastructure/mysql" "wantum/pkg/tlog" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type placeRepositoryImplement struct { @@ -87,7 +89,8 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx } if place.DeletedAt == nil { return werrors.Newf( - errors.New("deletedAt is nil"), + errors.New("can't up delete flag. deletedAt is nil"), + codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, @@ -220,7 +223,8 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re func checkIsNil(place *placeEntity.Entity) error { if place == nil { return werrors.Newf( - errors.New("required data(place) is nil"), + errors.New("required data is nil"), + codes.Unknown, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 79eee42..1ec1771 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -61,7 +61,7 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r } if tag.DeletedAt == nil { return werrors.Newf( - errors.New("deletedAt is nil"), + errors.New("can't up delete flag. deletedAt is nil"), codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, @@ -307,7 +307,7 @@ func checkIsNil(tag *tagEntity.Entity) error { if tag == nil { return werrors.Newf( errors.New("required data(tag) is nil"), - codes.Internal, + codes.Unknown, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index 0133c5c..c729efb 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -108,7 +108,7 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste } if wishCard.DeletedAt == nil { return werrors.Newf( - errors.New("deletedAt is nil"), + errors.New("can't up delete flag. deletedAt is nil"), codes.Internal, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, @@ -310,7 +310,7 @@ func checkIsNil(wishCard *wishCardEntity.Entity) error { if wishCard == nil { return werrors.Newf( errors.New("required data(wishCard) is nil"), - codes.Internal, + codes.Unknown, werrors.ServerError.ErrorCode, werrors.ServerError.ErrorMessageJP, werrors.ServerError.ErrorMessageEN, From e3bb52922e885cc19e88202c2db298a0b294ab88 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 14:40:12 +0900 Subject: [PATCH 080/156] update test db connection --- pkg/domain/repository/wishcard/repository.go | 1 - pkg/domain/service/place/service.go | 2 +- pkg/domain/service/wishcard/service.go | 4 +- pkg/infrastructure/mysql/place/repository.go | 2 +- .../mysql/place/repository_test.go | 4 +- .../mysql/tag/repository_test.go | 4 +- .../mysql/wishcard/repository_test.go | 4 +- .../mysql/wishcardtag/repository_test.go | 4 +- pkg/testutil/connect_db.go | 38 +++++++++++++++++++ 9 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 pkg/testutil/connect_db.go diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 9370eb5..8f03a5d 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -18,5 +18,4 @@ type Repository interface { SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) - // TODO: SelectByCategoryIDsあっても良いかもと思ったが? } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 2187dfd..d236f72 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -50,7 +50,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return place, nil } -// NOTE: 空値があった時、元データが消滅する。 +// WARNING: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index c0cabc8..92c213f 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -93,7 +93,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti return wishCard, nil } -// NOTE: 空値があった時、元データが消滅する。 +// WARNING: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) @@ -119,7 +119,7 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish } updatedAt := time.Now() - wishCard.Author = author // TODO: 今後、authorの更新があるかも + wishCard.Author = author // NOTE: 今後、authorの更新があるかも wishCard.Activity = activity wishCard.Description = description wishCard.Date = date diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index f13a52b..e47b5b3 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -178,7 +178,7 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r &result.UpdatedAt, &result.DeletedAt) if err != nil { - // TODO: no rows無くて大丈夫? + // QUESTION: no rows無くて大丈夫?no rowsをエラーにするかしないか迷うのでどうしよう tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 3b99166..56d50a0 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -12,6 +12,7 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/testutil" "github.com/stretchr/testify/assert" @@ -35,8 +36,7 @@ func TestMain(m *testing.M) { // repositoryを作ってもらう func before() { var err error - // TODO: 環境変数とか使いたい気持ちもする - db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + db, err = testutil.ConnectLocalDB() if err != nil { log.Fatal("faild to connect db: ", err) } diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index ec059d2..2b97247 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -13,6 +13,7 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/testutil" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -35,8 +36,7 @@ func TestMain(m *testing.M) { // repositoryを作ってもらう func before() { var err error - // TODO: 環境変数とか使いたい気持ちもする - db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + db, err = testutil.ConnectLocalDB() if err != nil { log.Fatal("faild to connect db: ", err) } diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 317e387..7eb8e42 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -14,6 +14,7 @@ import ( "wantum/pkg/domain/repository" wcrepo "wantum/pkg/domain/repository/wishcard" tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/testutil" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -36,8 +37,7 @@ func TestMain(m *testing.M) { func before() { var err error - // TODO: 環境変数とか使いたい気持ちもする - db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + db, err = testutil.ConnectLocalDB() if err != nil { log.Fatal("faild to connect db: ", err) } diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index a765597..a8d3ca4 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -10,6 +10,7 @@ import ( "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcardtag" tx "wantum/pkg/infrastructure/mysql" + "wantum/pkg/testutil" _ "github.com/go-sql-driver/mysql" "github.com/stretchr/testify/assert" @@ -29,8 +30,7 @@ func TestMain(m *testing.M) { func before() { var err error - // TODO: 環境変数とか使いたい気持ちもする - db, err = sql.Open("mysql", "root:root@tcp(localhost:3306)/wantum?parseTime=true") + db, err = testutil.ConnectLocalDB() if err != nil { log.Fatal("faild to connect db: ", err) } diff --git a/pkg/testutil/connect_db.go b/pkg/testutil/connect_db.go new file mode 100644 index 0000000..d04dfe5 --- /dev/null +++ b/pkg/testutil/connect_db.go @@ -0,0 +1,38 @@ +package testutil + +import ( + "database/sql" + "fmt" + "log" + "os" + "wantum/pkg/constants" +) + +func ConnectLocalDB() (*sql.DB, error) { + + dbuser := os.Getenv("MYSQL_USER") + if dbuser == "" { + dbuser = constants.MysqlDefaultUser + } + dbpassword := os.Getenv("MYSQL_PASSWORD") + if dbpassword == "" { + dbpassword = constants.MysqlDefaultPassword + } + dbhost := os.Getenv("MYSQL_HOST") + if dbhost == "" { + dbhost = constants.MysqlDefaultHost + } + dbport := os.Getenv("MYSQL_PORT") + if dbport == "" { + dbport = constants.MysqlDefaultPort + } + dbname := os.Getenv("MYSQL_DATABASE") + if dbname == "" { + dbname = constants.MysqlDefaultName + } + + dataSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", dbuser, dbpassword, dbhost, dbport, dbname) + log.Println(dataSource) + + return sql.Open("mysql", dataSource) +} From 99da3c2a3720d3ae0f4e0aa13fba5370e963ad0c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 14:49:15 +0900 Subject: [PATCH 081/156] =?UTF-8?q?wishcard=E3=81=8C=E8=A6=8B=E3=81=A4?= =?UTF-8?q?=E3=81=8B=E3=82=89=E3=81=AA=E3=81=84=E6=99=82=E3=80=81error?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8Fnil=E3=82=92=E8=BF=94?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/wishcard/repository.go | 4 +++- pkg/infrastructure/mysql/wishcard/repository_test.go | 11 +++++------ pkg/testutil/connect_db.go | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index c729efb..cfb676e 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -202,7 +202,9 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT &result.DeletedAt, &place.ID) if err != nil { - // TODO: これってno rowsでもえらーでおっけえなの? + if err == sql.ErrNoRows { + return nil, nil + } tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 7eb8e42..b54a4b1 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -3,7 +3,6 @@ package wishcard import ( "context" "database/sql" - "errors" "log" "os" "testing" @@ -321,14 +320,14 @@ func TestDelete(t *testing.T) { if err != nil { return err } + assert.NoError(t, err) result, err = repo.SelectByID(ctx, masterTx, wishCard.ID) - if err == nil { - return errors.New("削除されたデータが見つかった") - } + assert.NoError(t, err) + return nil }) - assert.NoError(t, err) + assert.Nil(t, result) }) } @@ -370,7 +369,7 @@ func TestSelectByID(t *testing.T) { result, err = repo.SelectByID(ctx, masterTx, -1) return err }) - assert.Error(t, err) + assert.NoError(t, err) assert.Nil(t, result) }) } diff --git a/pkg/testutil/connect_db.go b/pkg/testutil/connect_db.go index d04dfe5..0dc397a 100644 --- a/pkg/testutil/connect_db.go +++ b/pkg/testutil/connect_db.go @@ -3,9 +3,9 @@ package testutil import ( "database/sql" "fmt" - "log" "os" "wantum/pkg/constants" + "wantum/pkg/tlog" ) func ConnectLocalDB() (*sql.DB, error) { @@ -32,7 +32,7 @@ func ConnectLocalDB() (*sql.DB, error) { } dataSource := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", dbuser, dbpassword, dbhost, dbport, dbname) - log.Println(dataSource) + tlog.GetAppLogger().Info(fmt.Sprintf("connect db: %s", dataSource)) return sql.Open("mysql", dataSource) } From 0847adcd6b4eb513e9d77a2534644cecbfcaa027 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:00:25 +0900 Subject: [PATCH 082/156] update test --- pkg/api/usecase/wishcard/interactor.go | 5 +- pkg/api/usecase/wishcard/interactor_test.go | 66 +++++++++++---------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index ac0c349..1591c8d 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -46,7 +46,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { - // TODO: placeがすでにあったら辛いね... + // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } var tagIDs []int @@ -85,8 +85,7 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { - // TODO: placeがすでにあったら辛いね... - // bynameで撮ってきて、なかったらcreateかな...ぐぬぬ + // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } var tagIDs []int diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 0348c0f..a6e0703 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -21,9 +21,6 @@ import ( "github.com/stretchr/testify/assert" ) -// TODO: dummyデータを充実させる -// TODO: test名を日本語にする - var ( masterTx repository.MasterTx masterTxManager repository.MasterTxManager @@ -33,6 +30,11 @@ var ( dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) dummyActivity = "dummyActivity" dummyDescription = "dummyDescription" + + dummyTagName1 = "dummyTag1" + dummyTagName2 = "dummyTag2" + + dummyPlaceName = "dummyPlace" ) var dummyProfile = profileEntity.Entity{ @@ -61,7 +63,7 @@ var dummyUser = userEntity.Entity{ var dummyTag1 = tagEntity.Entity{ ID: 1, - Name: "tag1", + Name: dummyTagName1, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, @@ -69,7 +71,7 @@ var dummyTag1 = tagEntity.Entity{ var dummyTag2 = tagEntity.Entity{ ID: 2, - Name: "tag2", + Name: dummyTagName2, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, @@ -82,7 +84,7 @@ var dummyTagSlice = tagEntity.EntitySlice{ var dummyPlace = placeEntity.Entity{ ID: 1, - Name: "samplePlace", + Name: dummyPlaceName, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, @@ -116,7 +118,7 @@ func before() { func after() {} func TestInteractor_CreateNewWishCard(t *testing.T) { - t.Run("success to create data.", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -128,17 +130,17 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) - tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) - tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) - tags := []string{"tag1", "tag2"} - result, err := interactor.CreateNewWishCard(ctx, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, 1, tags) + tags := []string{dummyTagName1, dummyTagName2} + result, err := interactor.CreateNewWishCard(ctx, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, 1, tags) assert.NoError(t, err) assert.NotNil(t, result) @@ -147,15 +149,15 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { assert.Equal(t, (*time.Time)(nil), result.DeletedAt) assert.Equal(t, (*time.Time)(nil), result.DoneAt) // validate place - assert.Equal(t, "samplePlace", result.Place.Name) + assert.Equal(t, dummyPlaceName, result.Place.Name) // validate tag assert.Equal(t, 2, len(result.Tags)) - assert.Equal(t, "tag1", result.Tags[0].Name) + assert.Equal(t, dummyTagName1, result.Tags[0].Name) }) } func TestInteractor_UpdateWishCard(t *testing.T) { - t.Run("success to update data.", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -175,15 +177,15 @@ func TestInteractor_UpdateWishCard(t *testing.T) { } placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().Create(ctx, masterTx, "samplePlace").Return(&dummyPlace, nil) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByName(ctx, masterTx, "tag1").Return(&dummyTag1, nil) - tagService.EXPECT().GetByName(ctx, masterTx, "tag2").Return(nil, nil) - tagService.EXPECT().Create(ctx, masterTx, "tag2").Return(&dummyTag2, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) @@ -191,8 +193,8 @@ func TestInteractor_UpdateWishCard(t *testing.T) { interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) - tags := []string{"tag1", "tag2"} - result, err := interactor.UpdateWishCard(ctx, 1, 1, "sampleActivity", "sampleDescription", "samplePlace", &dummyDate, &dummyDate, 1, tags) + tags := []string{dummyTagName1, dummyTagName2} + result, err := interactor.UpdateWishCard(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, &dummyDate, 1, tags) assert.NoError(t, err) assert.NotNil(t, result) @@ -201,15 +203,15 @@ func TestInteractor_UpdateWishCard(t *testing.T) { assert.Equal(t, (*time.Time)(nil), result.DeletedAt) assert.NotEqual(t, (*time.Time)(nil), result.DoneAt) // validate place - assert.Equal(t, "samplePlace", result.Place.Name) + assert.Equal(t, dummyPlaceName, result.Place.Name) // validate tag assert.Equal(t, 2, len(result.Tags)) - assert.Equal(t, "tag1", result.Tags[0].Name) + assert.Equal(t, dummyTagName1, result.Tags[0].Name) }) } func TestInteractor_DeleteWishCard(t *testing.T) { - t.Run("success to delete data.", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -233,7 +235,7 @@ func TestInteractor_DeleteWishCard(t *testing.T) { } func TestInteractor_GetByID(t *testing.T) { - t.Run("success to get data by id.", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -255,15 +257,15 @@ func TestInteractor_GetByID(t *testing.T) { assert.NotNil(t, result) // validate place - assert.Equal(t, "samplePlace", result.Place.Name) + assert.Equal(t, dummyPlaceName, result.Place.Name) // validate tag assert.Equal(t, 2, len(result.Tags)) - assert.Equal(t, "tag1", result.Tags[0].Name) + assert.Equal(t, dummyTagName1, result.Tags[0].Name) }) } func TestInteractor_GetByCategoryID(t *testing.T) { - t.Run("success to get data by categoryID.", func(t *testing.T) { + t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -314,12 +316,12 @@ func TestInteractor_GetByCategoryID(t *testing.T) { assert.NotNil(t, wishCards) assert.Equal(t, 2, len(wishCards)) - assert.Equal(t, "samplePlace", wishCards[0].Place.Name) - assert.Equal(t, "samplePlace", wishCards[1].Place.Name) + assert.Equal(t, dummyPlaceName, wishCards[0].Place.Name) + assert.Equal(t, dummyPlaceName, wishCards[1].Place.Name) - assert.Equal(t, "tag1", wishCards[0].Tags[0].Name) + assert.Equal(t, dummyTagName1, wishCards[0].Tags[0].Name) assert.Equal(t, 2, len(wishCards[0].Tags)) - assert.Equal(t, "tag1", wishCards[1].Tags[0].Name) + assert.Equal(t, dummyTagName1, wishCards[1].Tags[0].Name) assert.Equal(t, 2, len(wishCards[1].Tags)) }) } From 81f987982e26bf3e0125051b6153003d252a91e3 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:07:50 +0900 Subject: [PATCH 083/156] update format --- pkg/api/usecase/wishcard/interactor.go | 6 ++---- pkg/api/usecase/wishcard/interactor_test.go | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 1591c8d..9a81fcf 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -42,8 +42,7 @@ func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Se func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { var newWishCard *wishCardEntity.Entity - var err error - err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう @@ -81,8 +80,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { var wishCard *wishCardEntity.Entity - var err error - err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index a6e0703..600af7d 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -58,7 +58,7 @@ var dummyUser = userEntity.Entity{ CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - Profile: nil, + Profile: &dummyProfile, } var dummyTag1 = tagEntity.Entity{ From 3f10c698fd84ffcece29ad106ca2d0fac2694a1d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:21:30 +0900 Subject: [PATCH 084/156] update ci --- .github/workflows/ci.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4150995..c1f051f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,17 @@ jobs: name: Test runs-on: ubuntu-latest needs: [ static-check ] + services: + mysql: + image: mysql:5.7 + ports: + - 3306:3306 + options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 + env: + MYSQL_USER: worker + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: wantum steps: # set up go @@ -58,6 +69,12 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@v2 + # set up db + - name: SetUp db + run: + mysql --protocol=tcp -u root -ppassword todone < ./db/mysql/init.d/ddl.sql + mysql --protocol=tcp -u root -ppassword todone < ./db/mysql/init.d/dml.sql + # Cache - name: Cache go module uses: actions/cache@v1 From 521e43a3f661ae5037f6e6424abf26ec6c78f77b Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:28:48 +0900 Subject: [PATCH 085/156] fix ci --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1f051f..0f0eecb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,8 +72,8 @@ jobs: # set up db - name: SetUp db run: - mysql --protocol=tcp -u root -ppassword todone < ./db/mysql/init.d/ddl.sql - mysql --protocol=tcp -u root -ppassword todone < ./db/mysql/init.d/dml.sql + mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql + mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # Cache - name: Cache go module From 1b41c44ae817381e168807b1ce3b344bccc2f55c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:37:48 +0900 Subject: [PATCH 086/156] fix ci --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f0eecb..e7f4b30 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,7 +71,7 @@ jobs: # set up db - name: SetUp db - run: + run: | mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 07c1ea4d233a79d6d2ef16f59415eddd6b5c2222 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 15:53:43 +0900 Subject: [PATCH 087/156] update unicode --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7f4b30..c9d075c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,6 +72,7 @@ jobs: # set up db - name: SetUp db run: | + mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 52fec53a1bf826ef3a7d99b3e5e6ffe6283b2f5f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:03:51 +0900 Subject: [PATCH 088/156] =?UTF-8?q?sudo=E3=81=99=E3=82=8B...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c9d075c..fa3df2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,7 +72,7 @@ jobs: # set up db - name: SetUp db run: | - mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 620498f1286861b6cd37f01be77e3fde5d8f542e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:28:34 +0900 Subject: [PATCH 089/156] =?UTF-8?q?mysql=E3=81=AE=E5=B7=AE=E3=81=97?= =?UTF-8?q?=E6=9B=BF=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa3df2f..23420b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,17 +46,6 @@ jobs: name: Test runs-on: ubuntu-latest needs: [ static-check ] - services: - mysql: - image: mysql:5.7 - ports: - - 3306:3306 - options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 - env: - MYSQL_USER: worker - MYSQL_PASSWORD: password - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: wantum steps: # set up go @@ -70,9 +59,21 @@ jobs: uses: actions/checkout@v2 # set up db + - name: Set up mysql + uses: mirromutth/mysql-action@v1.1 + with: + host port: 3306 + container port: 3306 + character set server: 'utf8mb4' + collation server: 'utf8mb4_unicode_ci' + mysql version: '5.7' + mysql database: 'wantum' + mysql root password: 'root' + mysql user: 'worker' + mysql password: 'password' + - name: SetUp db run: | - sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 70d72f0ddd312d34fc5a1e5037298b7f457823e2 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:30:03 +0900 Subject: [PATCH 090/156] =?UTF-8?q?mysql=E3=81=AE=E5=B7=AE=E3=81=97?= =?UTF-8?q?=E6=9B=BF=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 23420b0..1d6dcb9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,16 +61,16 @@ jobs: # set up db - name: Set up mysql uses: mirromutth/mysql-action@v1.1 - with: - host port: 3306 - container port: 3306 - character set server: 'utf8mb4' - collation server: 'utf8mb4_unicode_ci' - mysql version: '5.7' - mysql database: 'wantum' - mysql root password: 'root' - mysql user: 'worker' - mysql password: 'password' + with: + host port: 3306 + container port: 3306 + character set server: 'utf8mb4' + collation server: 'utf8mb4_unicode_ci' + mysql version: '5.7' + mysql database: 'wantum' + mysql root password: 'root' + mysql user: 'worker' + mysql password: 'password' - name: SetUp db run: | From 779a5151a6461f4b8bfd7e1ada2cc8b3c81770dd Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:36:55 +0900 Subject: [PATCH 091/156] =?UTF-8?q?mysql=E3=81=8C=E7=94=9F=E3=81=8D?= =?UTF-8?q?=E3=81=A6=E3=82=8B=E3=81=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d6dcb9..b6d7a22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,8 +74,9 @@ jobs: - name: SetUp db run: | - mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + sudo service mysql status + sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql + sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # Cache - name: Cache go module From c4f5a03dff2c5f3c5b2e35bb3b0c4bf9edc8feef Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:41:08 +0900 Subject: [PATCH 092/156] hello mysql --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b6d7a22..00e1509 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,7 +74,7 @@ jobs: - name: SetUp db run: | - sudo service mysql status + sudo service mysql start sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 8102745308aef3b3f0c349a177de0b2e5d82643a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:46:40 +0900 Subject: [PATCH 093/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00e1509..a0a1cc5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,6 +74,7 @@ jobs: - name: SetUp db run: | + sudo mysql.server start sudo service mysql start sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 9402e3c83c03048013f706d8374c034960b84f59 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 16:58:10 +0900 Subject: [PATCH 094/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0a1cc5..44a1d23 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,8 +74,8 @@ jobs: - name: SetUp db run: | - sudo mysql.server start - sudo service mysql start + sudo sudo /etc/init.d/mysql start + sudo service mysql status sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 6dd9e979ad618b75752bbbde95ecc73c10af8e5d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:02:51 +0900 Subject: [PATCH 095/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44a1d23..c25d431 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,8 +74,8 @@ jobs: - name: SetUp db run: | - sudo sudo /etc/init.d/mysql start - sudo service mysql status + sudo /etc/init.d/mysql start + systemctl status mysql.service sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 9c8ec9de22b3aafc2bd398802029512224b1409e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:08:06 +0900 Subject: [PATCH 096/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c25d431..f3f6f28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,15 @@ jobs: name: Test runs-on: ubuntu-latest needs: [ static-check ] + services: + mysql: + image: mysql:5.7 + ports: + - 3306:3306 + options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: wantum steps: # set up go @@ -74,8 +83,6 @@ jobs: - name: SetUp db run: | - sudo /etc/init.d/mysql start - systemctl status mysql.service sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 7a64a538c279c613371fbe320f5a61cafc562b5c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:12:34 +0900 Subject: [PATCH 097/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3f6f28..e55ec1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,8 +53,8 @@ jobs: - 3306:3306 options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 env: - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: wantum + # MYSQL_ROOT_PASSWORD: password + # MYSQL_DATABASE: wantum steps: # set up go @@ -77,7 +77,7 @@ jobs: collation server: 'utf8mb4_unicode_ci' mysql version: '5.7' mysql database: 'wantum' - mysql root password: 'root' + mysql root password: 'password' mysql user: 'worker' mysql password: 'password' From e45d5c74eec83e775799919db36f59dba7259ff1 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:14:19 +0900 Subject: [PATCH 098/156] =?UTF-8?q?=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E8=B5=B7=E3=81=8D=E3=81=AD=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e55ec1e..28dc53a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: ports: - 3306:3306 options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 - env: + # env: # MYSQL_ROOT_PASSWORD: password # MYSQL_DATABASE: wantum From 33d51eb098725c4c6cef0c07759d247d7576a27d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:23:56 +0900 Subject: [PATCH 099/156] =?UTF-8?q?=E7=8F=BE=E7=8A=B6=E3=81=AE=E7=A2=BA?= =?UTF-8?q?=E8=AA=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 28dc53a..7477ece 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,9 +52,9 @@ jobs: ports: - 3306:3306 options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 - # env: - # MYSQL_ROOT_PASSWORD: password - # MYSQL_DATABASE: wantum + env: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: wantum steps: # set up go @@ -68,21 +68,10 @@ jobs: uses: actions/checkout@v2 # set up db - - name: Set up mysql - uses: mirromutth/mysql-action@v1.1 - with: - host port: 3306 - container port: 3306 - character set server: 'utf8mb4' - collation server: 'utf8mb4_unicode_ci' - mysql version: '5.7' - mysql database: 'wantum' - mysql root password: 'password' - mysql user: 'worker' - mysql password: 'password' - - name: SetUp db run: | + sudo mysql --protocol=tcp -u root -ppassword -e "SHOW variables like '%server'" + sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From fc2924b418aeb2ce5aedb86c4732db18a7e9229a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:29:17 +0900 Subject: [PATCH 100/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7477ece..464f6cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,7 +70,6 @@ jobs: # set up db - name: SetUp db run: | - sudo mysql --protocol=tcp -u root -ppassword -e "SHOW variables like '%server'" sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 9e9e77a2a0a31a8c1888f318b34b69ff8d24a55a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:39:42 +0900 Subject: [PATCH 101/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 464f6cd..5a9eeaf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,6 +70,8 @@ jobs: # set up db - name: SetUp db run: | + find / -name my.cnf + which mysqld sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 43f42849c2b23ea4c2b12abdf1d04bf26d41f25e Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:47:37 +0900 Subject: [PATCH 102/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a9eeaf..ef208f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,8 +70,9 @@ jobs: # set up db - name: SetUp db run: | - find / -name my.cnf which mysqld + cat /etc/my.cnf + cat /etc/mysql/my.cnf sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From fef0813b863f1df11a03d2b9fe4c6fb3a6d80632 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:51:32 +0900 Subject: [PATCH 103/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef208f5..0195376 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,9 +71,9 @@ jobs: - name: SetUp db run: | which mysqld - cat /etc/my.cnf cat /etc/mysql/my.cnf - sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + sudo service mysql status + # sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 3cd6d64e91437a2f34ac02767ddd5ac7294b0c54 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 17:56:20 +0900 Subject: [PATCH 104/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0195376..09e6e84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,12 +70,12 @@ jobs: # set up db - name: SetUp db run: | - which mysqld - cat /etc/mysql/my.cnf - sudo service mysql status + # which mysqld + # cat /etc/mysql/my.cnf + # sudo service mysql status # sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # Cache - name: Cache go module From dde0f11e91e6e2499d69d555c7fdb01603f0a08c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:01:05 +0900 Subject: [PATCH 105/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09e6e84..98a5446 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,12 +70,9 @@ jobs: # set up db - name: SetUp db run: | - # which mysqld - # cat /etc/mysql/my.cnf - # sudo service mysql status - # sudo mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + sudo mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # Cache - name: Cache go module From 6d6e4802ce7abfe1736d8bf5a3051e75c0b837d7 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:07:11 +0900 Subject: [PATCH 106/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98a5446..e0a8cea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,7 +51,7 @@ jobs: image: mysql:5.7 ports: - 3306:3306 - options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 + options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 --character-set-server utf8mb4 --collation-server utf8mb4_unicode_ci env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wantum @@ -70,7 +70,7 @@ jobs: # set up db - name: SetUp db run: | - sudo mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + # sudo mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql From 8520c2718a3fd1e388585d88cabaf7996fd769ef Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:21:35 +0900 Subject: [PATCH 107/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 27 +++++++++++++++------------ docker-compose.ci.yml | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 docker-compose.ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0a8cea..f597200 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,15 +46,15 @@ jobs: name: Test runs-on: ubuntu-latest needs: [ static-check ] - services: - mysql: - image: mysql:5.7 - ports: - - 3306:3306 - options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 --character-set-server utf8mb4 --collation-server utf8mb4_unicode_ci - env: - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: wantum + # services: + # mysql: + # image: mysql:5.7 + # ports: + # - 3306:3306 + # options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 + # env: + # MYSQL_ROOT_PASSWORD: password + # MYSQL_DATABASE: wantum steps: # set up go @@ -70,9 +70,12 @@ jobs: # set up db - name: SetUp db run: | - # sudo mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci - sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + docker-compose -f docker-compose.ci.yml up -d + sleep 15 + docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql + docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql + # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # Cache - name: Cache go module diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml new file mode 100644 index 0000000..a6ee74d --- /dev/null +++ b/docker-compose.ci.yml @@ -0,0 +1,15 @@ +version: '3.5' +services: + db: + image: mysql:5.7 + container_name: wantum_db + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: wantum + MYSQL_USER: worker + MYSQL_PASSWORD: password + TZ: 'Asia/Tokyo' + command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + ports: + - 3306:3306 + restart: always \ No newline at end of file From 155357e317761a3ca221023ffc93c48614c8de0f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:26:51 +0900 Subject: [PATCH 108/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 7 ++++--- docker-compose.ci.yml | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f597200..0d4d94e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,9 +71,10 @@ jobs: - name: SetUp db run: | docker-compose -f docker-compose.ci.yml up -d - sleep 15 - docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + sleep 30 + docker-compose exec db mysql -u root -proot -e "show databases" + # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql + # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index a6ee74d..d69eb7f 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -10,6 +10,8 @@ services: MYSQL_PASSWORD: password TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + volumes: + - ./db/mysql/init.d:/docker-entrypoint-initdb.d ports: - 3306:3306 restart: always \ No newline at end of file From 7a53d4abcde727e414354f4f5a632896f46957a9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:32:04 +0900 Subject: [PATCH 109/156] =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E3=82=8F=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=8B=E3=82=89=E3=81=AA=E3=82=93=E3=81=A8?= =?UTF-8?q?=E3=81=8B=E3=81=97=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d4d94e..c358169 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,8 +71,9 @@ jobs: - name: SetUp db run: | docker-compose -f docker-compose.ci.yml up -d - sleep 30 - docker-compose exec db mysql -u root -proot -e "show databases" + sleep 15 + docker-compose ps + # docker-compose exec db mysql -u root -proot -e "show databases" # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql From 4a104e870889a5ea3c5aba07ae9b63447a82628a Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:38:16 +0900 Subject: [PATCH 110/156] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c358169..0fcc84d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,11 +73,11 @@ jobs: docker-compose -f docker-compose.ci.yml up -d sleep 15 docker-compose ps - # docker-compose exec db mysql -u root -proot -e "show databases" - # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - # docker-compose exec db mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql - # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/ddl.sql - # sudo mysql --protocol=tcp -u root -ppassword wantum < ./db/mysql/init.d/dml.sql + export MYSQL_USER=root + export MYSQL_PASSWORD=root + export MYSQL_HOST=localhost + export MYSQL_PORT=3306 + export MYSQL_DATABASE=wantum # Cache - name: Cache go module From 4c2430387aa617e51560351a8fae3e1363795f2f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:44:03 +0900 Subject: [PATCH 111/156] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 16 +++++++++------- docker-compose.ci.yml | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0fcc84d..6ebeadc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,12 +72,6 @@ jobs: run: | docker-compose -f docker-compose.ci.yml up -d sleep 15 - docker-compose ps - export MYSQL_USER=root - export MYSQL_PASSWORD=root - export MYSQL_HOST=localhost - export MYSQL_PORT=3306 - export MYSQL_DATABASE=wantum # Cache - name: Cache go module @@ -97,7 +91,15 @@ jobs: # Run test - name: Test - run: go test -v ./... + run: | + # export MYSQL_USER=root + # export MYSQL_PASSWORD=root + # export MYSQL_HOST=localhost + # export MYSQL_PORT=3306 + # export MYSQL_DATABASE=wantum + export MYSQL_AA=hello + echo $MYSQL_AA + go test -v ./... # slackの通知 slack-notification: diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index d69eb7f..9251724 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -4,7 +4,7 @@ services: image: mysql:5.7 container_name: wantum_db environment: - MYSQL_ROOT_PASSWORD: root + MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: wantum MYSQL_USER: worker MYSQL_PASSWORD: password From 47bf77170512db48e50c4416685b215446f07713 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 18:49:19 +0900 Subject: [PATCH 112/156] =?UTF-8?q?=E7=92=B0=E5=A2=83=E5=A4=89=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 12 +++++------- docker-compose.ci.yml | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ebeadc..c20942e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,13 +92,11 @@ jobs: # Run test - name: Test run: | - # export MYSQL_USER=root - # export MYSQL_PASSWORD=root - # export MYSQL_HOST=localhost - # export MYSQL_PORT=3306 - # export MYSQL_DATABASE=wantum - export MYSQL_AA=hello - echo $MYSQL_AA + export MYSQL_USER=root + export MYSQL_PASSWORD=root + export MYSQL_HOST=localhost + export MYSQL_PORT=3306 + export MYSQL_DATABASE=wantum go test -v ./... # slackの通知 diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 9251724..d69eb7f 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -4,7 +4,7 @@ services: image: mysql:5.7 container_name: wantum_db environment: - MYSQL_ROOT_PASSWORD: password + MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wantum MYSQL_USER: worker MYSQL_PASSWORD: password From b649be44ffe3ee5cd95268feaffb62aa67ff21ff Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Thu, 17 Sep 2020 20:21:09 +0900 Subject: [PATCH 113/156] complete ci --- .github/workflows/ci.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c20942e..f60f335 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,15 +46,6 @@ jobs: name: Test runs-on: ubuntu-latest needs: [ static-check ] - # services: - # mysql: - # image: mysql:5.7 - # ports: - # - 3306:3306 - # options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10 - # env: - # MYSQL_ROOT_PASSWORD: password - # MYSQL_DATABASE: wantum steps: # set up go From 0ee11f342a7f00a9313ecf1d798f0ae4c186b936 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Fri, 18 Sep 2020 16:54:52 +0900 Subject: [PATCH 114/156] =?UTF-8?q?ci=E7=94=A8DB=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=83=86=E3=83=8A=E3=81=AE=E5=90=8D=E5=89=8D=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index d69eb7f..f4bdf26 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -2,7 +2,7 @@ version: '3.5' services: db: image: mysql:5.7 - container_name: wantum_db + container_name: wantum_db_test environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wantum From 7e465e48f5c731853b5c3701fc0b42df4ac0b4c2 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Fri, 18 Sep 2020 17:28:10 +0900 Subject: [PATCH 115/156] =?UTF-8?q?interactor=E3=81=AB=E3=81=A6cap?= =?UTF-8?q?=E3=81=AE=E7=A2=BA=E4=BF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 9a81fcf..0537962 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -48,7 +48,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } - var tagIDs []int + tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) @@ -86,7 +86,7 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } - var tagIDs []int + tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) From 77c29be8f03e4084df7d148c60d3ae43c0cfefb9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Fri, 18 Sep 2020 17:30:31 +0900 Subject: [PATCH 116/156] fix: define new wish card interactor --- pkg/api/usecase/wishcard/interactor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 0537962..2eac75f 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -14,7 +14,7 @@ import ( ) type Interactor interface { - CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) + CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) DeleteWishCardByID(ctx context.Context, wishCardID int) error GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) @@ -39,7 +39,7 @@ func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Se } } -func (i *interactor) CreateNewWishCard(ctx context.Context, userID int, activity, description, place string, date *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { +func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) (*wishCardEntity.Entity, error) { var newWishCard *wishCardEntity.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { From de4dcec2d9e7a5e36e125ab33c5bec016cae164f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Fri, 18 Sep 2020 20:39:23 +0900 Subject: [PATCH 117/156] =?UTF-8?q?interface=E5=AE=9A=E7=BE=A9=E3=81=A7?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=92=E6=8E=92=E9=99=A4repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/place/repository.go | 4 ---- pkg/domain/repository/tag/repository.go | 2 -- pkg/domain/repository/wishcard/repository.go | 3 --- 3 files changed, 9 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 5eeae76..30e855c 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -6,16 +6,12 @@ import ( "wantum/pkg/domain/repository" ) -// implement: wantum/pkg/infrastructure/mysql/place:placeRepositoryImpletent type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) } diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 06fc03a..2399de6 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -8,11 +8,9 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tag.EntitySlice, error) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 8f03a5d..4728f96 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -8,13 +8,10 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error - SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) From cdb233c4f706267ca3955e86674787b6b07a9fac Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Fri, 18 Sep 2020 20:45:07 +0900 Subject: [PATCH 118/156] =?UTF-8?q?repo=E3=81=AEcheck=20is=20nil=E3=82=AB?= =?UTF-8?q?=E3=83=83=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/place/repository.go | 31 ------------------- pkg/infrastructure/mysql/tag/repository.go | 24 -------------- .../mysql/wishcard/repository.go | 27 ---------------- 3 files changed, 82 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index e47b5b3..0c958ff 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -25,11 +25,6 @@ func New(txManager repository.MasterTxManager) place.Repository { } func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) (int, error) { - // NOTE: nilで降りてきた用対策。いらないかも - if err := checkIsNil(place); err != nil { - return 0, err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -57,11 +52,6 @@ func (repo *placeRepositoryImplement) Insert(ctx context.Context, masterTx repos } func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { - // NOTE: nilで降りてきた用対策。いらないかも - if err := checkIsNil(place); err != nil { - return err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -83,10 +73,6 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos } func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { - // NOTE: nilで降りてきた用対策。いらないかも - if err := checkIsNil(place); err != nil { - return err - } if place.DeletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), @@ -118,10 +104,6 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx } func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { - if err := checkIsNil(place); err != nil { - return err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -219,16 +201,3 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re } return result, nil } - -func checkIsNil(place *placeEntity.Entity) error { - if place == nil { - return werrors.Newf( - errors.New("required data is nil"), - codes.Unknown, - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) - } - return nil -} diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index 1ec1771..d0a3388 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -27,9 +27,6 @@ func New(txManager repository.MasterTxManager) tag.Repository { } func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) (int, error) { - if err := checkIsNil(tag); err != nil { - return 0, err - } tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -55,10 +52,6 @@ func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx reposit } func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { - // NOTE: nilで降りてきた用対策。いらないかも - if err := checkIsNil(tag); err != nil { - return err - } if tag.DeletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), @@ -90,10 +83,6 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r } func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { - if err := checkIsNil(tag); err != nil { - return err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -302,16 +291,3 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master } return result, nil } - -func checkIsNil(tag *tagEntity.Entity) error { - if tag == nil { - return werrors.Newf( - errors.New("required data(tag) is nil"), - codes.Unknown, - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) - } - return nil -} diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index cfb676e..cf5d651 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -29,10 +29,6 @@ func New(txManager repository.MasterTxManager) wishcard.Repository { } func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) (int, error) { - if err := checkIsNil(wishCard); err != nil { - return 0, err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -64,10 +60,6 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re } func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { - if err := checkIsNil(wishCard); err != nil { - return err - } - tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -103,9 +95,6 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re } func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { - if err := checkIsNil(wishCard); err != nil { - return err - } if wishCard.DeletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), @@ -136,9 +125,6 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste } func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { - if err := checkIsNil(wishCard); err != nil { - return err - } tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -307,16 +293,3 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, } return result, nil } - -func checkIsNil(wishCard *wishCardEntity.Entity) error { - if wishCard == nil { - return werrors.Newf( - errors.New("required data(wishCard) is nil"), - codes.Unknown, - werrors.ServerError.ErrorCode, - werrors.ServerError.ErrorMessageJP, - werrors.ServerError.ErrorMessageEN, - ) - } - return nil -} From d5f0da6f19e20605fa77ed6d9d7aa065b991cc87 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:25:42 +0900 Subject: [PATCH 119/156] =?UTF-8?q?=E7=92=B0=E5=A2=83up=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E6=8C=87=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c65c3de..51abea1 100644 --- a/Makefile +++ b/Makefile @@ -94,7 +94,7 @@ build: ## APIをビルドして立ち上げるコマンド ./binary/wantum dev-up: ## 全コンテナの起動 - docker-compose up -d + docker-compose -f docker-compose.yml up -d dev-stop: ## 全コンテナを止める docker-compose stop From 02d6131be5e6a9532f724652b63c4b3e651b5c00 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:26:52 +0900 Subject: [PATCH 120/156] =?UTF-8?q?nil=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=AB=E3=83=83=E3=83=88=E3=81=AB=E4=BC=B4=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mysql/place/repository_test.go | 47 +++---------- .../mysql/tag/repository_test.go | 16 +---- .../mysql/wishcard/repository_test.go | 69 +++---------------- .../mysql/wishcardtag/repository_test.go | 12 ++-- 4 files changed, 28 insertions(+), 116 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 56d50a0..7842e38 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -19,12 +19,15 @@ import ( _ "github.com/go-sql-driver/mysql" ) -var db *sql.DB -var txManager repository.MasterTxManager -var repo place.Repository -var dummyDate time.Time +var ( + db *sql.DB + txManager repository.MasterTxManager + repo place.Repository + dummyDate time.Time + dummyPlace = "samplePlace" +) -var dummyPlace = "samplePlace" +// TODO: それぞれの関数で使っているdummyDataの切り出し func TestMain(m *testing.M) { before() @@ -69,20 +72,6 @@ func TestInsert(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result int - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, nil) - return err - }) - - assert.Error(t, err) - assert.Equal(t, 0, result) - }) } func TestUpdate(t *testing.T) { @@ -111,26 +100,6 @@ func TestUpdate(t *testing.T) { assert.NotNil(t, result) assert.Equal(t, dummyPlace, result.Name) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *placeEntity.Entity - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, nil) - if err != nil { - return err - } - - result, err = repo.SelectByID(ctx, masterTx, 1) - return err - }) - - assert.Error(t, err) - assert.Nil(t, result) - - }) } func TestUpDeleteFlag(t *testing.T) { diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index 2b97247..253729b 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -26,6 +26,8 @@ var ( dummyDate time.Time ) +// TODO: それぞれの関数で使っているdummyDataの切り出し + func TestMain(m *testing.M) { before() code := m.Run() @@ -70,20 +72,6 @@ func TestInsert(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result int - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, nil) - return err - }) - - assert.Error(t, err) - assert.Equal(t, 0, result) - }) } func TestUpDeleteFlag(t *testing.T) { diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index b54a4b1..07ab76d 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -19,13 +19,17 @@ import ( "github.com/stretchr/testify/assert" ) -var db *sql.DB -var txManager repository.MasterTxManager -var repo wcrepo.Repository -var dummyDate time.Time +var ( + db *sql.DB + txManager repository.MasterTxManager + repo wcrepo.Repository + dummyDate time.Time + + dummyActivity = "sampleActivity" + dummyDescription = "sampleDescription" +) -var dummyActivity = "sampleActivity" -var dummyDescription = "sampleDescription" +// TODO: それぞれの関数で使っているdummyDataの切り出し func TestMain(m *testing.M) { before() @@ -74,19 +78,6 @@ func TestInsert(t *testing.T) { assert.NoError(t, err) assert.NotEqual(t, 0, result) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result int - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - result, err = repo.Insert(ctx, masterTx, nil, 1) - return err - }) - assert.Error(t, err) - assert.Equal(t, 0, result) - }) } func TestUpdate(t *testing.T) { @@ -154,20 +145,6 @@ func TestUpdate(t *testing.T) { assert.NotNil(t, result) assert.Equal(t, dummyActivity, result.Activity) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *wishCardEntity.Entity - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, nil, 1) - return err - }) - assert.Error(t, err) - assert.Nil(t, result) - }) - } func TestUpDeleteFlag(t *testing.T) { @@ -229,19 +206,6 @@ func TestUpDeleteFlag(t *testing.T) { }) assert.Error(t, err) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *wishCardEntity.Entity - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.UpDeleteFlag(ctx, masterTx, nil) - return err - }) - assert.Error(t, err) - assert.Nil(t, result) - }) } func TestDownDeleteFlag(t *testing.T) { @@ -277,19 +241,6 @@ func TestDownDeleteFlag(t *testing.T) { assert.NoError(t, err) assert.Nil(t, result.DeletedAt) }) - - t.Run("failure_データがnil", func(t *testing.T) { - var err error - ctx := context.Background() - - var result *wishCardEntity.Entity - err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.UpDeleteFlag(ctx, masterTx, nil) - return err - }) - assert.Error(t, err) - assert.Nil(t, result) - }) } func TestDelete(t *testing.T) { diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index a8d3ca4..8d2838c 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -16,10 +16,14 @@ import ( "github.com/stretchr/testify/assert" ) -var db *sql.DB -var txManager repository.MasterTxManager -var repo wishcardtag.Repository -var dummyDate time.Time +var ( + db *sql.DB + txManager repository.MasterTxManager + repo wishcardtag.Repository + dummyDate time.Time +) + +// TODO: それぞれの関数で使っているdummyDataの切り出し func TestMain(m *testing.M) { before() From 73d06f49c67dc569ea33b0eb6e604405f24e8cee Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:30:34 +0900 Subject: [PATCH 121/156] record -> wishCard --- .../mysql/wishcard/repository.go | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index cf5d651..223fd3e 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -219,19 +219,19 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master } var result wishCardEntity.EntitySlice for rows.Next() { - var record wishCardEntity.Entity + var wishCard wishCardEntity.Entity var place placeEntity.Entity var user userEntity.Entity err = rows.Scan( - &record.ID, + &wishCard.ID, &user.ID, - &record.Activity, - &record.Description, - &record.Date, - &record.DoneAt, - &record.CreatedAt, - &record.UpdatedAt, - &record.DeletedAt, + &wishCard.Activity, + &wishCard.Description, + &wishCard.Date, + &wishCard.DoneAt, + &wishCard.CreatedAt, + &wishCard.UpdatedAt, + &wishCard.DeletedAt, &place.ID, ) if err != nil { @@ -241,9 +241,9 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - record.Author = &user - record.Place = &place - result = append(result, &record) + wishCard.Author = &user + wishCard.Place = &place + result = append(result, &wishCard) } return result, nil } @@ -265,19 +265,19 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, } var result wishCardEntity.EntitySlice for rows.Next() { - var record wishCardEntity.Entity + var wishCard wishCardEntity.Entity var place placeEntity.Entity var user userEntity.Entity err = rows.Scan( - &record.ID, + &wishCard.ID, &user.ID, - &record.Activity, - &record.Description, - &record.Date, - &record.DoneAt, - &record.CreatedAt, - &record.UpdatedAt, - &record.DeletedAt, + &wishCard.Activity, + &wishCard.Description, + &wishCard.Date, + &wishCard.DoneAt, + &wishCard.CreatedAt, + &wishCard.UpdatedAt, + &wishCard.DeletedAt, &place.ID, ) if err != nil { @@ -287,9 +287,9 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - record.Author = &user - record.Place = &place - result = append(result, &record) + wishCard.Author = &user + wishCard.Place = &place + result = append(result, &wishCard) } return result, nil } From 6c3e9634566d642525e1fa2d80a29268522119e3 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:37:18 +0900 Subject: [PATCH 122/156] =?UTF-8?q?=E6=97=A5=E4=BB=98=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E6=99=82=E3=81=AE=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/service.go | 20 ++++++++++---------- pkg/domain/service/tag/service.go | 16 ++++++++-------- pkg/domain/service/wishcard/service.go | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index d236f72..99a1e6a 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -36,11 +36,11 @@ func New(repo place.Repository) Service { } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) { - createdAt := time.Now() + now := time.Now() place := &placeEntity.Entity{ Name: name, - CreatedAt: &createdAt, - UpdatedAt: &createdAt, + CreatedAt: &now, + UpdatedAt: &now, } result, err := s.placeRepository.Insert(ctx, masterTx, place) if err != nil { @@ -58,9 +58,9 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac return nil, werrors.Stack(err) } - updatedAt := time.Now() + now := time.Now() place.Name = name - place.UpdatedAt = &updatedAt + place.UpdatedAt = &now err = s.placeRepository.Update(ctx, masterTx, place) if err != nil { return nil, werrors.Stack(err) @@ -73,9 +73,9 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - place.UpdatedAt = &updatedAt - place.DeletedAt = &updatedAt + now := time.Now() + place.UpdatedAt = &now + place.DeletedAt = &now err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place) if err != nil { return nil, werrors.Stack(err) @@ -88,8 +88,8 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - place.UpdatedAt = &updatedAt + now := time.Now() + place.UpdatedAt = &now place.DeletedAt = nil err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place) if err != nil { diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index b5dabe5..b28c774 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -37,11 +37,11 @@ func New(repo tag.Repository) Service { } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) { - createdAt := time.Now() + now := time.Now() tag := &tagEntity.Entity{ Name: name, - CreatedAt: &createdAt, - UpdatedAt: &createdAt, + CreatedAt: &now, + UpdatedAt: &now, } result, err := s.tagRepository.Insert(ctx, masterTx, tag) if err != nil { @@ -56,9 +56,9 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - tag.UpdatedAt = &updatedAt - tag.DeletedAt = &updatedAt + now := time.Now() + tag.UpdatedAt = &now + tag.DeletedAt = &now err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag) if err != nil { return nil, werrors.Stack(err) @@ -71,8 +71,8 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - tag.UpdatedAt = &updatedAt + now := time.Now() + tag.UpdatedAt = &now tag.DeletedAt = nil err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag) if err != nil { diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 92c213f..7841bc9 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -73,14 +73,14 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti return nil, werrors.Stack(err) } - createdAt := time.Now() + now := time.Now() wishCard := &wishCardEntity.Entity{ Author: author, Activity: activity, Description: description, Date: date, - CreatedAt: &createdAt, - UpdatedAt: &createdAt, + CreatedAt: &now, + UpdatedAt: &now, Place: place, Tags: tags, } @@ -118,14 +118,14 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish return nil, werrors.Stack(err) } - updatedAt := time.Now() + now := time.Now() wishCard.Author = author // NOTE: 今後、authorの更新があるかも wishCard.Activity = activity wishCard.Description = description wishCard.Date = date wishCard.DoneAt = doneAt wishCard.Place = place - wishCard.UpdatedAt = &updatedAt + wishCard.UpdatedAt = &now wishCard.Tags = tags err = s.wishCardRepository.Update(ctx, masterTx, wishCard, categoryID) @@ -157,9 +157,9 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - wishCard.UpdatedAt = &updatedAt - wishCard.DeletedAt = &updatedAt + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.DeletedAt = &now wishCard.Author = author wishCard.Place = place wishCard.Tags = tags @@ -192,8 +192,8 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - updatedAt := time.Now() - wishCard.UpdatedAt = &updatedAt + now := time.Now() + wishCard.UpdatedAt = &now wishCard.DeletedAt = nil wishCard.Author = author wishCard.Place = place From dd3e3f3d0da6dabb0194991bba81db16370838e0 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:41:24 +0900 Subject: [PATCH 123/156] =?UTF-8?q?var=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor_test.go | 142 ++++++++++---------- 1 file changed, 69 insertions(+), 73 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 600af7d..ff2ab81 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -24,85 +24,81 @@ import ( var ( masterTx repository.MasterTx masterTxManager repository.MasterTxManager -) -var ( dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) dummyActivity = "dummyActivity" dummyDescription = "dummyDescription" - - dummyTagName1 = "dummyTag1" - dummyTagName2 = "dummyTag2" - - dummyPlaceName = "dummyPlace" + dummyTagName1 = "dummyTag1" + dummyTagName2 = "dummyTag2" + dummyPlaceName = "dummyPlace" + + dummyProfile = profileEntity.Entity{ + UserID: 1, + Name: "dummyName", + Thumbnail: "dummyThumbnail", + Bio: "dummyBio", + Gender: 1, + Phone: "12345678901", + Birth: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + dummyUser = userEntity.Entity{ + ID: 1, + AuthID: "dummyID", + UserName: "dummyUserName", + Mail: "hogehoge@example.com", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + Profile: &dummyProfile, + } + + dummyTag1 = tagEntity.Entity{ + ID: 1, + Name: dummyTagName1, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } + + dummyTag2 = tagEntity.Entity{ + ID: 2, + Name: dummyTagName2, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + } + + dummyTagSlice = tagEntity.EntitySlice{ + &dummyTag1, + &dummyTag2, + } + + dummyPlace = placeEntity.Entity{ + ID: 1, + Name: dummyPlaceName, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + } + + dummyWishCard = wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: nil, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &dummyPlace, + Tags: dummyTagSlice, + } ) -var dummyProfile = profileEntity.Entity{ - UserID: 1, - Name: "dummyName", - Thumbnail: "dummyThumbnail", - Bio: "dummyBio", - Gender: 1, - Phone: "12345678901", - Birth: &dummyDate, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, -} - -var dummyUser = userEntity.Entity{ - ID: 1, - AuthID: "dummyID", - UserName: "dummyUserName", - Mail: "hogehoge@example.com", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - Profile: &dummyProfile, -} - -var dummyTag1 = tagEntity.Entity{ - ID: 1, - Name: dummyTagName1, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, -} - -var dummyTag2 = tagEntity.Entity{ - ID: 2, - Name: dummyTagName2, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, -} - -var dummyTagSlice = tagEntity.EntitySlice{ - &dummyTag1, - &dummyTag2, -} - -var dummyPlace = placeEntity.Entity{ - ID: 1, - Name: dummyPlaceName, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: nil, -} - -var dummyWishCard = wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, - Activity: dummyActivity, - Description: dummyDescription, - Date: &dummyDate, - DoneAt: nil, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - Place: &dummyPlace, - Tags: dummyTagSlice, -} - func TestMain(m *testing.M) { before() code := m.Run() From d3273c5d05af65f14bf71160a6713ac38e466d68 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 11:44:32 +0900 Subject: [PATCH 124/156] =?UTF-8?q?var=E3=81=AB=E3=81=BE=E3=81=A8=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/tag/service_test.go | 36 ++++----- pkg/domain/service/wishcard/service_test.go | 84 ++++++++++----------- 2 files changed, 59 insertions(+), 61 deletions(-) diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 4a7023b..cf75ce5 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -16,29 +16,29 @@ import ( var ( masterTx repository.MasterTx dummyDate time.Time -) -var dummyTagSlice = tagEntity.EntitySlice{ - &tagEntity.Entity{ + dummyTag = &tagEntity.Entity{ ID: 1, - Name: "sampleTag1", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - }, - &tagEntity.Entity{ - ID: 2, - Name: "sampleTag2", + Name: "sampleTag", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, - }, -} + } -var dummyTag = &tagEntity.Entity{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, -} + dummyTagSlice = tagEntity.EntitySlice{ + &tagEntity.Entity{ + ID: 1, + Name: "sampleTag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + &tagEntity.Entity{ + ID: 2, + Name: "sampleTag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + }, + } +) func TestMain(m *testing.M) { before() diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index 125d38a..bd776bb 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -23,62 +23,60 @@ import ( var ( masterTx repository.MasterTx -) -var ( dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) dummyActivity = "sampleActivity" dummyDescription = "sampleDescription" -) -var dummyProfile = profileEntity.Entity{ - UserID: 1, - Name: "dummyName", - Thumbnail: "dummyThumbnail", - Bio: "dummyBio", - Gender: 1, - Phone: "12345678901", - Birth: &dummyDate, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, -} - -var dummyUser = userEntity.Entity{ - ID: 1, - AuthID: "dummyID", - UserName: "dummyUserName", - Mail: "hogehoge@example.com", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - Profile: nil, -} - -var dummyPlace = placeEntity.Entity{ - ID: 1, - Name: "dummyPlace", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, -} + dummyProfile = profileEntity.Entity{ + UserID: 1, + Name: "dummyName", + Thumbnail: "dummyThumbnail", + Bio: "dummyBio", + Gender: 1, + Phone: "12345678901", + Birth: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + } -var dummyTags = tagEntity.EntitySlice{ - &tagEntity.Entity{ + dummyUser = userEntity.Entity{ ID: 1, - Name: "tag1", + AuthID: "dummyID", + UserName: "dummyUserName", + Mail: "hogehoge@example.com", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - }, - &tagEntity.Entity{ - ID: 2, - Name: "tag2", + Profile: nil, + } + + dummyPlace = placeEntity.Entity{ + ID: 1, + Name: "dummyPlace", CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - }, -} + } + + dummyTags = tagEntity.EntitySlice{ + &tagEntity.Entity{ + ID: 1, + Name: "tag1", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, + &tagEntity.Entity{ + ID: 2, + Name: "tag2", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: &dummyDate, + }, + } +) func TestMain(m *testing.M) { before() From bb13b68d20c8027f392e43d660b5df600111bbf4 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 12:57:23 +0900 Subject: [PATCH 125/156] =?UTF-8?q?wishcard-tag=E3=81=AE=E3=83=AA=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E3=82=B5=E3=83=BC?= =?UTF-8?q?=E3=83=93=E3=82=B9=E3=81=A7=E3=81=AF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 22 +++++------- pkg/domain/service/wishcard/service.go | 30 ++++++++++++---- pkg/domain/service/wishcard/service_test.go | 40 ++++++++++++++++----- 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 2eac75f..5480cab 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -39,7 +39,7 @@ func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Se } } -func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) (*wishCardEntity.Entity, error) { +func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) { var newWishCard *wishCardEntity.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -66,10 +66,10 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i return werrors.Stack(err) } - err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, newWishCard.ID, tagIDs) - if err != nil { - return werrors.Stack(err) - } + // err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, newWishCard.ID, tagIDs) + // if err != nil { + // return werrors.Stack(err) + // } return nil }) if err != nil { @@ -107,10 +107,10 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, if err != nil { return werrors.Stack(err) } - err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, wishCard.ID, tagIDs) - if err != nil { - return werrors.Stack(err) - } + // err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, wishCard.ID, tagIDs) + // if err != nil { + // return werrors.Stack(err) + // } return nil }) if err != nil { @@ -127,10 +127,6 @@ func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) err return werrors.Stack(err) } - err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCardID) - if err != nil { - return werrors.Stack(err) - } return nil }) if err != nil { diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 7841bc9..e6fafb8 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -13,6 +13,7 @@ import ( "wantum/pkg/domain/repository/tag" "wantum/pkg/domain/repository/user" "wantum/pkg/domain/repository/wishcard" + "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/werrors" "google.golang.org/grpc/codes" @@ -37,15 +38,17 @@ type service struct { wishCardRepository wishcard.Repository placeRepository place.Repository tagsRepository tag.Repository + wishCardTagRepository wishcardtag.Repository } -func New(wcRepo wishcard.Repository, userRepo user.Repository, upRepo profile.Repository, placeRepo place.Repository, tagRepo tag.Repository) Service { +func New(wcRepo wishcard.Repository, userRepo user.Repository, upRepo profile.Repository, placeRepo place.Repository, tagRepo tag.Repository, wctRepo wishcardtag.Repository) Service { return &service{ wishCardRepository: wcRepo, userRepository: userRepo, userProfileRepository: upRepo, placeRepository: placeRepo, tagsRepository: tagRepo, + wishCardTagRepository: wctRepo, } } @@ -84,11 +87,16 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti Place: place, Tags: tags, } - result, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard, categoryID) + newID, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard, categoryID) if err != nil { - return nil, err + return nil, werrors.Stack(err) + } + wishCard.ID = newID + + // create relation + if err = s.wishCardTagRepository.BulkInsert(ctx, masterTx, newID, tagIDs); err != nil { + return nil, werrors.Stack(err) } - wishCard.ID = result return wishCard, nil } @@ -132,6 +140,14 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish if err != nil { return nil, werrors.Stack(err) } + + // regist tag + if err = s.wishCardTagRepository.DeleteByWishCardID(ctx, masterTx, wishCardID); err != nil { + return nil, werrors.Stack(err) + } + if err = s.wishCardTagRepository.BulkInsert(ctx, masterTx, wishCardID, tagIDs); err != nil { + return nil, werrors.Stack(err) + } return wishCard, nil } @@ -219,8 +235,10 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish "could not delete this place", ) } - err = s.wishCardRepository.Delete(ctx, masterTx, wishCardID) - if err != nil { + if err = s.wishCardRepository.Delete(ctx, masterTx, wishCardID); err != nil { + return werrors.Stack(err) + } + if err = s.wishCardTagRepository.DeleteByWishCardID(ctx, masterTx, wishCardID); err != nil { return werrors.Stack(err) } return nil diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index bd776bb..2002204 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -16,6 +16,7 @@ import ( "wantum/pkg/domain/repository/tag/mock_tag" "wantum/pkg/domain/repository/user/mock_user" "wantum/pkg/domain/repository/wishcard/mock_wish_card" + "wantum/pkg/domain/repository/wishcardtag/mock_wish_card_tag" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -108,7 +109,10 @@ func TestService_Create(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) @@ -156,7 +160,11 @@ func TestService_Update(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wctRepo.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) @@ -205,7 +213,9 @@ func TestService_UpDeleteFlag(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.UpDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) @@ -254,7 +264,9 @@ func TestService_DownDeleteFlag(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.DownDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) @@ -297,7 +309,10 @@ func TestService_Delete(t *testing.T) { placeRepo := mock_place.NewMockRepository(ctrl) tagRepo := mock_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + wctRepo.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) err := service.Delete(ctx, masterTx, 1) assert.NoError(t, err) @@ -331,8 +346,9 @@ func TestService_Delete(t *testing.T) { profileRepo := mock_profile.NewMockRepository(ctrl) placeRepo := mock_place.NewMockRepository(ctrl) tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) err := service.Delete(ctx, masterTx, 1) assert.Error(t, err) @@ -375,7 +391,9 @@ func TestService_GetByID(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.GetByID(ctx, masterTx, 1) assert.NoError(t, err) @@ -438,7 +456,9 @@ func TestService_GetByIDs(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) assert.NoError(t, err) @@ -502,7 +522,9 @@ func TestService_GetByCategoryID(t *testing.T) { tagRepo := mock_tag.NewMockRepository(ctrl) tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) result, err := service.GetByCategoryID(ctx, masterTx, 1) assert.NoError(t, err) From 6a8924a8b65b777ad5942951723852cf7b43381d Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 13:04:52 +0900 Subject: [PATCH 126/156] =?UTF-8?q?wishcardtag.service=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E4=BE=9D=E5=AD=98=E3=82=92=E9=99=A4=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 34 ++++++--------------- pkg/api/usecase/wishcard/interactor_test.go | 27 ++++------------ 2 files changed, 15 insertions(+), 46 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 5480cab..509d950 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -9,7 +9,6 @@ import ( "wantum/pkg/domain/service/place" "wantum/pkg/domain/service/tag" "wantum/pkg/domain/service/wishcard" - "wantum/pkg/domain/service/wishcardtag" "wantum/pkg/werrors" ) @@ -22,20 +21,18 @@ type Interactor interface { } type interactor struct { - masterTxManager repository.MasterTxManager - wishCardService wishcard.Service - tagService tag.Service - placeService place.Service - wishCardsTagsService wishcardtag.Service + masterTxManager repository.MasterTxManager + wishCardService wishcard.Service + tagService tag.Service + placeService place.Service } -func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, tagService tag.Service, placeService place.Service, wishCardsTagsService wishcardtag.Service) Interactor { +func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, tagService tag.Service, placeService place.Service) Interactor { return &interactor{ - masterTxManager: masterTxManager, - wishCardService: wishCardService, - tagService: tagService, - placeService: placeService, - wishCardsTagsService: wishCardsTagsService, + masterTxManager: masterTxManager, + wishCardService: wishCardService, + tagService: tagService, + placeService: placeService, } } @@ -66,10 +63,6 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i return werrors.Stack(err) } - // err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, newWishCard.ID, tagIDs) - // if err != nil { - // return werrors.Stack(err) - // } return nil }) if err != nil { @@ -102,15 +95,6 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, if err != nil { return werrors.Stack(err) } - - err = i.wishCardsTagsService.DeleteByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return werrors.Stack(err) - } - // err = i.wishCardsTagsService.CreateMultipleRelation(ctx, masterTx, wishCard.ID, tagIDs) - // if err != nil { - // return werrors.Stack(err) - // } return nil }) if err != nil { diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index ff2ab81..1947389 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -15,7 +15,6 @@ import ( "wantum/pkg/domain/service/place/mock_place" "wantum/pkg/domain/service/tag/mock_tag" "wantum/pkg/domain/service/wishcard/mock_wish_card" - "wantum/pkg/domain/service/wishcardtag/mock_wish_card_tag" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -130,13 +129,10 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) - wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - - interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + interactor := New(masterTxManager, wishCardService, tagService, placeService) tags := []string{dummyTagName1, dummyTagName2} - result, err := interactor.CreateNewWishCard(ctx, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, 1, tags) + result, err := interactor.CreateNewWishCard(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, tags) assert.NoError(t, err) assert.NotNil(t, result) @@ -183,11 +179,7 @@ func TestInteractor_UpdateWishCard(t *testing.T) { tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) - wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - wishCardTagService.EXPECT().CreateMultipleRelation(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) - - interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + interactor := New(masterTxManager, wishCardService, tagService, placeService) tags := []string{dummyTagName1, dummyTagName2} result, err := interactor.UpdateWishCard(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, &dummyDate, 1, tags) @@ -219,10 +211,7 @@ func TestInteractor_DeleteWishCard(t *testing.T) { tagService := mock_tag.NewMockService(ctrl) - wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - wishCardTagService.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) - - interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + interactor := New(masterTxManager, wishCardService, tagService, placeService) err := interactor.DeleteWishCardByID(ctx, 1) @@ -243,9 +232,7 @@ func TestInteractor_GetByID(t *testing.T) { tagService := mock_tag.NewMockService(ctrl) - wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - - interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + interactor := New(masterTxManager, wishCardService, tagService, placeService) result, err := interactor.GetByID(ctx, 1) @@ -302,9 +289,7 @@ func TestInteractor_GetByCategoryID(t *testing.T) { tagService := mock_tag.NewMockService(ctrl) - wishCardTagService := mock_wish_card_tag.NewMockService(ctrl) - - interactor := New(masterTxManager, wishCardService, tagService, placeService, wishCardTagService) + interactor := New(masterTxManager, wishCardService, tagService, placeService) wishCards, err := interactor.GetByCategoryID(ctx, 1) From 882cfd52a5b4dc3dd1e2e64399e850586ff78b56 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 13:06:11 +0900 Subject: [PATCH 127/156] =?UTF-8?q?wishcardtag.service=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mock_wish_card_tag/mock_service.go | 91 ------------------- pkg/domain/service/wishcardtag/service.go | 57 ------------ 2 files changed, 148 deletions(-) delete mode 100644 pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go delete mode 100644 pkg/domain/service/wishcardtag/service.go diff --git a/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go b/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go deleted file mode 100644 index 2a3d449..0000000 --- a/pkg/domain/service/wishcardtag/mock_wish_card_tag/mock_service.go +++ /dev/null @@ -1,91 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: pkg/domain/service/wishcardtag/service.go - -// Package mock_wish_card_tag is a generated GoMock package. -package mock_wish_card_tag - -import ( - context "context" - gomock "github.com/golang/mock/gomock" - reflect "reflect" - repository "wantum/pkg/domain/repository" -) - -// MockService is a mock of Service interface -type MockService struct { - ctrl *gomock.Controller - recorder *MockServiceMockRecorder -} - -// MockServiceMockRecorder is the mock recorder for MockService -type MockServiceMockRecorder struct { - mock *MockService -} - -// NewMockService creates a new mock instance -func NewMockService(ctrl *gomock.Controller) *MockService { - mock := &MockService{ctrl: ctrl} - mock.recorder = &MockServiceMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use -func (m *MockService) EXPECT() *MockServiceMockRecorder { - return m.recorder -} - -// Create mocks base method -func (m *MockService) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Create", ctx, masterTx, wishCardID, tagID) - ret0, _ := ret[0].(error) - return ret0 -} - -// Create indicates an expected call of Create -func (mr *MockServiceMockRecorder) Create(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, wishCardID, tagID) -} - -// CreateMultipleRelation mocks base method -func (m *MockService) CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateMultipleRelation", ctx, masterTx, wishCardID, tagIDs) - ret0, _ := ret[0].(error) - return ret0 -} - -// CreateMultipleRelation indicates an expected call of CreateMultipleRelation -func (mr *MockServiceMockRecorder) CreateMultipleRelation(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateMultipleRelation", reflect.TypeOf((*MockService)(nil).CreateMultipleRelation), ctx, masterTx, wishCardID, tagIDs) -} - -// Delete mocks base method -func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID, tagID) - ret0, _ := ret[0].(error) - return ret0 -} - -// Delete indicates an expected call of Delete -func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, wishCardID, tagID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, wishCardID, tagID) -} - -// DeleteByWishCardID mocks base method -func (m *MockService) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteByWishCardID", ctx, masterTx, wishCardID) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteByWishCardID indicates an expected call of DeleteByWishCardID -func (mr *MockServiceMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCardID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockService)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) -} diff --git a/pkg/domain/service/wishcardtag/service.go b/pkg/domain/service/wishcardtag/service.go deleted file mode 100644 index 646f923..0000000 --- a/pkg/domain/service/wishcardtag/service.go +++ /dev/null @@ -1,57 +0,0 @@ -package wishcardtag - -import ( - "context" - "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/wishcardtag" - "wantum/pkg/werrors" -) - -type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error - CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error - Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error - DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error -} - -type service struct { - repository wishcardtag.Repository -} - -func New(repo wishcardtag.Repository) Service { - return &service{ - repository: repo, - } -} - -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { - err := s.repository.Insert(ctx, masterTx, wishCardID, tagID) - if err != nil { - return werrors.Stack(err) - } - return nil -} - -func (s *service) CreateMultipleRelation(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { - err := s.repository.BulkInsert(ctx, masterTx, wishCardID, tagIDs) - if err != nil { - return werrors.Stack(err) - } - return nil -} - -func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error { - err := s.repository.Delete(ctx, masterTx, wishCardID, tagID) - if err != nil { - return werrors.Stack(err) - } - return nil -} - -func (s *service) DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { - err := s.repository.DeleteByWishCardID(ctx, masterTx, wishCardID) - if err != nil { - return werrors.Stack(err) - } - return nil -} From e9ab87167b9bd352a4e8779de8559df5e27c6b46 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 13:08:27 +0900 Subject: [PATCH 128/156] =?UTF-8?q?interface=E5=AE=9A=E7=BE=A9=E3=81=AE?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/service.go | 2 -- pkg/domain/service/tag/service.go | 2 -- pkg/domain/service/wishcard/service.go | 2 -- 3 files changed, 6 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 99a1e6a..629b803 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -16,11 +16,9 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) - Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) - GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) } diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index b28c774..775f14b 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -15,11 +15,9 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error - GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index e6fafb8..1304aa5 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -22,11 +22,9 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagsIDs []int) (*wishCardEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) - Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) - GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) From 638ce1ad2d1ce1a9d3032787aab425ce62a52012 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 20:21:26 +0900 Subject: [PATCH 129/156] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=8F?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=83=AA=E3=83=B3=E3=82=B0=E3=82=92=E3=83=AF?= =?UTF-8?q?=E3=83=B3=E3=83=A9=E3=82=A4=E3=83=8A=E3=83=BC=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 3 +- pkg/domain/service/place/service.go | 12 ++---- pkg/domain/service/tag/service.go | 9 ++--- pkg/domain/service/wishcard/service.go | 17 ++++---- .../mysql/place/repository_test.go | 15 +++---- .../mysql/tag/repository_test.go | 12 ++---- .../mysql/wishcard/repository.go | 39 ++++++++++--------- .../mysql/wishcard/repository_test.go | 15 +++---- 8 files changed, 50 insertions(+), 72 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 509d950..8c45175 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -106,8 +106,7 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) error { var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = i.wishCardService.Delete(ctx, masterTx, wishCardID) - if err != nil { + if err = i.wishCardService.Delete(ctx, masterTx, wishCardID); err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 629b803..d32fc6c 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -59,8 +59,7 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac now := time.Now() place.Name = name place.UpdatedAt = &now - err = s.placeRepository.Update(ctx, masterTx, place) - if err != nil { + if err = s.placeRepository.Update(ctx, masterTx, place); err != nil { return nil, werrors.Stack(err) } return place, nil @@ -74,8 +73,7 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx now := time.Now() place.UpdatedAt = &now place.DeletedAt = &now - err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place) - if err != nil { + if err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place); err != nil { return nil, werrors.Stack(err) } return place, nil @@ -89,8 +87,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master now := time.Now() place.UpdatedAt = &now place.DeletedAt = nil - err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place) - if err != nil { + if err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place); err != nil { return nil, werrors.Stack(err) } return place, nil @@ -110,8 +107,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac "could not delete this place", ) } - err = s.placeRepository.Delete(ctx, masterTx, placeID) - if err != nil { + if err = s.placeRepository.Delete(ctx, masterTx, placeID); err != nil { return werrors.Stack(err) } return nil diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 775f14b..6ca4c66 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -57,8 +57,7 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx now := time.Now() tag.UpdatedAt = &now tag.DeletedAt = &now - err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag) - if err != nil { + if err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag); err != nil { return nil, werrors.Stack(err) } return tag, nil @@ -72,8 +71,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master now := time.Now() tag.UpdatedAt = &now tag.DeletedAt = nil - err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag) - if err != nil { + if err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag); err != nil { return nil, werrors.Stack(err) } return tag, nil @@ -93,8 +91,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI "could not delete this place", ) } - err = s.tagRepository.Delete(ctx, masterTx, tagID) - if err != nil { + if err = s.tagRepository.Delete(ctx, masterTx, tagID); err != nil { return werrors.Stack(err) } return nil diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 1304aa5..b499abd 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -134,8 +134,7 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish wishCard.UpdatedAt = &now wishCard.Tags = tags - err = s.wishCardRepository.Update(ctx, masterTx, wishCard, categoryID) - if err != nil { + if err = s.wishCardRepository.Update(ctx, masterTx, wishCard, categoryID); err != nil { return nil, werrors.Stack(err) } @@ -177,8 +176,8 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx wishCard.Author = author wishCard.Place = place wishCard.Tags = tags - err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard) - if err != nil { + + if err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard); err != nil { return nil, werrors.Stack(err) } return wishCard, nil @@ -212,8 +211,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master wishCard.Author = author wishCard.Place = place wishCard.Tags = tags - err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard) - if err != nil { + if err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard); err != nil { return nil, werrors.Stack(err) } return wishCard, nil @@ -275,7 +273,11 @@ func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wi for _, id := range wishCardIDs { idList = append(idList, strconv.Itoa(id)) } + wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, idList) + if err != nil { + return nil, werrors.Stack(err) + } // OPTIMIZE: 絶対遅い for _, wishCard := range wishCards { author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) @@ -299,9 +301,6 @@ func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wi wishCard.Place = place wishCard.Tags = tags } - if err != nil { - return nil, werrors.Stack(err) - } return wishCards, nil } diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 7842e38..bbfadef 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -87,8 +87,7 @@ func TestUpdate(t *testing.T) { var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, place) - if err != nil { + if err = repo.Update(ctx, masterTx, place); err != nil { return err } @@ -118,8 +117,7 @@ func TestUpDeleteFlag(t *testing.T) { place.ID = newPlaceID place.DeletedAt = &dummyDate - err = repo.UpDeleteFlag(ctx, masterTx, place) - if err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, place); err != nil { return err } @@ -144,8 +142,7 @@ func TestUpDeleteFlag(t *testing.T) { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - err = repo.UpDeleteFlag(ctx, masterTx, place) - return err + return repo.UpDeleteFlag(ctx, masterTx, place) }) assert.Error(t, err) @@ -169,8 +166,7 @@ func TestDownDeleteFlag(t *testing.T) { place.ID = newPlaceID place.DeletedAt = nil - err = repo.DownDeleteFlag(ctx, masterTx, place) - if err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, place); err != nil { return err } @@ -200,8 +196,7 @@ func TestDelete(t *testing.T) { place.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, place) - err = repo.Delete(ctx, masterTx, place.ID) - if err != nil { + if err = repo.Delete(ctx, masterTx, place.ID); err != nil { return err } diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index 253729b..d69fab7 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -91,8 +91,7 @@ func TestUpDeleteFlag(t *testing.T) { tag.ID = newTagID tag.DeletedAt = &dummyDate - err = repo.UpDeleteFlag(ctx, masterTx, tag) - if err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, tag); err != nil { return err } @@ -116,8 +115,7 @@ func TestUpDeleteFlag(t *testing.T) { } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.UpDeleteFlag(ctx, masterTx, tag) - return err + return repo.UpDeleteFlag(ctx, masterTx, tag) }) assert.Error(t, err) @@ -141,8 +139,7 @@ func TestDownDeleteFlag(t *testing.T) { err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { tag.DeletedAt = nil - err = repo.DownDeleteFlag(ctx, masterTx, tag) - if err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, tag); err != nil { return err } @@ -173,8 +170,7 @@ func TestDelete(t *testing.T) { tag.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, tag) - err = repo.Delete(ctx, masterTx, tag.ID) - if err != nil { + if err = repo.Delete(ctx, masterTx, tag.ID); err != nil { return err } diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index 223fd3e..6b11a22 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -173,19 +173,19 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT FROM wish_cards WHERE id=? `, wishCardID) - var result wishCardEntity.Entity + var wishCard wishCardEntity.Entity var place placeEntity.Entity var user userEntity.Entity err = row.Scan( - &result.ID, + &wishCard.ID, &user.ID, - &result.Activity, - &result.Description, - &result.Date, - &result.DoneAt, - &result.CreatedAt, - &result.UpdatedAt, - &result.DeletedAt, + &wishCard.Activity, + &wishCard.Description, + &wishCard.Date, + &wishCard.DoneAt, + &wishCard.CreatedAt, + &wishCard.UpdatedAt, + &wishCard.DeletedAt, &place.ID) if err != nil { if err == sql.ErrNoRows { @@ -194,12 +194,13 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - result.Author = &user - result.Place = &place - log.Println(result.Place) - return &result, nil + wishCard.Author = &user + wishCard.Place = &place + log.Println(wishCard.Place) + return &wishCard, nil } +// TODO: ここのwishcardIDsはintにしたいお気持ち func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -217,7 +218,7 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result wishCardEntity.EntitySlice + var wishCards wishCardEntity.EntitySlice for rows.Next() { var wishCard wishCardEntity.Entity var place placeEntity.Entity @@ -243,9 +244,9 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master } wishCard.Author = &user wishCard.Place = &place - result = append(result, &wishCard) + wishCards = append(wishCards, &wishCard) } - return result, nil + return wishCards, nil } func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishCardEntity.EntitySlice, error) { @@ -263,7 +264,7 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result wishCardEntity.EntitySlice + var wishCards wishCardEntity.EntitySlice for rows.Next() { var wishCard wishCardEntity.Entity var place placeEntity.Entity @@ -289,7 +290,7 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, } wishCard.Author = &user wishCard.Place = &place - result = append(result, &wishCard) + wishCards = append(wishCards, &wishCard) } - return result, nil + return wishCards, nil } diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 07ab76d..ae9a87d 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -101,8 +101,7 @@ func TestUpdate(t *testing.T) { } var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard, 1) - if err != nil { + if err = repo.Update(ctx, masterTx, wishCard, 1); err != nil { return err } @@ -133,8 +132,7 @@ func TestUpdate(t *testing.T) { } var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - err = repo.Update(ctx, masterTx, wishCard, 1) - if err != nil { + if err = repo.Update(ctx, masterTx, wishCard, 1); err != nil { return err } @@ -170,8 +168,7 @@ func TestUpDeleteFlag(t *testing.T) { wishCard.ID = newID wishCard.DeletedAt = &dummyDate - err = repo.UpDeleteFlag(ctx, masterTx, wishCard) - if err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, wishCard); err != nil { return err } result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) @@ -231,8 +228,7 @@ func TestDownDeleteFlag(t *testing.T) { newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID - err = repo.DownDeleteFlag(ctx, masterTx, wishCard) - if err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, wishCard); err != nil { return err } result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) @@ -267,8 +263,7 @@ func TestDelete(t *testing.T) { wishCard.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, wishCard) - err = repo.Delete(ctx, masterTx, wishCard.ID) - if err != nil { + if err = repo.Delete(ctx, masterTx, wishCard.ID); err != nil { return err } assert.NoError(t, err) From 0e5da755ad918d68b255e1a88b5aa929264fb359 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sat, 19 Sep 2020 22:42:20 +0900 Subject: [PATCH 130/156] =?UTF-8?q?wishcard.update=E3=82=92=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E5=80=8B=E5=88=A5=E3=81=AB?= =?UTF-8?q?=E7=94=A8=E6=84=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 145 ++++++++++- pkg/api/usecase/wishcard/interactor_test.go | 230 +++++++++++++++++- .../mock_wish_card/mock_repository.go | 22 +- pkg/domain/repository/wishcard/repository.go | 3 +- .../mock_wish_card_tag/mock_repository.go | 16 +- .../repository/wishcardtag/repository.go | 1 + .../wishcard/mock_wish_card/mock_service.go | 53 +++- pkg/domain/service/wishcard/service.go | 113 ++++++++- pkg/domain/service/wishcard/service_test.go | 153 +++++++++++- .../mysql/wishcard/repository.go | 35 ++- .../mysql/wishcard/repository_test.go | 69 +++++- .../mysql/wishcardtag/repository.go | 30 ++- .../mysql/wishcardtag/repository_test.go | 13 + 13 files changed, 857 insertions(+), 26 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 8c45175..465b770 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -14,10 +14,16 @@ import ( type Interactor interface { CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) - UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) + UpdateActivity(ctx context.Context, userID, wishCardID int, activity string) (*wishCardEntity.Entity, error) + UpdateDescription(ctx context.Context, userID, wishCardID int, description string) (*wishCardEntity.Entity, error) + UpdatePlace(ctx context.Context, userID, wishCardID int, place string) (*wishCardEntity.Entity, error) + UpdateDate(ctx context.Context, userID, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) + UpdateWishCardWithCategoryID(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) DeleteWishCardByID(ctx context.Context, wishCardID int) error GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) GetByCategoryID(ctx context.Context, categoryID int) (wishCardEntity.EntitySlice, error) + AddTags(ctx context.Context, userID, wishCardID int, tags []string) (*wishCardEntity.Entity, error) + DeleteTags(ctx context.Context, userID, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) } type interactor struct { @@ -71,7 +77,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i return newWishCard, nil } -func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { +func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { var wishCard *wishCardEntity.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) @@ -91,7 +97,7 @@ func (i *interactor) UpdateWishCard(ctx context.Context, wishCardID, userID int, } tagIDs = append(tagIDs, tag.ID) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID, tagIDs) + wishCard, err = i.wishCardService.UpdateWithCategoryID(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID, tagIDs) if err != nil { return werrors.Stack(err) } @@ -149,3 +155,136 @@ func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (wishC } return wishCards, nil } + +func (i *interactor) UpdateActivity(ctx context.Context, userID, wishCardID int, activity string) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, wishCard.Description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil + +} + +func (i *interactor) UpdateDescription(ctx context.Context, userID, wishCardID int, description string) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) UpdatePlace(ctx context.Context, userID, wishCardID int, place string) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + place, err := i.placeService.Create(ctx, masterTx, place) + if err != nil { + // TODO: placeがすでにあったら無限に増えてしまう + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, wishCard.Description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, place.ID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) UpdateDate(ctx context.Context, userID, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + if err != nil { + return werrors.Stack(err) + } + wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, wishCard.Description, date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) AddTags(ctx context.Context, userID, wishCardID int, tags []string) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // create or get tagIDs + tagIDs := make([]int, 0, len(tags)) + for _, tagName := range tags { + var tag *tagEntity.Entity + tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + if tag == nil { + tag, err = i.tagService.Create(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } + } + tagIDs = append(tagIDs, tag.ID) + } + // add relation + wishCard, err = i.wishCardService.AddTags(ctx, masterTx, wishCardID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (i *interactor) DeleteTags(ctx context.Context, userID, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) { + var wishCard *wishCardEntity.Entity + var err error + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // delete relation + wishCard, err = i.wishCardService.DeleteTags(ctx, masterTx, wishCardID, tagIDs) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 1947389..4775be6 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -148,7 +148,7 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { }) } -func TestInteractor_UpdateWishCard(t *testing.T) { +func TestInteractor_UpdateWishCardWithCategoryID(t *testing.T) { t.Run("success", func(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) @@ -172,7 +172,7 @@ func TestInteractor_UpdateWishCard(t *testing.T) { placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdateWithCategoryID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) @@ -182,7 +182,7 @@ func TestInteractor_UpdateWishCard(t *testing.T) { interactor := New(masterTxManager, wishCardService, tagService, placeService) tags := []string{dummyTagName1, dummyTagName2} - result, err := interactor.UpdateWishCard(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, &dummyDate, 1, tags) + result, err := interactor.UpdateWishCardWithCategoryID(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, &dummyDate, 1, tags) assert.NoError(t, err) assert.NotNil(t, result) @@ -306,3 +306,227 @@ func TestInteractor_GetByCategoryID(t *testing.T) { assert.Equal(t, 2, len(wishCards[1].Tags)) }) } + +func TestInteractor_UpdateActivity(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.UpdateActivity(ctx, 1, 1, dummyActivity) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestInteractor_UpdateDescription(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.UpdateDescription(ctx, 1, 1, dummyDescription) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestInteractor_UpdatePlace(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.UpdatePlace(ctx, 1, 1, dummyPlaceName) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestInteractor_UpdateDate(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.UpdateDate(ctx, 1, 1, &dummyDate) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestInteractor_AddTags(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().AddTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.AddTags(ctx, 1, 1, []string{dummyTagName1, dummyTagName2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} + +func TestInteractor_DeleteTags(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyWishCard := wishCardEntity.Entity{ + ID: 1, + Author: &dummyUser, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &dummyPlace, + Tags: dummyTagSlice, + } + + placeService := mock_place.NewMockService(ctrl) + + wishCardService := mock_wish_card.NewMockService(ctrl) + wishCardService.EXPECT().DeleteTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + + tagService := mock_tag.NewMockService(ctrl) + + interactor := New(masterTxManager, wishCardService, tagService, placeService) + + result, err := interactor.DeleteTags(ctx, 1, 1, []int{1, 2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + }) +} diff --git a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go index e82089f..32cacaf 100644 --- a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go +++ b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go @@ -51,17 +51,31 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, wishCard, categoryID } // Update mocks base method -func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error { +func (m *MockRepository) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard, categoryID) + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCard) ret0, _ := ret[0].(error) return ret0 } // Update indicates an expected call of Update -func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard, categoryID interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard, categoryID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard) +} + +// UpdateWithCategoryID mocks base method +func (m *MockRepository) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateWithCategoryID", ctx, masterTx, wishCard, categoryID) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateWithCategoryID indicates an expected call of UpdateWithCategoryID +func (mr *MockRepositoryMockRecorder) UpdateWithCategoryID(ctx, masterTx, wishCard, categoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateWithCategoryID", reflect.TypeOf((*MockRepository)(nil).UpdateWithCategoryID), ctx, masterTx, wishCard, categoryID) } // UpDeleteFlag mocks base method diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 4728f96..fed0951 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -8,7 +8,8 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error + Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error + UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error diff --git a/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go b/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go index d7871dc..0cba507 100644 --- a/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go +++ b/pkg/domain/repository/wishcardtag/mock_wish_card_tag/mock_repository.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: pkg/domain/repository/wish_card_tag/repository.go +// Source: pkg/domain/repository/wishcardtag/repository.go // Package mock_wish_card_tag is a generated GoMock package. package mock_wish_card_tag @@ -89,3 +89,17 @@ func (mr *MockRepositoryMockRecorder) DeleteByWishCardID(ctx, masterTx, wishCard mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByWishCardID", reflect.TypeOf((*MockRepository)(nil).DeleteByWishCardID), ctx, masterTx, wishCardID) } + +// DeleteByIDs mocks base method +func (m *MockRepository) DeleteByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteByIDs", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteByIDs indicates an expected call of DeleteByIDs +func (mr *MockRepositoryMockRecorder) DeleteByIDs(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteByIDs", reflect.TypeOf((*MockRepository)(nil).DeleteByIDs), ctx, masterTx, wishCardID, tagIDs) +} diff --git a/pkg/domain/repository/wishcardtag/repository.go b/pkg/domain/repository/wishcardtag/repository.go index 7142d30..eed1126 100644 --- a/pkg/domain/repository/wishcardtag/repository.go +++ b/pkg/domain/repository/wishcardtag/repository.go @@ -10,4 +10,5 @@ type Repository interface { BulkInsert(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID, tagID int) error DeleteByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + DeleteByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error } diff --git a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go index 6fa4292..2bc191d 100644 --- a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go +++ b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go @@ -52,18 +52,33 @@ func (mr *MockServiceMockRecorder) Create(ctx, masterTx, activity, description, } // Update mocks base method -func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishcard.Entity, error) { +func (m *MockService) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, placeID int) (*wishcard.Entity, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) + ret := m.ctrl.Call(m, "Update", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, placeID) ret0, _ := ret[0].(*wishcard.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } // Update indicates an expected call of Update -func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs interface{}) *gomock.Call { +func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, placeID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, placeID) +} + +// UpdateWithCategoryID mocks base method +func (m *MockService) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateWithCategoryID", ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateWithCategoryID indicates an expected call of UpdateWithCategoryID +func (mr *MockServiceMockRecorder) UpdateWithCategoryID(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateWithCategoryID", reflect.TypeOf((*MockService)(nil).UpdateWithCategoryID), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, placeID, tagIDs) } // Delete mocks base method @@ -154,3 +169,33 @@ func (mr *MockServiceMockRecorder) GetByCategoryID(ctx, masterTx, categoryID int mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetByCategoryID", reflect.TypeOf((*MockService)(nil).GetByCategoryID), ctx, masterTx, categoryID) } + +// AddTags mocks base method +func (m *MockService) AddTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddTags", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddTags indicates an expected call of AddTags +func (mr *MockServiceMockRecorder) AddTags(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddTags", reflect.TypeOf((*MockService)(nil).AddTags), ctx, masterTx, wishCardID, tagIDs) +} + +// DeleteTags mocks base method +func (m *MockService) DeleteTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteTags", ctx, masterTx, wishCardID, tagIDs) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteTags indicates an expected call of DeleteTags +func (mr *MockServiceMockRecorder) DeleteTags(ctx, masterTx, wishCardID, tagIDs interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTags", reflect.TypeOf((*MockService)(nil).DeleteTags), ctx, masterTx, wishCardID, tagIDs) +} diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index b499abd..f29fdcd 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -21,13 +21,16 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagsIDs []int) (*wishCardEntity.Entity, error) - Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) + Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, placeID int) (*wishCardEntity.Entity, error) + UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) GetByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) + AddTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) + DeleteTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) } type service struct { @@ -99,9 +102,49 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, acti return wishCard, nil } +func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, placeID int) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + + now := time.Now() + wishCard.Author = author // NOTE: 今後、authorの更新があるかも + wishCard.Activity = activity + wishCard.Description = description + wishCard.Date = date + wishCard.DoneAt = doneAt + wishCard.Place = place + wishCard.UpdatedAt = &now + wishCard.Tags = tags + + if err = s.wishCardRepository.Update(ctx, masterTx, wishCard); err != nil { + return nil, werrors.Stack(err) + } + + return wishCard, nil +} + // WARNING: 空値があった時、元データが消滅する。 // QUESTION: リクエストは、全フィールド埋める or 差分だけ -func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { +func (s *service) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { return nil, werrors.Stack(err) @@ -134,7 +177,7 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish wishCard.UpdatedAt = &now wishCard.Tags = tags - if err = s.wishCardRepository.Update(ctx, masterTx, wishCard, categoryID); err != nil { + if err = s.wishCardRepository.UpdateWithCategoryID(ctx, masterTx, wishCard, categoryID); err != nil { return nil, werrors.Stack(err) } @@ -334,3 +377,67 @@ func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.Maste } return wishCards, nil } + +func (s *service) AddTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) { + if err := s.wishCardTagRepository.BulkInsert(ctx, masterTx, wishCardID, tagIDs); err != nil { + return nil, err + } + + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags + return wishCard, nil +} + +func (s *service) DeleteTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) { + if err := s.wishCardTagRepository.DeleteByIDs(ctx, masterTx, wishCardID, tagIDs); err != nil { + return nil, werrors.Stack(err) + } + + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return nil, werrors.Stack(err) + } + author.Profile = profile + place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return nil, werrors.Stack(err) + } + tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return nil, werrors.Stack(err) + } + wishCard.Author = author + wishCard.Place = place + wishCard.Tags = tags + return wishCard, nil +} diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index 2002204..1168732 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -146,7 +146,58 @@ func TestService_Update(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - wcRepo.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + assert.Equal(t, dummyDescription, result.Description) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) +} + +func TestService_UpdateWithCategoryID(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: "act", + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + wcRepo.EXPECT().UpdateWithCategoryID(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) userRepo := mock_user.NewMockRepository(ctrl) userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) @@ -165,7 +216,7 @@ func TestService_Update(t *testing.T) { wctRepo.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) - result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1, []int{1, 2}) + result, err := service.UpdateWithCategoryID(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) @@ -534,3 +585,101 @@ func TestService_GetByCategoryID(t *testing.T) { assert.Equal(t, &dummyPlace, result[0].Place) assert.Equal(t, dummyTags, result[0].Tags) } + +func TestService_AddTags(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.AddTags(ctx, masterTx, 1, []int{1, 2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) +} + +func TestService_DeleteTags(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) + + profileRepo := mock_profile.NewMockRepository(ctrl) + profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) + + placeRepo := mock_place.NewMockRepository(ctrl) + placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + + tagRepo := mock_tag.NewMockRepository(ctrl) + tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) + + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + wctRepo.EXPECT().DeleteByIDs(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.DeleteTags(ctx, masterTx, 1, []int{1, 2}) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, &dummyUser, result.Author) + assert.Equal(t, &dummyPlace, result.Place) + assert.Equal(t, dummyTags, result.Tags) +} diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index 6b11a22..e37329d 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -59,7 +59,40 @@ func (repo *wishCardRepositoryImplement) Insert(ctx context.Context, masterTx re return int(id), nil } -func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { +func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET + user_id=?, + activity=?, + description=?, + date=?, + done_at=?, + updated_at=?, + place_id=? + WHERE id=? + `, wishCard.Author.ID, + wishCard.Activity, + wishCard.Description, + wishCard.Date, + wishCard.DoneAt, + wishCard.UpdatedAt, + wishCard.Place.ID, + wishCard.ID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index ae9a87d..ed6f440 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -101,7 +101,7 @@ func TestUpdate(t *testing.T) { } var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - if err = repo.Update(ctx, masterTx, wishCard, 1); err != nil { + if err = repo.Update(ctx, masterTx, wishCard); err != nil { return err } @@ -132,7 +132,72 @@ func TestUpdate(t *testing.T) { } var result *wishCardEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - if err = repo.Update(ctx, masterTx, wishCard, 1); err != nil { + if err = repo.Update(ctx, masterTx, wishCard); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + }) +} + +func TestUpdateWithCategoryID(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateWithCategoryID(ctx, masterTx, wishCard, 1); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, 1) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + }) + + t.Run("success_doneAtがnil", func(t *testing.T) { + var err error + ctx := context.Background() + wishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateWithCategoryID(ctx, masterTx, wishCard, 1); err != nil { return err } diff --git a/pkg/infrastructure/mysql/wishcardtag/repository.go b/pkg/infrastructure/mysql/wishcardtag/repository.go index 6166d93..83e67e6 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository.go @@ -2,6 +2,7 @@ package wishcardtag import ( "context" + "strconv" "strings" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcardtag" @@ -46,6 +47,7 @@ func (repo *wishCardTagRepositoryImplement) BulkInsert(ctx context.Context, mast return werrors.FromConstant(err, werrors.ServerError) } + // TODO: うまいやりかたとは? query := "INSERT INTO wish_cards_tags(wish_card_id, tag_id) VALUES " values := make([]interface{}, 0, len(tagIDs)) for _, tagID := range tagIDs { @@ -54,8 +56,7 @@ func (repo *wishCardTagRepositoryImplement) BulkInsert(ctx context.Context, mast } query = strings.TrimSuffix(query, ",") - _, err = tx.Exec(query, values...) - if err != nil { + if _, err = tx.Exec(query, values...); err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) } @@ -98,3 +99,28 @@ func (repo *wishCardTagRepositoryImplement) DeleteByWishCardID(ctx context.Conte } return nil } + +func (repo *wishCardTagRepositoryImplement) DeleteByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + tagIDsStr := make([]string, 0, len(tagIDs)) + for _, id := range tagIDs { + tagIDsStr = append(tagIDsStr, strconv.Itoa(id)) + } + + _, err = tx.Exec(` + DELETE FROM wish_cards_tags + WHERE wish_card_id = ? + AND tag_id IN (`+strings.Join(tagIDsStr, ",")+`) + `, wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index 8d2838c..736ffa5 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -98,3 +98,16 @@ func TestDeleteByWishCardID(t *testing.T) { assert.NoError(t, err) }) } + +func TestDeleteByIDs(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = repo.DeleteByIDs(ctx, masterTx, 1, []int{1, 2, 3}) + return err + }) + assert.NoError(t, err) + }) +} From b298598cb3ea555acfa81f2d020b1d7c1e60956c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 20 Sep 2020 00:00:29 +0900 Subject: [PATCH 131/156] fix format --- pkg/api/usecase/wishcard/interactor.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 465b770..652814b 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -199,8 +199,7 @@ func (i *interactor) UpdateDescription(ctx context.Context, userID, wishCardID i func (i *interactor) UpdatePlace(ctx context.Context, userID, wishCardID int, place string) (*wishCardEntity.Entity, error) { var wishCard *wishCardEntity.Entity - var err error - err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう From 6772696935a16d308256e30feaa29a6b498f69d2 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 20 Sep 2020 11:34:07 +0900 Subject: [PATCH 132/156] =?UTF-8?q?no=20rows=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/place/repository.go | 49 ++++---- .../mysql/place/repository_test.go | 2 +- pkg/infrastructure/mysql/tag/repository.go | 107 +++++++----------- .../mysql/tag/repository_test.go | 4 +- .../mysql/wishcard/repository.go | 101 ++++++++--------- 5 files changed, 124 insertions(+), 139 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 0c958ff..1179030 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -152,19 +152,12 @@ func (repo *placeRepositoryImplement) SelectByID(ctx context.Context, masterTx r FROM places WHERE id=? `, placeID) - var result placeEntity.Entity - err = row.Scan( - &result.ID, - &result.Name, - &result.CreatedAt, - &result.UpdatedAt, - &result.DeletedAt) + result, err := convertToPlaceEntity(row) if err != nil { - // QUESTION: no rows無くて大丈夫?no rowsをエラーにするかしないか迷うのでどうしよう tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - return &result, nil + return result, nil } func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) { @@ -184,20 +177,36 @@ func (repo *placeRepositoryImplement) SelectAll(ctx context.Context, masterTx re tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result placeEntity.EntitySlice + result, err := convertToPlaceEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return result, nil +} + +func convertToPlaceEntity(row *sql.Row) (*placeEntity.Entity, error) { + var place placeEntity.Entity + if err := row.Scan(&place.ID, &place.Name, &place.CreatedAt, &place.UpdatedAt, &place.DeletedAt); err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &place, nil +} + +func convertToPlaceEntitySlice(rows *sql.Rows) (placeEntity.EntitySlice, error) { + var places placeEntity.EntitySlice for rows.Next() { var place placeEntity.Entity - err = rows.Scan( - &place.ID, - &place.Name, - &place.CreatedAt, - &place.UpdatedAt, - &place.DeletedAt) - if err != nil { - tlog.PrintErrorLogWithCtx(ctx, err) + if err := rows.Scan(&place.ID, &place.Name, &place.CreatedAt, &place.UpdatedAt, &place.DeletedAt); err != nil { + if err == sql.ErrNoRows { + return nil, nil + } return nil, werrors.FromConstant(err, werrors.ServerError) } - result = append(result, &place) + places = append(places, &place) } - return result, nil + return places, nil } diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index bbfadef..0f945f3 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -201,7 +201,7 @@ func TestDelete(t *testing.T) { } result, err = repo.SelectByID(ctx, masterTx, place.ID) - if err == nil { + if result != nil { return errors.New("削除されたデータが引っかかった") } return nil diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index d0a3388..f1a10e1 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -131,19 +131,12 @@ func (repo *tagRepositoryImplement) SelectByID(ctx context.Context, masterTx rep FROM tags WHERE id=? `, tagID) - var result tagEntity.Entity - err = row.Scan( - &result.ID, - &result.Name, - &result.CreatedAt, - &result.UpdatedAt, - &result.DeletedAt, - ) + result, err := convertToTagEntity(row) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - return &result, nil + return result, nil } func (repo *tagRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tagEntity.EntitySlice, error) { @@ -165,27 +158,16 @@ func (repo *tagRepositoryImplement) SelectByIDs(ctx context.Context, masterTx re IN (` + strings.Join(tagIDsStr, ",") + `) `) if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result tagEntity.EntitySlice - for rows.Next() { - var record tagEntity.Entity - err = rows.Scan( - &record.ID, - &record.Name, - &record.CreatedAt, - &record.UpdatedAt, - &record.DeletedAt, - ) - if err != nil { - if err != sql.ErrNoRows { - return nil, nil - } - tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) - } - result = append(result, &record) + result, err := convertToTagEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) } return result, nil } @@ -201,19 +183,12 @@ func (repo *tagRepositoryImplement) SelectByName(ctx context.Context, masterTx r FROM tags WHERE name=? `, name) - var result tagEntity.Entity - err = row.Scan( - &result.ID, - &result.Name, - &result.CreatedAt, - &result.UpdatedAt, - &result.DeletedAt, - ) + result, err := convertToTagEntity(row) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - return &result, nil + return result, nil } func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) { @@ -235,21 +210,10 @@ func (repo *tagRepositoryImplement) SelectByWishCardID(ctx context.Context, mast tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result tagEntity.EntitySlice - for rows.Next() { - var record tagEntity.Entity - err = rows.Scan( - &record.ID, - &record.Name, - &record.CreatedAt, - &record.UpdatedAt, - &record.DeletedAt, - ) - if err != nil { - tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) - } - result = append(result, &record) + result, err := convertToTagEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) } return result, nil } @@ -273,21 +237,36 @@ func (repo *tagRepositoryImplement) SelectByMemoryID(ctx context.Context, master tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var result tagEntity.EntitySlice + result, err := convertToTagEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return result, nil +} + +func convertToTagEntity(row *sql.Row) (*tagEntity.Entity, error) { + var tag tagEntity.Entity + if err := row.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt, &tag.DeletedAt); err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return &tag, nil +} + +func convertToTagEntitySlice(rows *sql.Rows) (tagEntity.EntitySlice, error) { + var tags tagEntity.EntitySlice for rows.Next() { - var record tagEntity.Entity - err = rows.Scan( - &record.ID, - &record.Name, - &record.CreatedAt, - &record.UpdatedAt, - &record.DeletedAt, - ) - if err != nil { - tlog.PrintErrorLogWithCtx(ctx, err) + var tag tagEntity.Entity + if err := rows.Scan(&tag.ID, &tag.Name, &tag.CreatedAt, &tag.UpdatedAt, &tag.DeletedAt); err != nil { + if err == sql.ErrNoRows { + return nil, nil + } return nil, werrors.FromConstant(err, werrors.ServerError) } - result = append(result, &record) + tags = append(tags, &tag) } - return result, nil + return tags, nil } diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index d69fab7..ccb1683 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -175,7 +175,7 @@ func TestDelete(t *testing.T) { } result, err = repo.SelectByID(ctx, masterTx, tag.ID) - if err == nil { + if result != nil { return errors.New("削除されたデータが引っかかった") } return nil @@ -263,7 +263,7 @@ func TestSelectByName(t *testing.T) { return err }) - assert.Error(t, err) + assert.NoError(t, err) assert.Nil(t, result) }) } diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index e37329d..6542ff0 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "errors" - "log" "strings" placeEntity "wantum/pkg/domain/entity/place" userEntity "wantum/pkg/domain/entity/user" @@ -206,31 +205,12 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT FROM wish_cards WHERE id=? `, wishCardID) - var wishCard wishCardEntity.Entity - var place placeEntity.Entity - var user userEntity.Entity - err = row.Scan( - &wishCard.ID, - &user.ID, - &wishCard.Activity, - &wishCard.Description, - &wishCard.Date, - &wishCard.DoneAt, - &wishCard.CreatedAt, - &wishCard.UpdatedAt, - &wishCard.DeletedAt, - &place.ID) + wishCard, err := convertToWishCardEntity(row) if err != nil { - if err == sql.ErrNoRows { - return nil, nil - } tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - wishCard.Author = &user - wishCard.Place = &place - log.Println(wishCard.Place) - return &wishCard, nil + return wishCard, nil } // TODO: ここのwishcardIDsはintにしたいお気持ち @@ -248,36 +228,16 @@ func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, master IN (` + strings.Join(wishCardIDs, ",") + `) `) if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - var wishCards wishCardEntity.EntitySlice - for rows.Next() { - var wishCard wishCardEntity.Entity - var place placeEntity.Entity - var user userEntity.Entity - err = rows.Scan( - &wishCard.ID, - &user.ID, - &wishCard.Activity, - &wishCard.Description, - &wishCard.Date, - &wishCard.DoneAt, - &wishCard.CreatedAt, - &wishCard.UpdatedAt, - &wishCard.DeletedAt, - &place.ID, - ) - if err != nil { - if err != sql.ErrNoRows { - return nil, nil - } - tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) - } - wishCard.Author = &user - wishCard.Place = &place - wishCards = append(wishCards, &wishCard) + wishCards, err := convertToWishCardEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) } return wishCards, nil } @@ -294,15 +254,53 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, WHERE category_id=? `, categryID) if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + wishCards, err := convertToWishCardEntitySlice(rows) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + return wishCards, nil +} + +func convertToWishCardEntity(row *sql.Row) (*wishCardEntity.Entity, error) { + var wishCard wishCardEntity.Entity + var place placeEntity.Entity + var user userEntity.Entity + err := row.Scan( + &wishCard.ID, + &user.ID, + &wishCard.Activity, + &wishCard.Description, + &wishCard.Date, + &wishCard.DoneAt, + &wishCard.CreatedAt, + &wishCard.UpdatedAt, + &wishCard.DeletedAt, + &place.ID) + if err != nil { + if err == sql.ErrNoRows { + return nil, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + wishCard.Author = &user + wishCard.Place = &place + return &wishCard, nil +} + +func convertToWishCardEntitySlice(rows *sql.Rows) (wishCardEntity.EntitySlice, error) { var wishCards wishCardEntity.EntitySlice for rows.Next() { var wishCard wishCardEntity.Entity var place placeEntity.Entity var user userEntity.Entity - err = rows.Scan( + err := rows.Scan( &wishCard.ID, &user.ID, &wishCard.Activity, @@ -315,10 +313,9 @@ func (repo *wishCardRepositoryImplement) SelectByCategoryID(ctx context.Context, &place.ID, ) if err != nil { - if err != sql.ErrNoRows { + if err == sql.ErrNoRows { return nil, nil } - tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } wishCard.Author = &user From 506aaa2a46a74b1f4134188a6737940d759ab074 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 20 Sep 2020 11:40:46 +0900 Subject: [PATCH 133/156] =?UTF-8?q?wishcard=20selectbyids=E3=81=AEid?= =?UTF-8?q?=E5=8F=97=E3=81=91=E6=B8=A1=E3=81=97=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wishcard/mock_wish_card/mock_repository.go | 2 +- pkg/domain/repository/wishcard/repository.go | 2 +- pkg/domain/service/wishcard/service.go | 7 +------ pkg/infrastructure/mysql/wishcard/repository.go | 11 ++++++++--- pkg/infrastructure/mysql/wishcard/repository_test.go | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go index 32cacaf..73d497e 100644 --- a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go +++ b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go @@ -136,7 +136,7 @@ func (mr *MockRepositoryMockRecorder) SelectByID(ctx, masterTx, wishCardID inter } // SelectByIDs mocks base method -func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) { +func (m *MockRepository) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishcard.EntitySlice, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "SelectByIDs", ctx, masterTx, wishCardIDs) ret0, _ := ret[0].(wishcard.EntitySlice) diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index fed0951..7e39dcf 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -14,6 +14,6 @@ type Repository interface { DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) - SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishcard.EntitySlice, error) + SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishcard.EntitySlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) } diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index f29fdcd..08dec39 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "net/http" - "strconv" "time" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" @@ -312,12 +311,8 @@ func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wis } func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) { - idList := make([]string, 0, len(wishCardIDs)) - for _, id := range wishCardIDs { - idList = append(idList, strconv.Itoa(id)) - } - wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, idList) + wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, wishCardIDs) if err != nil { return nil, werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index 6542ff0..a1ca0a1 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "errors" + "strconv" "strings" placeEntity "wantum/pkg/domain/entity/place" userEntity "wantum/pkg/domain/entity/user" @@ -213,19 +214,23 @@ func (repo *wishCardRepositoryImplement) SelectByID(ctx context.Context, masterT return wishCard, nil } -// TODO: ここのwishcardIDsはintにしたいお気持ち -func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []string) (wishCardEntity.EntitySlice, error) { +func (repo *wishCardRepositoryImplement) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } + wishCardIDsStr := make([]string, 0, len(wishCardIDs)) + for _, id := range wishCardIDs { + wishCardIDsStr = append(wishCardIDsStr, strconv.Itoa(id)) + } + rows, err := tx.Query(` SELECT id, user_id, activity, description, date, done_at, created_at, updated_at, deleted_at, place_id FROM wish_cards WHERE id - IN (` + strings.Join(wishCardIDs, ",") + `) + IN (` + strings.Join(wishCardIDsStr, ",") + `) `) if err != nil { if err == sql.ErrNoRows { diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index ed6f440..ef328d2 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -390,7 +390,7 @@ func TestSelectByIDs(t *testing.T) { var err error ctx := context.Background() - ids := []string{"1", "2", "3"} + ids := []int{1, 2, 3} var result wishCardEntity.EntitySlice err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { From 7f8bfbd942366db0930ecfb76cb5633c64ac69aa Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 20 Sep 2020 11:43:46 +0900 Subject: [PATCH 134/156] del comment --- pkg/infrastructure/mysql/place/repository_test.go | 2 -- pkg/infrastructure/mysql/tag/repository_test.go | 2 -- pkg/infrastructure/mysql/wishcard/repository_test.go | 2 -- pkg/infrastructure/mysql/wishcardtag/repository_test.go | 2 -- 4 files changed, 8 deletions(-) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 0f945f3..60571ed 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -27,8 +27,6 @@ var ( dummyPlace = "samplePlace" ) -// TODO: それぞれの関数で使っているdummyDataの切り出し - func TestMain(m *testing.M) { before() code := m.Run() diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index ccb1683..0a0de94 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -26,8 +26,6 @@ var ( dummyDate time.Time ) -// TODO: それぞれの関数で使っているdummyDataの切り出し - func TestMain(m *testing.M) { before() code := m.Run() diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index ef328d2..7b41565 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -29,8 +29,6 @@ var ( dummyDescription = "sampleDescription" ) -// TODO: それぞれの関数で使っているdummyDataの切り出し - func TestMain(m *testing.M) { before() code := m.Run() diff --git a/pkg/infrastructure/mysql/wishcardtag/repository_test.go b/pkg/infrastructure/mysql/wishcardtag/repository_test.go index 736ffa5..2630d55 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository_test.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository_test.go @@ -23,8 +23,6 @@ var ( dummyDate time.Time ) -// TODO: それぞれの関数で使っているdummyDataの切り出し - func TestMain(m *testing.M) { before() code := m.Run() From 24c549dc7c7214c6eddbdfed7e9cdf3eb27d2467 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 20 Sep 2020 13:44:54 +0900 Subject: [PATCH 135/156] add validation --- pkg/api/usecase/wishcard/interactor.go | 155 +++++++++++++++++++- pkg/api/usecase/wishcard/interactor_test.go | 125 +++++++++++++++- 2 files changed, 273 insertions(+), 7 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 652814b..7bc5367 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -2,6 +2,9 @@ package wishcard import ( "context" + "errors" + "fmt" + "net/http" "time" tagEntity "wantum/pkg/domain/entity/tag" wishCardEntity "wantum/pkg/domain/entity/wishcard" @@ -9,7 +12,10 @@ import ( "wantum/pkg/domain/service/place" "wantum/pkg/domain/service/tag" "wantum/pkg/domain/service/wishcard" + "wantum/pkg/tlog" "wantum/pkg/werrors" + + "google.golang.org/grpc/codes" ) type Interactor interface { @@ -43,9 +49,32 @@ func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Se } func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) { + // validation + var err error + if err = validateActivity(activity); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateDescription(description); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validatePlace(place); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateDate(date); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateTags(tags); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + // create new entity var newWishCard *wishCardEntity.Entity - err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう @@ -78,8 +107,30 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i } func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardID, userID int, activity, description, place string, date, doneAt *time.Time, categoryID int, tags []string) (*wishCardEntity.Entity, error) { + var err error + if err = validateActivity(activity); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateDescription(description); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validatePlace(place); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateDate(date); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + if err = validateTags(tags); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + var wishCard *wishCardEntity.Entity - err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう @@ -157,8 +208,13 @@ func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (wishC } func (i *interactor) UpdateActivity(ctx context.Context, userID, wishCardID int, activity string) (*wishCardEntity.Entity, error) { - var wishCard *wishCardEntity.Entity var err error + if err = validateActivity(activity); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + + var wishCard *wishCardEntity.Entity err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { @@ -178,8 +234,13 @@ func (i *interactor) UpdateActivity(ctx context.Context, userID, wishCardID int, } func (i *interactor) UpdateDescription(ctx context.Context, userID, wishCardID int, description string) (*wishCardEntity.Entity, error) { - var wishCard *wishCardEntity.Entity var err error + if err = validateDescription(description); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + + var wishCard *wishCardEntity.Entity err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { @@ -198,8 +259,14 @@ func (i *interactor) UpdateDescription(ctx context.Context, userID, wishCardID i } func (i *interactor) UpdatePlace(ctx context.Context, userID, wishCardID int, place string) (*wishCardEntity.Entity, error) { + var err error + if err = validatePlace(place); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + var wishCard *wishCardEntity.Entity - err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう @@ -222,8 +289,13 @@ func (i *interactor) UpdatePlace(ctx context.Context, userID, wishCardID int, pl } func (i *interactor) UpdateDate(ctx context.Context, userID, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) { - var wishCard *wishCardEntity.Entity var err error + if err = validateDate(date); err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.Stack(err) + } + + var wishCard *wishCardEntity.Entity err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { @@ -287,3 +359,74 @@ func (i *interactor) DeleteTags(ctx context.Context, userID, wishCardID int, tag } return wishCard, nil } + +func validateActivity(activity string) error { + if activity == "" { + err := errors.New("activity is empty error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「やりたいこと」は必須項目です。", "activity is required.") + } + if len(activity) > 50 { + err := errors.New("activity is too long error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「やりたいこと」が長すぎます。", "activity is too long.") + } + return nil +} + +func validateDescription(description string) error { + if len(description) > 100 { + err := errors.New("description is too long error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「詳細」が長すぎます。", "description is too long.") + } + return nil +} + +func validatePlace(place string) error { + if place == "" { + err := errors.New("place is empty error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「場所」は必須項目です。", "place is required.") + } + if len(place) > 200 { + err := errors.New("place is too long error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「場所」が長すぎます。", "place is too long.") + } + return nil +} + +func validateDate(date *time.Time) error { + if date == nil { + err := errors.New("date is empty error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「日付」は必須項目です。", "date is required.") + } + if date.Before(time.Now()) { + err := errors.New("date is in the past") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "過去の「日付」は指定できません。", "date is in the past.") + } + return nil +} + +func validateTags(tags []string) error { + for _, tag := range tags { + if err := validateTag(tag); err != nil { + return err + } + } + return nil +} + +func validateTag(tag string) error { + if tag == "" { + err := errors.New("tag is invalid error") + return werrors.Newf( + err, + codes.InvalidArgument, + http.StatusBadRequest, + fmt.Sprintf("「%s」は無効なタグです。", tag), + fmt.Sprintf("「%s」is invalid.", tag), + ) + } + if len(tag) > 100 { + err := errors.New("tag is too long error") + return werrors.Newf(err, codes.InvalidArgument, http.StatusBadRequest, "「タグ」が長すぎます。", "tag is too long.") + } + return nil +} diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 4775be6..2783ad1 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -3,6 +3,7 @@ package wishcard import ( "context" "os" + "strings" "testing" "time" @@ -24,7 +25,7 @@ var ( masterTx repository.MasterTx masterTxManager repository.MasterTxManager - dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) + dummyDate = time.Date(2040, 9, 1, 12, 0, 0, 0, time.Local) dummyActivity = "dummyActivity" dummyDescription = "dummyDescription" dummyTagName1 = "dummyTag1" @@ -530,3 +531,125 @@ func TestInteractor_DeleteTags(t *testing.T) { assert.NotNil(t, result) }) } + +// validation test +func TestIntereractor_validateActivity(t *testing.T) { + t.Run("success", func(t *testing.T) { + err := validateActivity("activityyyy") + assert.NoError(t, err) + }) + + t.Run("success_文字列制限ぴったり", func(t *testing.T) { + err := validateActivity(strings.Repeat("a", 50)) + assert.NoError(t, err) + }) + + t.Run("failure_空値", func(t *testing.T) { + err := validateActivity("") + assert.Error(t, err) + }) + + t.Run("failure_文字列超過", func(t *testing.T) { + err := validateActivity(strings.Repeat("a", 51)) + assert.Error(t, err) + }) +} + +func TestIntereractor_validateDescription(t *testing.T) { + t.Run("success", func(t *testing.T) { + err := validateDescription("sampleDescription") + assert.NoError(t, err) + }) + + t.Run("success_文字列制限ぴったり", func(t *testing.T) { + err := validateDescription(strings.Repeat("a", 100)) + assert.NoError(t, err) + }) + + t.Run("success_空値", func(t *testing.T) { + err := validateDescription("") + assert.NoError(t, err) + }) + + t.Run("failure_文字列超過", func(t *testing.T) { + err := validateDescription(strings.Repeat("a", 101)) + assert.Error(t, err) + }) +} + +func TestIntereractor_validatePlace(t *testing.T) { + t.Run("success", func(t *testing.T) { + err := validatePlace("samplePlace") + assert.NoError(t, err) + }) + + t.Run("success_文字列制限ぴったり", func(t *testing.T) { + err := validatePlace(strings.Repeat("a", 200)) + assert.NoError(t, err) + }) + + t.Run("failure_空値", func(t *testing.T) { + err := validatePlace("") + assert.Error(t, err) + }) + + t.Run("failure_文字列超過", func(t *testing.T) { + err := validatePlace(strings.Repeat("a", 201)) + assert.Error(t, err) + }) +} + +func TestIntereractor_validateDate(t *testing.T) { + t.Run("success", func(t *testing.T) { + future := time.Now().AddDate(1, 0, 0) + err := validateDate(&future) + assert.NoError(t, err) + }) + + t.Run("failure_空値", func(t *testing.T) { + err := validateDate(nil) + assert.Error(t, err) + }) + + t.Run("failure_過去の日付を指定", func(t *testing.T) { + past := time.Date(1990, 9, 1, 12, 0, 0, 0, time.Local) + err := validateDate(&past) + assert.Error(t, err) + }) +} + +func TestIntereractor_validateTags(t *testing.T) { + t.Run("success", func(t *testing.T) { + tags := []string{"sample1", "sample2", "sample3"} + err := validateTags(tags) + assert.NoError(t, err) + }) + + t.Run("failure_エラー混じり", func(t *testing.T) { + tags := []string{"sample1", "sample2", strings.Repeat("a", 101)} + err := validateTags(tags) + assert.Error(t, err) + }) +} + +func TestIntereractor_validateTag(t *testing.T) { + t.Run("success", func(t *testing.T) { + err := validateTag("sampleTag") + assert.NoError(t, err) + }) + + t.Run("success_文字列制限ぴったり", func(t *testing.T) { + err := validateTag(strings.Repeat("a", 100)) + assert.NoError(t, err) + }) + + t.Run("failure_空値", func(t *testing.T) { + err := validateTag("") + assert.Error(t, err) + }) + + t.Run("failure_文字列超過", func(t *testing.T) { + err := validateTag(strings.Repeat("a", 101)) + assert.Error(t, err) + }) +} From a518c25c8a58004080d76ba312453e3760fd5dc9 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 13:18:46 +0900 Subject: [PATCH 136/156] fix bulk insert --- .../mysql/wishcardtag/repository.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pkg/infrastructure/mysql/wishcardtag/repository.go b/pkg/infrastructure/mysql/wishcardtag/repository.go index 83e67e6..93a2733 100644 --- a/pkg/infrastructure/mysql/wishcardtag/repository.go +++ b/pkg/infrastructure/mysql/wishcardtag/repository.go @@ -47,19 +47,18 @@ func (repo *wishCardTagRepositoryImplement) BulkInsert(ctx context.Context, mast return werrors.FromConstant(err, werrors.ServerError) } - // TODO: うまいやりかたとは? - query := "INSERT INTO wish_cards_tags(wish_card_id, tag_id) VALUES " - values := make([]interface{}, 0, len(tagIDs)) - for _, tagID := range tagIDs { - query = query + "(?, ?)," - values = append(values, wishCardID, tagID) - } - query = strings.TrimSuffix(query, ",") - - if _, err = tx.Exec(query, values...); err != nil { + stmt, err := tx.Prepare("INSERT INTO wish_cards_tags(wish_card_id, tag_id) VALUES (?, ?)") + if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) } + for _, tagID := range tagIDs { + _, err = stmt.Exec(wishCardID, tagID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + } return nil } From ea6ca41f17980160013484b17932635139d70ab3 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 13:21:42 +0900 Subject: [PATCH 137/156] del comment --- pkg/domain/service/place/service.go | 1 - pkg/domain/service/wishcard/service.go | 1 - 2 files changed, 2 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index d32fc6c..e47c153 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -49,7 +49,6 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name } // WARNING: 空値があった時、元データが消滅する。 -// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index 08dec39..aa8799d 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -142,7 +142,6 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish } // WARNING: 空値があった時、元データが消滅する。 -// QUESTION: リクエストは、全フィールド埋める or 差分だけ func (s *service) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) if err != nil { From d2a374ab6f8c3f2cd47582b8340a775f048b0559 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 21:02:21 +0900 Subject: [PATCH 138/156] =?UTF-8?q?tagservice.getbyname=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AE=E6=8F=A1=E3=82=8A=E6=BD=B0?= =?UTF-8?q?=E3=81=97=E3=82=92=E3=81=AA=E3=81=8F=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 7bc5367..7940fa0 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -83,7 +83,10 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity - tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + tag, err = i.tagService.GetByName(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } if tag == nil { tag, err = i.tagService.Create(ctx, masterTx, tagName) if err != nil { @@ -139,7 +142,10 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity - tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + tag, err = i.tagService.GetByName(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } if tag == nil { tag, err = i.tagService.Create(ctx, masterTx, tagName) if err != nil { @@ -321,7 +327,10 @@ func (i *interactor) AddTags(ctx context.Context, userID, wishCardID int, tags [ tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity - tag, _ = i.tagService.GetByName(ctx, masterTx, tagName) + tag, err = i.tagService.GetByName(ctx, masterTx, tagName) + if err != nil { + return werrors.Stack(err) + } if tag == nil { tag, err = i.tagService.Create(ctx, masterTx, tagName) if err != nil { From 49f981474c6c3efa4fde9ba3e0eec8b2dcb4e8e3 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 22:02:27 +0900 Subject: [PATCH 139/156] result -> newID --- pkg/domain/service/place/service.go | 4 ++-- pkg/domain/service/tag/service.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index e47c153..3b1dee3 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -40,11 +40,11 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name CreatedAt: &now, UpdatedAt: &now, } - result, err := s.placeRepository.Insert(ctx, masterTx, place) + newID, err := s.placeRepository.Insert(ctx, masterTx, place) if err != nil { return nil, werrors.Stack(err) } - place.ID = result + place.ID = newID return place, nil } diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 6ca4c66..31cadb7 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -41,11 +41,11 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name CreatedAt: &now, UpdatedAt: &now, } - result, err := s.tagRepository.Insert(ctx, masterTx, tag) + newID, err := s.tagRepository.Insert(ctx, masterTx, tag) if err != nil { return nil, werrors.Stack(err) } - tag.ID = result + tag.ID = newID return tag, nil } From f2ab15906e8fec04de69847374e57b659e902a3f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 22:07:40 +0900 Subject: [PATCH 140/156] =?UTF-8?q?tag,=20place=E3=81=AEservice=E3=81=8B?= =?UTF-8?q?=E3=82=89up/downdeleteflag=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/service.go | 44 +------------- pkg/domain/service/place/service_test.go | 74 +----------------------- pkg/domain/service/tag/service.go | 44 +------------- pkg/domain/service/tag/service_test.go | 60 +------------------ 4 files changed, 8 insertions(+), 214 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 3b1dee3..0adef3d 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -2,23 +2,17 @@ package place import ( "context" - "fmt" - "net/http" "time" placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" "wantum/pkg/werrors" - - "google.golang.org/grpc/codes" ) type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) - Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) + Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) } @@ -64,7 +58,7 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac return place, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { return nil, werrors.Stack(err) @@ -78,40 +72,6 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx return place, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { - place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) - if err != nil { - return nil, werrors.Stack(err) - } - now := time.Now() - place.UpdatedAt = &now - place.DeletedAt = nil - if err = s.placeRepository.DownDeleteFlag(ctx, masterTx, place); err != nil { - return nil, werrors.Stack(err) - } - return place, nil -} - -func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { - place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) - if err != nil { - return werrors.Stack(err) - } - if place.DeletedAt == nil { - return werrors.Newf( - fmt.Errorf("can't delete this data. this data did not up a delete flag. placeID=%v", placeID), - codes.FailedPrecondition, - http.StatusBadRequest, - "このデータは削除できません", - "could not delete this place", - ) - } - if err = s.placeRepository.Delete(ctx, masterTx, placeID); err != nil { - return werrors.Stack(err) - } - return nil -} - func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 6d0be1f..8204208 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -67,7 +67,7 @@ func TestService_Update(t *testing.T) { assert.NotNil(t, result) } -func TestService_UpDeleteFlag(t *testing.T) { +func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -84,83 +84,13 @@ func TestService_UpDeleteFlag(t *testing.T) { repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) service := New(repo) - result, err := service.UpDeleteFlag(ctx, masterTx, dummyData.ID) + result, err := service.Delete(ctx, masterTx, dummyData.ID) assert.NoError(t, err) assert.NotNil(t, result) assert.NotNil(t, result.DeletedAt) } -func TestService_DownDeleteFlag(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - dummyData := &placeEntity.Entity{ - ID: 1, - Name: "tokyo", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) - - service := New(repo) - result, err := service.DownDeleteFlag(ctx, masterTx, dummyData.ID) - - assert.NoError(t, err) - assert.NotNil(t, result) - assert.Nil(t, result.DeletedAt) -} - -func TestService_Delete(t *testing.T) { - t.Run("success", func(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - dummyData := &placeEntity.Entity{ - ID: 1, - Name: "tokyo", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().Delete(ctx, masterTx, 1).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) - - service := New(repo) - err := service.Delete(ctx, masterTx, 1) - - assert.NoError(t, err) - }) - - t.Run("failure_deleteフラグが上がってない", func(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - dummyData := &placeEntity.Entity{ - ID: 1, - Name: "tokyo", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } - - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, 1).Return(dummyData, nil) - - service := New(repo) - err := service.Delete(ctx, masterTx, 1) - - assert.Error(t, err) - }) - -} - func TestService_GetByID(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index 31cadb7..dafd0b6 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -2,22 +2,16 @@ package tag import ( "context" - "fmt" - "net/http" "time" tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" "wantum/pkg/werrors" - - "google.golang.org/grpc/codes" ) type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) - Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) GetByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tagEntity.Entity, error) GetByWishCardID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (tagEntity.EntitySlice, error) @@ -49,7 +43,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, name return tag, nil } -func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { return nil, werrors.Stack(err) @@ -63,40 +57,6 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx return tag, nil } -func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { - tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) - if err != nil { - return nil, werrors.Stack(err) - } - now := time.Now() - tag.UpdatedAt = &now - tag.DeletedAt = nil - if err = s.tagRepository.DownDeleteFlag(ctx, masterTx, tag); err != nil { - return nil, werrors.Stack(err) - } - return tag, nil -} - -func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { - tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) - if err != nil { - return werrors.Stack(err) - } - if tag.DeletedAt == nil { - return werrors.Newf( - fmt.Errorf("can't delete this data. this data did not up a delete flag. tagID=%v", tagID), - codes.FailedPrecondition, - http.StatusBadRequest, - "このデータは削除できません", - "could not delete this place", - ) - } - if err = s.tagRepository.Delete(ctx, masterTx, tagID); err != nil { - return werrors.Stack(err) - } - return nil -} - func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tagEntity.Entity, error) { tag, err := s.tagRepository.SelectByID(ctx, masterTx, tagID) if err != nil { diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index cf75ce5..6e5b6e6 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -66,7 +66,7 @@ func TestService_Create(t *testing.T) { assert.NotNil(t, result) } -func TestService_UpDeleteFlag(t *testing.T) { +func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() @@ -76,69 +76,13 @@ func TestService_UpDeleteFlag(t *testing.T) { repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) - result, err := service.UpDeleteFlag(ctx, masterTx, dummyTag.ID) + result, err := service.Delete(ctx, masterTx, dummyTag.ID) assert.NoError(t, err) assert.NotNil(t, result) assert.NotNil(t, result.DeletedAt) } -func TestService_DownDeleteFlag(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) - - service := New(repo) - result, err := service.DownDeleteFlag(ctx, masterTx, dummyTag.ID) - - assert.NoError(t, err) - assert.NotNil(t, result) - assert.Nil(t, result.DeletedAt) -} - -func TestService_Delete(t *testing.T) { - t.Run("success", func(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - dummy := &tagEntity.Entity{ - ID: 1, - Name: "sampleTag", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - - repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummy, nil) - - service := New(repo) - err := service.Delete(ctx, masterTx, 1) - - assert.NoError(t, err) - }) - - t.Run("failure_deleteフラグがたってない", func(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) - - service := New(repo) - err := service.Delete(ctx, masterTx, 1) - - assert.Error(t, err) - }) -} - func TestService_GetByID(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) From 5ea33b306e5f6434881e2bc7f33bd70e91023a58 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Mon, 21 Sep 2020 22:13:59 +0900 Subject: [PATCH 141/156] update mock --- .../service/place/mock_place/mock_service.go | 37 ++----------------- .../service/tag/mock_tag/mock_service.go | 35 ++---------------- 2 files changed, 7 insertions(+), 65 deletions(-) diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go index 90a2d65..2b33008 100644 --- a/pkg/domain/service/place/mock_place/mock_service.go +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -66,47 +66,18 @@ func (mr *MockServiceMockRecorder) Update(ctx, masterTx, placeID, name interface } // Delete mocks base method -func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) - ret0, _ := ret[0].(error) - return ret0 -} - -// Delete indicates an expected call of Delete -func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, placeID) -} - -// UpDeleteFlag mocks base method -func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, placeID) ret0, _ := ret[0].(*place.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } -// UpDeleteFlag indicates an expected call of UpDeleteFlag -func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, placeID) -} - -// DownDeleteFlag mocks base method -func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, placeID) - ret0, _ := ret[0].(*place.Entity) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DownDeleteFlag indicates an expected call of DownDeleteFlag -func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, placeID interface{}) *gomock.Call { +// Delete indicates an expected call of Delete +func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, placeID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockService)(nil).Delete), ctx, masterTx, placeID) } // GetByID mocks base method diff --git a/pkg/domain/service/tag/mock_tag/mock_service.go b/pkg/domain/service/tag/mock_tag/mock_service.go index f9cca6f..949220d 100644 --- a/pkg/domain/service/tag/mock_tag/mock_service.go +++ b/pkg/domain/service/tag/mock_tag/mock_service.go @@ -50,44 +50,15 @@ func (mr *MockServiceMockRecorder) Create(ctx, masterTx, name interface{}) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockService)(nil).Create), ctx, masterTx, name) } -// UpDeleteFlag mocks base method -func (m *MockService) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tagID) - ret0, _ := ret[0].(*tag.Entity) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// UpDeleteFlag indicates an expected call of UpDeleteFlag -func (mr *MockServiceMockRecorder) UpDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockService)(nil).UpDeleteFlag), ctx, masterTx, tagID) -} - -// DownDeleteFlag mocks base method -func (m *MockService) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { +// Delete mocks base method +func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tagID) + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) ret0, _ := ret[0].(*tag.Entity) ret1, _ := ret[1].(error) return ret0, ret1 } -// DownDeleteFlag indicates an expected call of DownDeleteFlag -func (mr *MockServiceMockRecorder) DownDeleteFlag(ctx, masterTx, tagID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockService)(nil).DownDeleteFlag), ctx, masterTx, tagID) -} - -// Delete mocks base method -func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) - ret0, _ := ret[0].(error) - return ret0 -} - // Delete indicates an expected call of Delete func (mr *MockServiceMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() From 4440d4b7e15300224062a3acbea7275674fc8094 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 15:14:03 +0900 Subject: [PATCH 142/156] =?UTF-8?q?place=20repo=E3=81=AA=E3=81=8A=E3=81=97?= =?UTF-8?q?:=20=E5=80=8B=E5=88=A5update=E3=81=AE=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=80=81delete=E3=81=AE=E5=BC=95=E6=95=B0=E5=A4=89=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/mock_place/mock_repository.go | 15 +++++++++++ pkg/domain/repository/place/repository.go | 4 ++- pkg/infrastructure/mysql/place/repository.go | 26 +++++++++++++++++-- .../mysql/place/repository_test.go | 23 +++++++++++++++- 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/pkg/domain/repository/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go index 3dfe568..fcf04e6 100644 --- a/pkg/domain/repository/place/mock_place/mock_repository.go +++ b/pkg/domain/repository/place/mock_place/mock_repository.go @@ -8,6 +8,7 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + time "time" place "wantum/pkg/domain/entity/place" repository "wantum/pkg/domain/repository" ) @@ -64,6 +65,20 @@ func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, place interface{}) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, place) } +// UpdateName mocks base method +func (m *MockRepository) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateName", ctx, masterTx, placeID, name, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateName indicates an expected call of UpdateName +func (mr *MockRepositoryMockRecorder) UpdateName(ctx, masterTx, placeID, name, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateName", reflect.TypeOf((*MockRepository)(nil).UpdateName), ctx, masterTx, placeID, name, updatedAt) +} + // Delete mocks base method func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { m.ctrl.T.Helper() diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index 30e855c..f18bc89 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -2,6 +2,7 @@ package place import ( "context" + "time" "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" ) @@ -9,7 +10,8 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) (int, error) Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error + UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string, updatedAt *time.Time) error + Delete(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 1179030..078b510 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "errors" + "time" placeEntity "wantum/pkg/domain/entity/place" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/place" @@ -72,6 +73,27 @@ func (repo *placeRepositoryImplement) Update(ctx context.Context, masterTx repos return nil } +func (repo *placeRepositoryImplement) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE places + SET name=?, updated_at=? + WHERE id=? + `, name, + updatedAt, + placeID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { if place.DeletedAt == nil { return werrors.Newf( @@ -124,7 +146,7 @@ func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, master return nil } -func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { +func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -133,7 +155,7 @@ func (repo *placeRepositoryImplement) Delete(ctx context.Context, masterTx repos _, err = tx.Exec(` DELETE FROM places WHERE id=? and deleted_at is not null - `, placeID) + `, place.ID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index 60571ed..b36dd2f 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -99,6 +99,27 @@ func TestUpdate(t *testing.T) { }) } +func TestUpdateName(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *placeEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateName(ctx, masterTx, 2, dummyPlace, &dummyDate); err != nil { + return err + } + + result, err = repo.SelectByID(ctx, masterTx, 2) + return err + }) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyPlace, result.Name) + }) +} + func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error @@ -194,7 +215,7 @@ func TestDelete(t *testing.T) { place.DeletedAt = &dummyDate repo.UpDeleteFlag(ctx, masterTx, place) - if err = repo.Delete(ctx, masterTx, place.ID); err != nil { + if err = repo.Delete(ctx, masterTx, place); err != nil { return err } From 096e0086a013641a67675752b516b49553d2aa84 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 15:31:44 +0900 Subject: [PATCH 143/156] =?UTF-8?q?tag=20repository=E3=81=AB=E3=81=8A?= =?UTF-8?q?=E3=81=84=E3=81=A6delete,=20up/downdeleteflag=E3=81=AE=E6=94=B9?= =?UTF-8?q?=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/tag/repository.go | 7 ++-- pkg/infrastructure/mysql/tag/repository.go | 21 +++++----- .../mysql/tag/repository_test.go | 41 +++++++------------ 3 files changed, 29 insertions(+), 40 deletions(-) diff --git a/pkg/domain/repository/tag/repository.go b/pkg/domain/repository/tag/repository.go index 2399de6..9938c28 100644 --- a/pkg/domain/repository/tag/repository.go +++ b/pkg/domain/repository/tag/repository.go @@ -2,15 +2,16 @@ package tag import ( "context" + "time" "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" ) type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) (int, error) - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error - Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt, deletedAt *time.Time) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt *time.Time) error + Delete(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error SelectByID(ctx context.Context, masterTx repository.MasterTx, tagID int) (*tag.Entity, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, tagIDs []int) (tag.EntitySlice, error) SelectByName(ctx context.Context, masterTx repository.MasterTx, name string) (*tag.Entity, error) diff --git a/pkg/infrastructure/mysql/tag/repository.go b/pkg/infrastructure/mysql/tag/repository.go index f1a10e1..5e841f0 100644 --- a/pkg/infrastructure/mysql/tag/repository.go +++ b/pkg/infrastructure/mysql/tag/repository.go @@ -6,6 +6,7 @@ import ( "errors" "strconv" "strings" + "time" tagEntity "wantum/pkg/domain/entity/tag" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/tag" @@ -51,8 +52,8 @@ func (repo *tagRepositoryImplement) Insert(ctx context.Context, masterTx reposit return int(id), nil } -func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { - if tag.DeletedAt == nil { +func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt, deletedAt *time.Time) error { + if deletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), codes.Internal, @@ -71,9 +72,9 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r UPDATE tags SET updated_at=?, deleted_at=? WHERE id=? - `, tag.UpdatedAt, - tag.DeletedAt, - tag.ID, + `, deletedAt, + deletedAt, + tagID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -82,7 +83,7 @@ func (repo *tagRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx r return nil } -func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { +func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -92,9 +93,9 @@ func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx UPDATE tags SET updated_at=?, deleted_at=? WHERE id=? - `, tag.UpdatedAt, + `, updatedAt, nil, - tag.ID, + tagID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -103,7 +104,7 @@ func (repo *tagRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx return nil } -func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { +func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, tag *tagEntity.Entity) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -112,7 +113,7 @@ func (repo *tagRepositoryImplement) Delete(ctx context.Context, masterTx reposit _, err = tx.Exec(` DELETE FROM tags WHERE id=? and deleted_at is not null - `, tagID) + `, tag.ID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) diff --git a/pkg/infrastructure/mysql/tag/repository_test.go b/pkg/infrastructure/mysql/tag/repository_test.go index 0a0de94..13eb4da 100644 --- a/pkg/infrastructure/mysql/tag/repository_test.go +++ b/pkg/infrastructure/mysql/tag/repository_test.go @@ -24,6 +24,8 @@ var ( txManager repository.MasterTxManager repo tag.Repository dummyDate time.Time + + dummyTagID = 1 ) func TestMain(m *testing.M) { @@ -77,43 +79,37 @@ func TestUpDeleteFlag(t *testing.T) { var err error ctx := context.Background() name, _ := makeRandomStr(10) + dummyTime := time.Date(2020, 10, 10, 10, 0, 0, 0, time.Local) tag := &tagEntity.Entity{ Name: name, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, + CreatedAt: &dummyTime, + UpdatedAt: &dummyTime, } var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newTagID, _ := repo.Insert(ctx, masterTx, tag) - tag.ID = newTagID - tag.DeletedAt = &dummyDate - if err = repo.UpDeleteFlag(ctx, masterTx, tag); err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, newTagID, &dummyDate, &dummyDate); err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + result, _ = repo.SelectByID(ctx, masterTx, newTagID) return nil }) assert.NoError(t, err) assert.NotNil(t, result.DeletedAt) + assert.Equal(t, dummyDate, result.DeletedAt.Local()) + assert.Equal(t, dummyDate, result.UpdatedAt.Local()) }) t.Run("failure_deletedAtがnil", func(t *testing.T) { var err error ctx := context.Background() - name, _ := makeRandomStr(10) - tag := &tagEntity.Entity{ - ID: 1, - Name: name, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - } err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - return repo.UpDeleteFlag(ctx, masterTx, tag) + return repo.UpDeleteFlag(ctx, masterTx, dummyTagID, &dummyDate, nil) }) assert.Error(t, err) @@ -124,24 +120,15 @@ func TestDownDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() - name, _ := makeRandomStr(10) - tag := &tagEntity.Entity{ - ID: 1, - Name: name, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } var result *tagEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - tag.DeletedAt = nil - if err = repo.DownDeleteFlag(ctx, masterTx, tag); err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, dummyTagID, &dummyDate); err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, tag.ID) + result, _ = repo.SelectByID(ctx, masterTx, dummyTagID) return nil }) @@ -166,9 +153,9 @@ func TestDelete(t *testing.T) { newTagID, _ := repo.Insert(ctx, masterTx, tag) tag.ID = newTagID tag.DeletedAt = &dummyDate - repo.UpDeleteFlag(ctx, masterTx, tag) + repo.UpDeleteFlag(ctx, masterTx, tag.ID, tag.DeletedAt, tag.DeletedAt) - if err = repo.Delete(ctx, masterTx, tag.ID); err != nil { + if err = repo.Delete(ctx, masterTx, tag); err != nil { return err } From 1cab2167f36a4d35806ec10f57156d472612233c Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 15:39:26 +0900 Subject: [PATCH 144/156] =?UTF-8?q?place=20repo=E3=81=AEdelete=E7=B3=BB?= =?UTF-8?q?=E6=94=B9=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/place/repository.go | 4 ++-- pkg/infrastructure/mysql/place/repository.go | 16 ++++++------- .../mysql/place/repository_test.go | 24 +++++++++---------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/pkg/domain/repository/place/repository.go b/pkg/domain/repository/place/repository.go index f18bc89..e069e9e 100644 --- a/pkg/domain/repository/place/repository.go +++ b/pkg/domain/repository/place/repository.go @@ -12,8 +12,8 @@ type Repository interface { Update(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string, updatedAt *time.Time) error Delete(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt, deletedAt *time.Time) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt *time.Time) error SelectByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) SelectAll(ctx context.Context, masterTx repository.MasterTx) (place.EntitySlice, error) } diff --git a/pkg/infrastructure/mysql/place/repository.go b/pkg/infrastructure/mysql/place/repository.go index 078b510..b7992e3 100644 --- a/pkg/infrastructure/mysql/place/repository.go +++ b/pkg/infrastructure/mysql/place/repository.go @@ -94,8 +94,8 @@ func (repo *placeRepositoryImplement) UpdateName(ctx context.Context, masterTx r return nil } -func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { - if place.DeletedAt == nil { +func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt, deletedAt *time.Time) error { + if deletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), codes.Internal, @@ -114,9 +114,9 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx UPDATE places SET updated_at=?, deleted_at=? WHERE id=? - `, place.UpdatedAt, - place.DeletedAt, - place.ID, + `, updatedAt, + deletedAt, + placeID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -125,7 +125,7 @@ func (repo *placeRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx return nil } -func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *placeEntity.Entity) error { +func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -135,9 +135,9 @@ func (repo *placeRepositoryImplement) DownDeleteFlag(ctx context.Context, master UPDATE places SET updated_at=?, deleted_at=? WHERE id=? - `, place.UpdatedAt, + `, updatedAt, nil, - place.ID, + placeID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/infrastructure/mysql/place/repository_test.go b/pkg/infrastructure/mysql/place/repository_test.go index b36dd2f..c7c85ea 100644 --- a/pkg/infrastructure/mysql/place/repository_test.go +++ b/pkg/infrastructure/mysql/place/repository_test.go @@ -124,28 +124,29 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() + _dummyDate := time.Date(2020, 10, 10, 10, 0, 0, 0, time.Local) place := &placeEntity.Entity{ Name: dummyPlace, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, + CreatedAt: &_dummyDate, + UpdatedAt: &_dummyDate, } var result *placeEntity.Entity err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) - place.ID = newPlaceID - place.DeletedAt = &dummyDate - if err = repo.UpDeleteFlag(ctx, masterTx, place); err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, newPlaceID, &dummyDate, &dummyDate); err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, place.ID) + result, _ = repo.SelectByID(ctx, masterTx, newPlaceID) return nil }) assert.NoError(t, err) assert.NotNil(t, result.DeletedAt) + assert.Equal(t, dummyDate, result.UpdatedAt.Local()) + assert.Equal(t, dummyDate, result.DeletedAt.Local()) }) t.Run("failure_deletedAtがnil", func(t *testing.T) { @@ -161,7 +162,7 @@ func TestUpDeleteFlag(t *testing.T) { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - return repo.UpDeleteFlag(ctx, masterTx, place) + return repo.UpDeleteFlag(ctx, masterTx, newPlaceID, &dummyDate, nil) }) assert.Error(t, err) @@ -183,13 +184,11 @@ func TestDownDeleteFlag(t *testing.T) { err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) - place.ID = newPlaceID - place.DeletedAt = nil - if err = repo.DownDeleteFlag(ctx, masterTx, place); err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, newPlaceID, &dummyDate); err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, place.ID) + result, _ = repo.SelectByID(ctx, masterTx, newPlaceID) return nil }) @@ -212,8 +211,7 @@ func TestDelete(t *testing.T) { err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newPlaceID, _ := repo.Insert(ctx, masterTx, place) place.ID = newPlaceID - place.DeletedAt = &dummyDate - repo.UpDeleteFlag(ctx, masterTx, place) + repo.UpDeleteFlag(ctx, masterTx, place.ID, &dummyDate, &dummyDate) if err = repo.Delete(ctx, masterTx, place); err != nil { return err From c3a82ef30cde6e79ea17ee38978fc3655ab915fc Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 16:12:44 +0900 Subject: [PATCH 145/156] =?UTF-8?q?wishcard=20repo=E3=81=AE=E6=94=B9?= =?UTF-8?q?=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/wishcard/repository.go | 14 +- .../mysql/wishcard/repository.go | 176 +++++++++++++++++- .../mysql/wishcard/repository_test.go | 160 +++++++++++++++- 3 files changed, 327 insertions(+), 23 deletions(-) diff --git a/pkg/domain/repository/wishcard/repository.go b/pkg/domain/repository/wishcard/repository.go index 7e39dcf..2f44b16 100644 --- a/pkg/domain/repository/wishcard/repository.go +++ b/pkg/domain/repository/wishcard/repository.go @@ -2,6 +2,7 @@ package wishcard import ( "context" + "time" "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" ) @@ -9,10 +10,17 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) (int, error) Update(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error + UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string, updatedAt *time.Time) error + UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string, updatedAt *time.Time) error + UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date, updatedAt *time.Time) error + UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt, updatedAt *time.Time) error + UpdateUserID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, userID int, updatedAt *time.Time) error + UpdatePlaceID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, placeID int, updatedAt *time.Time) error + UpdateCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, categoryID int, updatedAt *time.Time) error UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error - UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error - DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error - Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error + UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt, deletedAt *time.Time) error + DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt *time.Time) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error SelectByID(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishcard.Entity, error) SelectByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishcard.EntitySlice, error) SelectByCategoryID(ctx context.Context, masterTx repository.MasterTx, categryID int) (wishcard.EntitySlice, error) diff --git a/pkg/infrastructure/mysql/wishcard/repository.go b/pkg/infrastructure/mysql/wishcard/repository.go index a1ca0a1..04814fb 100644 --- a/pkg/infrastructure/mysql/wishcard/repository.go +++ b/pkg/infrastructure/mysql/wishcard/repository.go @@ -6,6 +6,7 @@ import ( "errors" "strconv" "strings" + "time" placeEntity "wantum/pkg/domain/entity/place" userEntity "wantum/pkg/domain/entity/user" wishCardEntity "wantum/pkg/domain/entity/wishcard" @@ -92,6 +93,161 @@ func (repo *wishCardRepositoryImplement) Update(ctx context.Context, masterTx re return nil } +func (repo *wishCardRepositoryImplement) UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET activity=?, + updated_at=? + WHERE id=? + `, activity, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET description=?, + updated_at=? + WHERE id=? + `, description, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil + +} + +func (repo *wishCardRepositoryImplement) UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET date=?, + updated_at=? + WHERE id=? + `, date, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET done_at=?, + updated_at=? + WHERE id=? + `, doneAt, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdateUserID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, userID int, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET user_id=?, + updated_at=? + WHERE id=? + `, userID, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdatePlaceID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, placeID int, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET place_id=?, + updated_at=? + WHERE id=? + `, placeID, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + +func (repo *wishCardRepositoryImplement) UpdateCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, categoryID int, updatedAt *time.Time) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + _, err = tx.Exec(` + UPDATE wish_cards + SET category_id=?, + updated_at=? + WHERE id=? + `, categoryID, + updatedAt, + wishCardID, + ) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + return nil +} + func (repo *wishCardRepositoryImplement) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity, categoryID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -127,8 +283,8 @@ func (repo *wishCardRepositoryImplement) UpdateWithCategoryID(ctx context.Contex return nil } -func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { - if wishCard.DeletedAt == nil { +func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt, deletedAt *time.Time) error { + if deletedAt == nil { return werrors.Newf( errors.New("can't up delete flag. deletedAt is nil"), codes.Internal, @@ -146,9 +302,9 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste UPDATE wish_cards SET updated_at=?, deleted_at=? WHERE id=? - `, wishCard.UpdatedAt, - wishCard.DeletedAt, - wishCard.ID, + `, updatedAt, + deletedAt, + wishCardID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -157,7 +313,7 @@ func (repo *wishCardRepositoryImplement) UpDeleteFlag(ctx context.Context, maste return nil } -func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { +func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -167,9 +323,9 @@ func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, mas UPDATE wish_cards SET updated_at=?, deleted_at=? WHERE id=? - `, wishCard.UpdatedAt, + `, updatedAt, nil, - wishCard.ID, + wishCardID, ) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -178,7 +334,7 @@ func (repo *wishCardRepositoryImplement) DownDeleteFlag(ctx context.Context, mas return nil } -func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { +func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx repository.MasterTx, wishCard *wishCardEntity.Entity) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -187,7 +343,7 @@ func (repo *wishCardRepositoryImplement) Delete(ctx context.Context, masterTx re _, err = tx.Exec(` DELETE FROM wish_cards WHERE id=? and deleted_at is not null - `, wishCardID) + `, wishCard.ID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) diff --git a/pkg/infrastructure/mysql/wishcard/repository_test.go b/pkg/infrastructure/mysql/wishcard/repository_test.go index 7b41565..cfb7fd0 100644 --- a/pkg/infrastructure/mysql/wishcard/repository_test.go +++ b/pkg/infrastructure/mysql/wishcard/repository_test.go @@ -27,6 +27,10 @@ var ( dummyActivity = "sampleActivity" dummyDescription = "sampleDescription" + dummyWishCardID = 2 + dummyUserID = 1 + dummyCategoryID = 1 + dummyPlaceID = 1 ) func TestMain(m *testing.M) { @@ -143,6 +147,142 @@ func TestUpdate(t *testing.T) { }) } +func TestUpdateActivity(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateActivity(ctx, masterTx, dummyWishCardID, dummyActivity, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + }) +} + +func TestUpdateDescription(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateDescription(ctx, masterTx, dummyWishCardID, dummyDescription, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDescription, result.Description) + }) +} + +func TestUpdateDate(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateDate(ctx, masterTx, dummyWishCardID, &dummyDate, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDate, result.Date.Local()) + }) +} + +func TestUpdateDoneAt(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateDoneAt(ctx, masterTx, dummyWishCardID, &dummyDate, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDate, result.DoneAt.Local()) + }) +} + +func TestUpdateUserID(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateUserID(ctx, masterTx, dummyWishCardID, dummyUserID, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyUserID, result.Author.ID) + }) +} + +func TestUpdatePlaceID(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + var result *wishCardEntity.Entity + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdatePlaceID(ctx, masterTx, dummyWishCardID, dummyPlaceID, &dummyDate); err != nil { + return err + } + + result, _ = repo.SelectByID(ctx, masterTx, dummyWishCardID) + return nil + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyPlaceID, result.Place.ID) + }) +} + +func TestUpdateCategoryID(t *testing.T) { + t.Run("success", func(t *testing.T) { + var err error + ctx := context.Background() + + err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + if err = repo.UpdateCategoryID(ctx, masterTx, dummyWishCardID, dummyCategoryID, &dummyDate); err != nil { + return err + } + + return nil + }) + assert.NoError(t, err) + }) +} + func TestUpdateWithCategoryID(t *testing.T) { t.Run("success", func(t *testing.T) { var err error @@ -212,6 +352,7 @@ func TestUpDeleteFlag(t *testing.T) { t.Run("success", func(t *testing.T) { var err error ctx := context.Background() + _dummyDate := time.Date(2020, 10, 10, 10, 0, 0, 0, time.Local) wishCard := &wishCardEntity.Entity{ Author: &userEntity.Entity{ ID: 1, @@ -220,7 +361,7 @@ func TestUpDeleteFlag(t *testing.T) { Description: dummyDescription, Date: &dummyDate, CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, + UpdatedAt: &_dummyDate, Place: &placeEntity.Entity{ ID: 1, }, @@ -230,8 +371,7 @@ func TestUpDeleteFlag(t *testing.T) { newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID - wishCard.DeletedAt = &dummyDate - if err = repo.UpDeleteFlag(ctx, masterTx, wishCard); err != nil { + if err = repo.UpDeleteFlag(ctx, masterTx, newID, &dummyDate, &dummyDate); err != nil { return err } result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) @@ -239,6 +379,8 @@ func TestUpDeleteFlag(t *testing.T) { }) assert.NoError(t, err) assert.NotNil(t, result.DeletedAt) + assert.Equal(t, dummyDate, result.DeletedAt.Local()) + assert.Equal(t, dummyDate, result.UpdatedAt.Local()) }) t.Run("failure_deletedAtがnil", func(t *testing.T) { @@ -261,7 +403,7 @@ func TestUpDeleteFlag(t *testing.T) { newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID - err = repo.UpDeleteFlag(ctx, masterTx, wishCard) + err = repo.UpDeleteFlag(ctx, masterTx, newID, &dummyDate, nil) return err }) assert.Error(t, err) @@ -290,11 +432,10 @@ func TestDownDeleteFlag(t *testing.T) { err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) - wishCard.ID = newID - if err = repo.DownDeleteFlag(ctx, masterTx, wishCard); err != nil { + if err = repo.DownDeleteFlag(ctx, masterTx, newID, &dummyDate); err != nil { return err } - result, _ = repo.SelectByID(ctx, masterTx, wishCard.ID) + result, _ = repo.SelectByID(ctx, masterTx, newID) return nil }) assert.NoError(t, err) @@ -323,10 +464,9 @@ func TestDelete(t *testing.T) { err = txManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { newID, _ := repo.Insert(ctx, masterTx, wishCard, 1) wishCard.ID = newID - wishCard.DeletedAt = &dummyDate - repo.UpDeleteFlag(ctx, masterTx, wishCard) + repo.UpDeleteFlag(ctx, masterTx, newID, &dummyDate, &dummyDate) - if err = repo.Delete(ctx, masterTx, wishCard.ID); err != nil { + if err = repo.Delete(ctx, masterTx, wishCard); err != nil { return err } assert.NoError(t, err) From 0731cdbf25779edcddec56d83a32f6132ab42041 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 16:25:19 +0900 Subject: [PATCH 146/156] update mock repository --- .../place/mock_place/mock_repository.go | 24 ++-- .../tag/mock_tag/mock_repository.go | 25 ++-- .../mock_wish_card/mock_repository.go | 123 ++++++++++++++++-- 3 files changed, 136 insertions(+), 36 deletions(-) diff --git a/pkg/domain/repository/place/mock_place/mock_repository.go b/pkg/domain/repository/place/mock_place/mock_repository.go index fcf04e6..dba258a 100644 --- a/pkg/domain/repository/place/mock_place/mock_repository.go +++ b/pkg/domain/repository/place/mock_place/mock_repository.go @@ -80,45 +80,45 @@ func (mr *MockRepositoryMockRecorder) UpdateName(ctx, masterTx, placeID, name, u } // Delete mocks base method -func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) error { +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, masterTx, placeID) + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, place) ret0, _ := ret[0].(error) return ret0 } // Delete indicates an expected call of Delete -func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, placeID interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, place interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, placeID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, place) } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt, deletedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, place) + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, placeID, updatedAt, deletedAt) ret0, _ := ret[0].(error) return ret0 } // UpDeleteFlag indicates an expected call of UpDeleteFlag -func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, placeID, updatedAt, deletedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, place) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, placeID, updatedAt, deletedAt) } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, place *place.Entity) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, placeID int, updatedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, place) + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, placeID, updatedAt) ret0, _ := ret[0].(error) return ret0 } // DownDeleteFlag indicates an expected call of DownDeleteFlag -func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, place interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, placeID, updatedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, place) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, placeID, updatedAt) } // SelectByID mocks base method diff --git a/pkg/domain/repository/tag/mock_tag/mock_repository.go b/pkg/domain/repository/tag/mock_tag/mock_repository.go index 48ea632..89bab3c 100644 --- a/pkg/domain/repository/tag/mock_tag/mock_repository.go +++ b/pkg/domain/repository/tag/mock_tag/mock_repository.go @@ -8,6 +8,7 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + time "time" tag "wantum/pkg/domain/entity/tag" repository "wantum/pkg/domain/repository" ) @@ -51,45 +52,45 @@ func (mr *MockRepositoryMockRecorder) Insert(ctx, masterTx, tag interface{}) *go } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt, deletedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tag) + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, tagID, updatedAt, deletedAt) ret0, _ := ret[0].(error) return ret0 } // UpDeleteFlag indicates an expected call of UpDeleteFlag -func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, tagID, updatedAt, deletedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, tag) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, tagID, updatedAt, deletedAt) } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, tagID int, updatedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tag) + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, tagID, updatedAt) ret0, _ := ret[0].(error) return ret0 } // DownDeleteFlag indicates an expected call of DownDeleteFlag -func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, tag interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, tagID, updatedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, tag) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, tagID, updatedAt) } // Delete mocks base method -func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, tagID int) error { +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, tag *tag.Entity) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tagID) + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, tag) ret0, _ := ret[0].(error) return ret0 } // Delete indicates an expected call of Delete -func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tagID interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, tag interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, tagID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, tag) } // SelectByID mocks base method diff --git a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go index 73d497e..2b10050 100644 --- a/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go +++ b/pkg/domain/repository/wishcard/mock_wish_card/mock_repository.go @@ -8,6 +8,7 @@ import ( context "context" gomock "github.com/golang/mock/gomock" reflect "reflect" + time "time" wishcard "wantum/pkg/domain/entity/wishcard" repository "wantum/pkg/domain/repository" ) @@ -64,6 +65,104 @@ func (mr *MockRepositoryMockRecorder) Update(ctx, masterTx, wishCard interface{} return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockRepository)(nil).Update), ctx, masterTx, wishCard) } +// UpdateActivity mocks base method +func (m *MockRepository) UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateActivity", ctx, masterTx, wishCardID, activity, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateActivity indicates an expected call of UpdateActivity +func (mr *MockRepositoryMockRecorder) UpdateActivity(ctx, masterTx, wishCardID, activity, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateActivity", reflect.TypeOf((*MockRepository)(nil).UpdateActivity), ctx, masterTx, wishCardID, activity, updatedAt) +} + +// UpdateDescription mocks base method +func (m *MockRepository) UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDescription", ctx, masterTx, wishCardID, description, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateDescription indicates an expected call of UpdateDescription +func (mr *MockRepositoryMockRecorder) UpdateDescription(ctx, masterTx, wishCardID, description, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDescription", reflect.TypeOf((*MockRepository)(nil).UpdateDescription), ctx, masterTx, wishCardID, description, updatedAt) +} + +// UpdateDate mocks base method +func (m *MockRepository) UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDate", ctx, masterTx, wishCardID, date, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateDate indicates an expected call of UpdateDate +func (mr *MockRepositoryMockRecorder) UpdateDate(ctx, masterTx, wishCardID, date, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDate", reflect.TypeOf((*MockRepository)(nil).UpdateDate), ctx, masterTx, wishCardID, date, updatedAt) +} + +// UpdateDoneAt mocks base method +func (m *MockRepository) UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDoneAt", ctx, masterTx, wishCardID, doneAt, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateDoneAt indicates an expected call of UpdateDoneAt +func (mr *MockRepositoryMockRecorder) UpdateDoneAt(ctx, masterTx, wishCardID, doneAt, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDoneAt", reflect.TypeOf((*MockRepository)(nil).UpdateDoneAt), ctx, masterTx, wishCardID, doneAt, updatedAt) +} + +// UpdateUserID mocks base method +func (m *MockRepository) UpdateUserID(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateUserID", ctx, masterTx, wishCardID, userID, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateUserID indicates an expected call of UpdateUserID +func (mr *MockRepositoryMockRecorder) UpdateUserID(ctx, masterTx, wishCardID, userID, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateUserID", reflect.TypeOf((*MockRepository)(nil).UpdateUserID), ctx, masterTx, wishCardID, userID, updatedAt) +} + +// UpdatePlaceID mocks base method +func (m *MockRepository) UpdatePlaceID(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdatePlaceID", ctx, masterTx, wishCardID, placeID, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdatePlaceID indicates an expected call of UpdatePlaceID +func (mr *MockRepositoryMockRecorder) UpdatePlaceID(ctx, masterTx, wishCardID, placeID, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePlaceID", reflect.TypeOf((*MockRepository)(nil).UpdatePlaceID), ctx, masterTx, wishCardID, placeID, updatedAt) +} + +// UpdateCategoryID mocks base method +func (m *MockRepository) UpdateCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int, updatedAt *time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateCategoryID", ctx, masterTx, wishCardID, categoryID, updatedAt) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateCategoryID indicates an expected call of UpdateCategoryID +func (mr *MockRepositoryMockRecorder) UpdateCategoryID(ctx, masterTx, wishCardID, categoryID, updatedAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateCategoryID", reflect.TypeOf((*MockRepository)(nil).UpdateCategoryID), ctx, masterTx, wishCardID, categoryID, updatedAt) +} + // UpdateWithCategoryID mocks base method func (m *MockRepository) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity, categoryID int) error { m.ctrl.T.Helper() @@ -79,45 +178,45 @@ func (mr *MockRepositoryMockRecorder) UpdateWithCategoryID(ctx, masterTx, wishCa } // UpDeleteFlag mocks base method -func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { +func (m *MockRepository) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt, deletedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCard) + ret := m.ctrl.Call(m, "UpDeleteFlag", ctx, masterTx, wishCardID, updatedAt, deletedAt) ret0, _ := ret[0].(error) return ret0 } // UpDeleteFlag indicates an expected call of UpDeleteFlag -func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) UpDeleteFlag(ctx, masterTx, wishCardID, updatedAt, deletedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, wishCard) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpDeleteFlag", reflect.TypeOf((*MockRepository)(nil).UpDeleteFlag), ctx, masterTx, wishCardID, updatedAt, deletedAt) } // DownDeleteFlag mocks base method -func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { +func (m *MockRepository) DownDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int, updatedAt *time.Time) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCard) + ret := m.ctrl.Call(m, "DownDeleteFlag", ctx, masterTx, wishCardID, updatedAt) ret0, _ := ret[0].(error) return ret0 } // DownDeleteFlag indicates an expected call of DownDeleteFlag -func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, wishCard interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) DownDeleteFlag(ctx, masterTx, wishCardID, updatedAt interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, wishCard) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownDeleteFlag", reflect.TypeOf((*MockRepository)(nil).DownDeleteFlag), ctx, masterTx, wishCardID, updatedAt) } // Delete mocks base method -func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error { +func (m *MockRepository) Delete(ctx context.Context, masterTx repository.MasterTx, wishCard *wishcard.Entity) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCardID) + ret := m.ctrl.Call(m, "Delete", ctx, masterTx, wishCard) ret0, _ := ret[0].(error) return ret0 } // Delete indicates an expected call of Delete -func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCardID interface{}) *gomock.Call { +func (mr *MockRepositoryMockRecorder) Delete(ctx, masterTx, wishCard interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCardID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockRepository)(nil).Delete), ctx, masterTx, wishCard) } // SelectByID mocks base method From 89fe4621bf201d322c13866b1c991bbf6e582837 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 16:32:25 +0900 Subject: [PATCH 147/156] =?UTF-8?q?place.service=E3=81=AE=E5=80=8B?= =?UTF-8?q?=E5=88=A5update=E3=82=92=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/service.go | 11 ++++++++++- pkg/domain/service/place/service_test.go | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 0adef3d..99ad344 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -12,6 +12,7 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) + UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) error Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) @@ -58,6 +59,14 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac return place, nil } +func (s *service) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) error { + now := time.Now() + if err := s.placeRepository.UpdateName(ctx, masterTx, placeID, name, &now); err != nil { + return werrors.Stack(err) + } + return nil +} + func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) if err != nil { @@ -66,7 +75,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, plac now := time.Now() place.UpdatedAt = &now place.DeletedAt = &now - if err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place); err != nil { + if err = s.placeRepository.UpDeleteFlag(ctx, masterTx, place.ID, place.UpdatedAt, place.DeletedAt); err != nil { return nil, werrors.Stack(err) } return place, nil diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 8204208..998da48 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -16,6 +16,9 @@ import ( var ( masterTx repository.MasterTx dummyDate time.Time + + dummyPlaceID = 1 + dummyPlaceName = "tsushima" ) func TestMain(m *testing.M) { @@ -67,6 +70,20 @@ func TestService_Update(t *testing.T) { assert.NotNil(t, result) } +func TestService_UpdateName(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().UpdateName(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + + service := New(repo) + err := service.UpdateName(ctx, masterTx, dummyPlaceID, dummyPlaceName) + + assert.NoError(t, err) +} + func TestService_Delete(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) @@ -80,7 +97,7 @@ func TestService_Delete(t *testing.T) { } repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) repo.EXPECT().SelectByID(ctx, masterTx, dummyData.ID).Return(dummyData, nil) service := New(repo) From 1bf599ae82afce347592a1b0427d39384f3a2521 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 16:32:49 +0900 Subject: [PATCH 148/156] =?UTF-8?q?tag=20service=20=E3=81=AEdelete?= =?UTF-8?q?=E3=82=92=E6=94=B9=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/tag/service.go | 2 +- pkg/domain/service/tag/service_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/domain/service/tag/service.go b/pkg/domain/service/tag/service.go index dafd0b6..f2508af 100644 --- a/pkg/domain/service/tag/service.go +++ b/pkg/domain/service/tag/service.go @@ -51,7 +51,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, tagI now := time.Now() tag.UpdatedAt = &now tag.DeletedAt = &now - if err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag); err != nil { + if err = s.tagRepository.UpDeleteFlag(ctx, masterTx, tag.ID, tag.UpdatedAt, tag.DeletedAt); err != nil { return nil, werrors.Stack(err) } return tag, nil diff --git a/pkg/domain/service/tag/service_test.go b/pkg/domain/service/tag/service_test.go index 6e5b6e6..fcbe768 100644 --- a/pkg/domain/service/tag/service_test.go +++ b/pkg/domain/service/tag/service_test.go @@ -72,7 +72,7 @@ func TestService_Delete(t *testing.T) { defer ctrl.Finish() repo := mock_tag.NewMockRepository(ctrl) - repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + repo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyTag, nil) service := New(repo) From 19382b8d0671e89c2d3f569fc2513c8d76f4f8c5 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 17:41:02 +0900 Subject: [PATCH 149/156] =?UTF-8?q?wishcard=20service=E3=81=AEupdate?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/wishcard/service.go | 133 +++++- pkg/domain/service/wishcard/service_test.go | 447 +++++++++++++++++++- pkg/werrors/constants.go | 8 + 3 files changed, 583 insertions(+), 5 deletions(-) diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index aa8799d..e693197 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -30,6 +30,15 @@ type Service interface { GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) AddTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) DeleteTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) + + // QUESTION: returnはerrorのみ or entity含め + UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string) (*wishCardEntity.Entity, error) + UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string) (*wishCardEntity.Entity, error) + UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) + UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt *time.Time) (*wishCardEntity.Entity, error) + UpdateAuthor(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int) (*wishCardEntity.Entity, error) + UpdatePlace(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int) (*wishCardEntity.Entity, error) + UpdateCategory(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int) (*wishCardEntity.Entity, error) } type service struct { @@ -141,6 +150,124 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish return wishCard, nil } +func (s *service) UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.Activity = activity + if err := s.wishCardRepository.UpdateActivity(ctx, masterTx, wishCardID, wishCard.Activity, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.Description = description + if err := s.wishCardRepository.UpdateDescription(ctx, masterTx, wishCardID, wishCard.Description, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.Date = date + if err := s.wishCardRepository.UpdateDate(ctx, masterTx, wishCardID, wishCard.Date, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt *time.Time) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.DoneAt = doneAt + if err := s.wishCardRepository.UpdateDoneAt(ctx, masterTx, wishCardID, wishCard.DoneAt, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdateAuthor(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.Author.ID = userID + if err := s.wishCardRepository.UpdateUserID(ctx, masterTx, wishCardID, wishCard.Author.ID, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdatePlace(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + wishCard.Place.ID = placeID + if err := s.wishCardRepository.UpdatePlaceID(ctx, masterTx, wishCardID, wishCard.Place.ID, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + +func (s *service) UpdateCategory(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int) (*wishCardEntity.Entity, error) { + wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) + if err != nil { + return nil, werrors.Stack(err) + } + if wishCard == nil { + return nil, werrors.Stack(werrors.WishCardNotFound) + } + now := time.Now() + wishCard.UpdatedAt = &now + if err := s.wishCardRepository.UpdateCategoryID(ctx, masterTx, wishCardID, categoryID, wishCard.UpdatedAt); err != nil { + return nil, werrors.Stack(err) + } + return wishCard, nil +} + // WARNING: 空値があった時、元データが消滅する。 func (s *service) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { wishCard, err := s.wishCardRepository.SelectByID(ctx, masterTx, wishCardID) @@ -218,7 +345,7 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx wishCard.Place = place wishCard.Tags = tags - if err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard); err != nil { + if err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard.ID, wishCard.UpdatedAt, wishCard.DeletedAt); err != nil { return nil, werrors.Stack(err) } return wishCard, nil @@ -252,7 +379,7 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master wishCard.Author = author wishCard.Place = place wishCard.Tags = tags - if err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard); err != nil { + if err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard.ID, wishCard.UpdatedAt); err != nil { return nil, werrors.Stack(err) } return wishCard, nil @@ -272,7 +399,7 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish "could not delete this place", ) } - if err = s.wishCardRepository.Delete(ctx, masterTx, wishCardID); err != nil { + if err = s.wishCardRepository.Delete(ctx, masterTx, wishCard); err != nil { return werrors.Stack(err) } if err = s.wishCardTagRepository.DeleteByWishCardID(ctx, masterTx, wishCardID); err != nil { diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index 1168732..62ef228 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -28,6 +28,10 @@ var ( dummyDate = time.Date(2020, 9, 1, 12, 0, 0, 0, time.Local) dummyActivity = "sampleActivity" dummyDescription = "sampleDescription" + dummyWishCardID = 2 + dummyUserID = 1 + dummyPlaceID = 1 + dummyCategoryID = 1 dummyProfile = profileEntity.Entity{ UserID: 1, @@ -174,6 +178,445 @@ func TestService_Update(t *testing.T) { assert.Equal(t, dummyTags, result.Tags) } +func TestService_UpdateActivity(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: "act", + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateActivity(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateActivity(ctx, masterTx, dummyWishCardID, dummyActivity) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyActivity, result.Activity) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateActivity(ctx, masterTx, dummyWishCardID, dummyActivity) + + assert.Error(t, err) + }) +} + +func TestService_UpdateDescription(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: "desc", + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateDescription(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateDescription(ctx, masterTx, dummyWishCardID, dummyDescription) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDescription, result.Description) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateDescription(ctx, masterTx, dummyWishCardID, dummyDescription) + + assert.Error(t, err) + }) +} + +func TestService_UpdateDate(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + _dummyDate := time.Date(2020, 10, 10, 10, 0, 0, 0, time.Local) + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &_dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateDate(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateDate(ctx, masterTx, dummyWishCardID, &dummyDate) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDate, result.Date.Local()) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateDate(ctx, masterTx, dummyWishCardID, &dummyDate) + + assert.Error(t, err) + }) +} + +func TestService_UpdateDoneAt(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + _dummyDate := time.Date(2020, 10, 10, 10, 0, 0, 0, time.Local) + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &_dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateDoneAt(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateDoneAt(ctx, masterTx, dummyWishCardID, &dummyDate) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyDate, result.DoneAt.Local()) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateDoneAt(ctx, masterTx, dummyWishCardID, &dummyDate) + + assert.Error(t, err) + }) + +} + +func TestService_UpdateAuthor(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 5, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateUserID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateAuthor(ctx, masterTx, dummyWishCardID, dummyUserID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyUserID, result.Author.ID) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateAuthor(ctx, masterTx, dummyWishCardID, dummyUserID) + + assert.Error(t, err) + }) +} + +func TestService_UpdatePlace(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 5, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdatePlaceID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdatePlace(ctx, masterTx, dummyWishCardID, dummyPlaceID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Equal(t, dummyPlaceID, result.Place.ID) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdatePlace(ctx, masterTx, dummyWishCardID, dummyPlaceID) + + assert.Error(t, err) + }) + +} + +func TestService_UpdateCategory(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + dummyData := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().UpdateCategoryID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + result, err := service.UpdateCategory(ctx, masterTx, dummyWishCardID, dummyCategoryID) + + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotEqual(t, dummyDate, result.UpdatedAt) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + wcRepo := mock_wish_card.NewMockRepository(ctrl) + wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + userRepo := mock_user.NewMockRepository(ctrl) + profileRepo := mock_profile.NewMockRepository(ctrl) + placeRepo := mock_place.NewMockRepository(ctrl) + tagRepo := mock_tag.NewMockRepository(ctrl) + wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) + + service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + _, err := service.UpdateCategory(ctx, masterTx, dummyWishCardID, dummyCategoryID) + + assert.Error(t, err) + }) +} + func TestService_UpdateWithCategoryID(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) @@ -250,7 +693,7 @@ func TestService_UpDeleteFlag(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - wcRepo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) userRepo := mock_user.NewMockRepository(ctrl) userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) @@ -301,7 +744,7 @@ func TestService_DownDeleteFlag(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - wcRepo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any()).Return(nil) + wcRepo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) userRepo := mock_user.NewMockRepository(ctrl) userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) diff --git a/pkg/werrors/constants.go b/pkg/werrors/constants.go index ac5cc5b..35f3110 100644 --- a/pkg/werrors/constants.go +++ b/pkg/werrors/constants.go @@ -1,6 +1,7 @@ package werrors import ( + "fmt" "net/http" "google.golang.org/grpc/codes" @@ -31,4 +32,11 @@ var ( ErrorMessageJP: "リクエスト内容をもう一度見直してください", ErrorMessageEN: "Please check your request", } + WishCardNotFound = &WantumError{ + err: fmt.Errorf("Attempted to update non-existent data"), + GrpcErrorCode: codes.NotFound, + ErrorCode: http.StatusNotFound, + ErrorMessageJP: "存在しない「やりたいこと」です。", + ErrorMessageEN: "the wish card is not exists.", + } ) From b5de93c86f3f417fc1fe928251a3e23d2438db1f Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 17:41:39 +0900 Subject: [PATCH 150/156] =?UTF-8?q?fix=20interface=E5=AE=9A=E7=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/wishcard/service.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index e693197..e7de960 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -21,6 +21,13 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagsIDs []int) (*wishCardEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, placeID int) (*wishCardEntity.Entity, error) + UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string) (*wishCardEntity.Entity, error) + UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string) (*wishCardEntity.Entity, error) + UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) + UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt *time.Time) (*wishCardEntity.Entity, error) + UpdateAuthor(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int) (*wishCardEntity.Entity, error) + UpdatePlace(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int) (*wishCardEntity.Entity, error) + UpdateCategory(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int) (*wishCardEntity.Entity, error) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, wishCardID int) error UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx, wishCardID int) (*wishCardEntity.Entity, error) @@ -30,15 +37,6 @@ type Service interface { GetByCategoryID(ctx context.Context, masterTx repository.MasterTx, categoryID int) (wishCardEntity.EntitySlice, error) AddTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) DeleteTags(ctx context.Context, masterTx repository.MasterTx, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) - - // QUESTION: returnはerrorのみ or entity含め - UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string) (*wishCardEntity.Entity, error) - UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string) (*wishCardEntity.Entity, error) - UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date *time.Time) (*wishCardEntity.Entity, error) - UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt *time.Time) (*wishCardEntity.Entity, error) - UpdateAuthor(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int) (*wishCardEntity.Entity, error) - UpdatePlace(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int) (*wishCardEntity.Entity, error) - UpdateCategory(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int) (*wishCardEntity.Entity, error) } type service struct { From a48683ef511248de3108de84c87b064bab8904a6 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 17:49:16 +0900 Subject: [PATCH 151/156] =?UTF-8?q?place=20service=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/place/service.go | 19 ++++++++--- pkg/domain/service/place/service_test.go | 42 +++++++++++++++++++----- pkg/werrors/constants.go | 7 ++++ 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/pkg/domain/service/place/service.go b/pkg/domain/service/place/service.go index 99ad344..24c1798 100644 --- a/pkg/domain/service/place/service.go +++ b/pkg/domain/service/place/service.go @@ -12,7 +12,7 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, name string) (*placeEntity.Entity, error) Update(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) - UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) error + UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetByID(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) GetAll(ctx context.Context, masterTx repository.MasterTx) (placeEntity.EntitySlice, error) @@ -59,12 +59,21 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, plac return place, nil } -func (s *service) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) error { +func (s *service) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*placeEntity.Entity, error) { + place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) + if err != nil { + return nil, werrors.Stack(err) + } + if place == nil { + return nil, werrors.Stack(werrors.PlaceNotFound) + } now := time.Now() - if err := s.placeRepository.UpdateName(ctx, masterTx, placeID, name, &now); err != nil { - return werrors.Stack(err) + place.UpdatedAt = &now + place.Name = name + if err = s.placeRepository.UpdateName(ctx, masterTx, placeID, place.Name, place.UpdatedAt); err != nil { + return nil, werrors.Stack(err) } - return nil + return place, nil } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*placeEntity.Entity, error) { diff --git a/pkg/domain/service/place/service_test.go b/pkg/domain/service/place/service_test.go index 998da48..a34a227 100644 --- a/pkg/domain/service/place/service_test.go +++ b/pkg/domain/service/place/service_test.go @@ -71,17 +71,43 @@ func TestService_Update(t *testing.T) { } func TestService_UpdateName(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() + t.Run("success", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() - repo := mock_place.NewMockRepository(ctrl) - repo.EXPECT().UpdateName(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) + dummyData := &placeEntity.Entity{ + ID: 1, + Name: "tokyo", + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + } - service := New(repo) - err := service.UpdateName(ctx, masterTx, dummyPlaceID, dummyPlaceName) + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) + repo.EXPECT().UpdateName(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - assert.NoError(t, err) + service := New(repo) + result, err := service.UpdateName(ctx, masterTx, dummyPlaceID, dummyPlaceName) + + assert.NoError(t, err) + assert.NotEqual(t, dummyDate, result.UpdatedAt.Local()) + assert.Equal(t, dummyPlaceName, result.Name) + }) + + t.Run("failure_存在しないデータ", func(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + repo := mock_place.NewMockRepository(ctrl) + repo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) + + service := New(repo) + _, err := service.UpdateName(ctx, masterTx, dummyPlaceID, dummyPlaceName) + + assert.Error(t, err) + }) } func TestService_Delete(t *testing.T) { diff --git a/pkg/werrors/constants.go b/pkg/werrors/constants.go index 35f3110..441ccd3 100644 --- a/pkg/werrors/constants.go +++ b/pkg/werrors/constants.go @@ -39,4 +39,11 @@ var ( ErrorMessageJP: "存在しない「やりたいこと」です。", ErrorMessageEN: "the wish card is not exists.", } + PlaceNotFound = &WantumError{ + err: fmt.Errorf("Attempted to update non-existent data"), + GrpcErrorCode: codes.NotFound, + ErrorCode: http.StatusNotFound, + ErrorMessageJP: "存在しない「場所」です。", + ErrorMessageEN: "the place is not exists.", + } ) From 2ca16a32f0c03fe24b706f748e9dc52539f232b0 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 18:08:34 +0900 Subject: [PATCH 152/156] =?UTF-8?q?wish=20card=20service=E3=81=8B=E3=82=89?= =?UTF-8?q?=E4=BB=96entity=E3=81=AE=E4=BE=9D=E5=AD=98=E3=82=92=E3=81=A8?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/wishcard/service.go | 233 +---------------- pkg/domain/service/wishcard/service_test.go | 271 ++------------------ 2 files changed, 34 insertions(+), 470 deletions(-) diff --git a/pkg/domain/service/wishcard/service.go b/pkg/domain/service/wishcard/service.go index e7de960..9b9ba49 100644 --- a/pkg/domain/service/wishcard/service.go +++ b/pkg/domain/service/wishcard/service.go @@ -7,10 +7,6 @@ import ( "time" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/place" - "wantum/pkg/domain/repository/profile" - "wantum/pkg/domain/repository/tag" - "wantum/pkg/domain/repository/user" "wantum/pkg/domain/repository/wishcard" "wantum/pkg/domain/repository/wishcardtag" "wantum/pkg/werrors" @@ -40,59 +36,26 @@ type Service interface { } type service struct { - userRepository user.Repository - userProfileRepository profile.Repository wishCardRepository wishcard.Repository - placeRepository place.Repository - tagsRepository tag.Repository wishCardTagRepository wishcardtag.Repository } -func New(wcRepo wishcard.Repository, userRepo user.Repository, upRepo profile.Repository, placeRepo place.Repository, tagRepo tag.Repository, wctRepo wishcardtag.Repository) Service { +func New(wcRepo wishcard.Repository, wctRepo wishcardtag.Repository) Service { return &service{ wishCardRepository: wcRepo, - userRepository: userRepo, - userProfileRepository: upRepo, - placeRepository: placeRepo, - tagsRepository: tagRepo, wishCardTagRepository: wctRepo, } } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, activity, description string, date *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishCardEntity.Entity, error) { - // get user - author, err := s.userRepository.SelectByPK(ctx, masterTx, userID) - if err != nil { - return nil, werrors.Stack(err) - } - authorProfile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, userID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = authorProfile - - // get place - place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) - if err != nil { - return nil, werrors.Stack(err) - } - - // get tag - tags, err := s.tagsRepository.SelectByIDs(ctx, masterTx, tagIDs) - if err != nil { - return nil, werrors.Stack(err) - } now := time.Now() wishCard := &wishCardEntity.Entity{ - Author: author, Activity: activity, Description: description, Date: date, CreatedAt: &now, UpdatedAt: &now, - Place: place, - Tags: tags, } newID, err := s.wishCardRepository.Insert(ctx, masterTx, wishCard, categoryID) if err != nil { @@ -113,33 +76,16 @@ func (s *service) Update(ctx context.Context, masterTx repository.MasterTx, wish if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCardID) - if err != nil { - return nil, werrors.Stack(err) - } now := time.Now() - wishCard.Author = author // NOTE: 今後、authorの更新があるかも + wishCard.Author.ID = userID // NOTE: 今後、authorの更新があるかも wishCard.Activity = activity wishCard.Description = description wishCard.Date = date wishCard.DoneAt = doneAt - wishCard.Place = place wishCard.UpdatedAt = &now - wishCard.Tags = tags + wishCard.Place.ID = placeID + // wishCard.Tags = tags // TODO: 消す if err = s.wishCardRepository.Update(ctx, masterTx, wishCard); err != nil { return nil, werrors.Stack(err) @@ -272,33 +218,16 @@ func (s *service) UpdateWithCategoryID(ctx context.Context, masterTx repository. if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, placeID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByIDs(ctx, masterTx, tagIDs) - if err != nil { - return nil, werrors.Stack(err) - } now := time.Now() - wishCard.Author = author // NOTE: 今後、authorの更新があるかも + wishCard.Author.ID = userID // NOTE: 今後、authorの更新があるかも wishCard.Activity = activity wishCard.Description = description wishCard.Date = date wishCard.DoneAt = doneAt - wishCard.Place = place + wishCard.Place.ID = placeID wishCard.UpdatedAt = &now - wishCard.Tags = tags + // wishCard.Tags = tags // TODO: 消す if err = s.wishCardRepository.UpdateWithCategoryID(ctx, masterTx, wishCard, categoryID); err != nil { return nil, werrors.Stack(err) @@ -319,29 +248,9 @@ func (s *service) UpDeleteFlag(ctx context.Context, masterTx repository.MasterTx if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } now := time.Now() wishCard.UpdatedAt = &now wishCard.DeletedAt = &now - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags if err = s.wishCardRepository.UpDeleteFlag(ctx, masterTx, wishCard.ID, wishCard.UpdatedAt, wishCard.DeletedAt); err != nil { return nil, werrors.Stack(err) @@ -354,29 +263,10 @@ func (s *service) DownDeleteFlag(ctx context.Context, masterTx repository.Master if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } + now := time.Now() wishCard.UpdatedAt = &now wishCard.DeletedAt = nil - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags if err = s.wishCardRepository.DownDeleteFlag(ctx, masterTx, wishCard.ID, wishCard.UpdatedAt); err != nil { return nil, werrors.Stack(err) } @@ -411,58 +301,14 @@ func (s *service) GetByID(ctx context.Context, masterTx repository.MasterTx, wis if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags return wishCard, nil } func (s *service) GetByIDs(ctx context.Context, masterTx repository.MasterTx, wishCardIDs []int) (wishCardEntity.EntitySlice, error) { - wishCards, err := s.wishCardRepository.SelectByIDs(ctx, masterTx, wishCardIDs) if err != nil { return nil, werrors.Stack(err) } - // OPTIMIZE: 絶対遅い - for _, wishCard := range wishCards { - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags - } return wishCards, nil } @@ -471,29 +317,6 @@ func (s *service) GetByCategoryID(ctx context.Context, masterTx repository.Maste if err != nil { return nil, werrors.Stack(err) } - // OPTIMIZE: 絶対遅い - for _, wishCard := range wishCards { - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags - } return wishCards, nil } @@ -506,26 +329,6 @@ func (s *service) AddTags(ctx context.Context, masterTx repository.MasterTx, wis if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags return wishCard, nil } @@ -538,25 +341,5 @@ func (s *service) DeleteTags(ctx context.Context, masterTx repository.MasterTx, if err != nil { return nil, werrors.Stack(err) } - author, err := s.userRepository.SelectByPK(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - profile, err := s.userProfileRepository.SelectByUserID(ctx, masterTx, wishCard.Author.ID) - if err != nil { - return nil, werrors.Stack(err) - } - author.Profile = profile - place, err := s.placeRepository.SelectByID(ctx, masterTx, wishCard.Place.ID) - if err != nil { - return nil, werrors.Stack(err) - } - tags, err := s.tagsRepository.SelectByWishCardID(ctx, masterTx, wishCard.ID) - if err != nil { - return nil, werrors.Stack(err) - } - wishCard.Author = author - wishCard.Place = place - wishCard.Tags = tags return wishCard, nil } diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index 62ef228..cd16590 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -11,10 +11,6 @@ import ( profileEntity "wantum/pkg/domain/entity/userprofile" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" - "wantum/pkg/domain/repository/place/mock_place" - "wantum/pkg/domain/repository/profile/mock_profile" - "wantum/pkg/domain/repository/tag/mock_tag" - "wantum/pkg/domain/repository/user/mock_user" "wantum/pkg/domain/repository/wishcard/mock_wish_card" "wantum/pkg/domain/repository/wishcardtag/mock_wish_card_tag" @@ -101,30 +97,15 @@ func TestService_Create(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().Insert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(1, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.Create(ctx, masterTx, dummyActivity, dummyDescription, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 1, result.ID) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_Update(t *testing.T) { @@ -152,30 +133,15 @@ func TestService_Update(t *testing.T) { wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) wcRepo.EXPECT().Update(ctx, masterTx, gomock.Any()).Return(nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.Update(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, dummyActivity, result.Activity) assert.Equal(t, dummyDescription, result.Description) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_UpdateActivity(t *testing.T) { @@ -204,13 +170,9 @@ func TestService_UpdateActivity(t *testing.T) { wcRepo.EXPECT().UpdateActivity(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateActivity(ctx, masterTx, dummyWishCardID, dummyActivity) assert.NoError(t, err) @@ -227,13 +189,9 @@ func TestService_UpdateActivity(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateActivity(ctx, masterTx, dummyWishCardID, dummyActivity) assert.Error(t, err) @@ -266,13 +224,9 @@ func TestService_UpdateDescription(t *testing.T) { wcRepo.EXPECT().UpdateDescription(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateDescription(ctx, masterTx, dummyWishCardID, dummyDescription) assert.NoError(t, err) @@ -289,13 +243,9 @@ func TestService_UpdateDescription(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateDescription(ctx, masterTx, dummyWishCardID, dummyDescription) assert.Error(t, err) @@ -330,13 +280,9 @@ func TestService_UpdateDate(t *testing.T) { wcRepo.EXPECT().UpdateDate(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateDate(ctx, masterTx, dummyWishCardID, &dummyDate) assert.NoError(t, err) @@ -353,13 +299,9 @@ func TestService_UpdateDate(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateDate(ctx, masterTx, dummyWishCardID, &dummyDate) assert.Error(t, err) @@ -394,13 +336,9 @@ func TestService_UpdateDoneAt(t *testing.T) { wcRepo.EXPECT().UpdateDoneAt(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateDoneAt(ctx, masterTx, dummyWishCardID, &dummyDate) assert.NoError(t, err) @@ -417,13 +355,9 @@ func TestService_UpdateDoneAt(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateDoneAt(ctx, masterTx, dummyWishCardID, &dummyDate) assert.Error(t, err) @@ -457,13 +391,9 @@ func TestService_UpdateAuthor(t *testing.T) { wcRepo.EXPECT().UpdateUserID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateAuthor(ctx, masterTx, dummyWishCardID, dummyUserID) assert.NoError(t, err) @@ -480,13 +410,9 @@ func TestService_UpdateAuthor(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateAuthor(ctx, masterTx, dummyWishCardID, dummyUserID) assert.Error(t, err) @@ -519,13 +445,9 @@ func TestService_UpdatePlace(t *testing.T) { wcRepo.EXPECT().UpdatePlaceID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdatePlace(ctx, masterTx, dummyWishCardID, dummyPlaceID) assert.NoError(t, err) @@ -542,13 +464,9 @@ func TestService_UpdatePlace(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdatePlace(ctx, masterTx, dummyWishCardID, dummyPlaceID) assert.Error(t, err) @@ -582,13 +500,9 @@ func TestService_UpdateCategory(t *testing.T) { wcRepo.EXPECT().UpdateCategoryID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateCategory(ctx, masterTx, dummyWishCardID, dummyCategoryID) assert.NoError(t, err) @@ -604,13 +518,9 @@ func TestService_UpdateCategory(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(nil, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) _, err := service.UpdateCategory(ctx, masterTx, dummyWishCardID, dummyCategoryID) assert.Error(t, err) @@ -642,32 +552,17 @@ func TestService_UpdateWithCategoryID(t *testing.T) { wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) wcRepo.EXPECT().UpdateWithCategoryID(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) wctRepo.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpdateWithCategoryID(ctx, masterTx, 1, dummyActivity, dummyDescription, &dummyDate, &dummyDate, 1, 1, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, dummyActivity, result.Activity) assert.Equal(t, dummyDescription, result.Description) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_UpDeleteFlag(t *testing.T) { @@ -695,29 +590,14 @@ func TestService_UpDeleteFlag(t *testing.T) { wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) wcRepo.EXPECT().UpDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any()).Return(nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.UpDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.NotNil(t, result.DeletedAt) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_DownDeleteFlag(t *testing.T) { @@ -746,29 +626,14 @@ func TestService_DownDeleteFlag(t *testing.T) { wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) wcRepo.EXPECT().DownDeleteFlag(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.DownDeleteFlag(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.Nil(t, result.DeletedAt) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_Delete(t *testing.T) { @@ -798,15 +663,10 @@ func TestService_Delete(t *testing.T) { wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) wcRepo.EXPECT().Delete(ctx, masterTx, gomock.Any()).Return(nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) wctRepo.EXPECT().DeleteByWishCardID(ctx, masterTx, gomock.Any()).Return(nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) err := service.Delete(ctx, masterTx, 1) assert.NoError(t, err) @@ -836,13 +696,9 @@ func TestService_Delete(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - profileRepo := mock_profile.NewMockRepository(ctrl) - placeRepo := mock_place.NewMockRepository(ctrl) - tagRepo := mock_tag.NewMockRepository(ctrl) wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) err := service.Delete(ctx, masterTx, 1) assert.Error(t, err) @@ -873,28 +729,13 @@ func TestService_GetByID(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.GetByID(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_GetByIDs(t *testing.T) { @@ -938,29 +779,14 @@ func TestService_GetByIDs(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByIDs(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil).Times(2) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil).Times(2) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.GetByIDs(ctx, masterTx, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 2, len(result)) - assert.Equal(t, &dummyUser, result[0].Author) - assert.Equal(t, &dummyPlace, result[0].Place) - assert.Equal(t, dummyTags, result[0].Tags) } func TestService_GetByCategoryID(t *testing.T) { @@ -1004,29 +830,14 @@ func TestService_GetByCategoryID(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil).Times(2) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil).Times(2) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil).Times(2) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil).Times(2) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.GetByCategoryID(ctx, masterTx, 1) assert.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, 2, len(result)) - assert.Equal(t, &dummyUser, result[0].Author) - assert.Equal(t, &dummyPlace, result[0].Place) - assert.Equal(t, dummyTags, result[0].Tags) } func TestService_AddTags(t *testing.T) { @@ -1053,29 +864,14 @@ func TestService_AddTags(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) wctRepo.EXPECT().BulkInsert(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.AddTags(ctx, masterTx, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } func TestService_DeleteTags(t *testing.T) { @@ -1102,27 +898,12 @@ func TestService_DeleteTags(t *testing.T) { wcRepo := mock_wish_card.NewMockRepository(ctrl) wcRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(dummyData, nil) - userRepo := mock_user.NewMockRepository(ctrl) - userRepo.EXPECT().SelectByPK(ctx, masterTx, gomock.Any()).Return(&dummyUser, nil) - - profileRepo := mock_profile.NewMockRepository(ctrl) - profileRepo.EXPECT().SelectByUserID(ctx, masterTx, gomock.Any()).Return(&dummyProfile, nil) - - placeRepo := mock_place.NewMockRepository(ctrl) - placeRepo.EXPECT().SelectByID(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) - - tagRepo := mock_tag.NewMockRepository(ctrl) - tagRepo.EXPECT().SelectByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTags, nil) - wctRepo := mock_wish_card_tag.NewMockRepository(ctrl) wctRepo.EXPECT().DeleteByIDs(ctx, masterTx, gomock.Any(), gomock.Any()).Return(nil) - service := New(wcRepo, userRepo, profileRepo, placeRepo, tagRepo, wctRepo) + service := New(wcRepo, wctRepo) result, err := service.DeleteTags(ctx, masterTx, 1, []int{1, 2}) assert.NoError(t, err) assert.NotNil(t, result) - assert.Equal(t, &dummyUser, result.Author) - assert.Equal(t, &dummyPlace, result.Place) - assert.Equal(t, dummyTags, result.Tags) } From edf7ee38b204f1df37a7ad0121d2ef653bc619df Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 22:34:34 +0900 Subject: [PATCH 153/156] update mock --- .../service/place/mock_place/mock_service.go | 15 +++ .../wishcard/mock_wish_card/mock_service.go | 105 ++++++++++++++++++ 2 files changed, 120 insertions(+) diff --git a/pkg/domain/service/place/mock_place/mock_service.go b/pkg/domain/service/place/mock_place/mock_service.go index 2b33008..6043d89 100644 --- a/pkg/domain/service/place/mock_place/mock_service.go +++ b/pkg/domain/service/place/mock_place/mock_service.go @@ -65,6 +65,21 @@ func (mr *MockServiceMockRecorder) Update(ctx, masterTx, placeID, name interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, placeID, name) } +// UpdateName mocks base method +func (m *MockService) UpdateName(ctx context.Context, masterTx repository.MasterTx, placeID int, name string) (*place.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateName", ctx, masterTx, placeID, name) + ret0, _ := ret[0].(*place.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateName indicates an expected call of UpdateName +func (mr *MockServiceMockRecorder) UpdateName(ctx, masterTx, placeID, name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateName", reflect.TypeOf((*MockService)(nil).UpdateName), ctx, masterTx, placeID, name) +} + // Delete mocks base method func (m *MockService) Delete(ctx context.Context, masterTx repository.MasterTx, placeID int) (*place.Entity, error) { m.ctrl.T.Helper() diff --git a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go index 2bc191d..8b685ed 100644 --- a/pkg/domain/service/wishcard/mock_wish_card/mock_service.go +++ b/pkg/domain/service/wishcard/mock_wish_card/mock_service.go @@ -66,6 +66,111 @@ func (mr *MockServiceMockRecorder) Update(ctx, masterTx, wishCardID, activity, d return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockService)(nil).Update), ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, placeID) } +// UpdateActivity mocks base method +func (m *MockService) UpdateActivity(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity string) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateActivity", ctx, masterTx, wishCardID, activity) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateActivity indicates an expected call of UpdateActivity +func (mr *MockServiceMockRecorder) UpdateActivity(ctx, masterTx, wishCardID, activity interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateActivity", reflect.TypeOf((*MockService)(nil).UpdateActivity), ctx, masterTx, wishCardID, activity) +} + +// UpdateDescription mocks base method +func (m *MockService) UpdateDescription(ctx context.Context, masterTx repository.MasterTx, wishCardID int, description string) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDescription", ctx, masterTx, wishCardID, description) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDescription indicates an expected call of UpdateDescription +func (mr *MockServiceMockRecorder) UpdateDescription(ctx, masterTx, wishCardID, description interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDescription", reflect.TypeOf((*MockService)(nil).UpdateDescription), ctx, masterTx, wishCardID, description) +} + +// UpdateDate mocks base method +func (m *MockService) UpdateDate(ctx context.Context, masterTx repository.MasterTx, wishCardID int, date *time.Time) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDate", ctx, masterTx, wishCardID, date) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDate indicates an expected call of UpdateDate +func (mr *MockServiceMockRecorder) UpdateDate(ctx, masterTx, wishCardID, date interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDate", reflect.TypeOf((*MockService)(nil).UpdateDate), ctx, masterTx, wishCardID, date) +} + +// UpdateDoneAt mocks base method +func (m *MockService) UpdateDoneAt(ctx context.Context, masterTx repository.MasterTx, wishCardID int, doneAt *time.Time) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateDoneAt", ctx, masterTx, wishCardID, doneAt) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateDoneAt indicates an expected call of UpdateDoneAt +func (mr *MockServiceMockRecorder) UpdateDoneAt(ctx, masterTx, wishCardID, doneAt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateDoneAt", reflect.TypeOf((*MockService)(nil).UpdateDoneAt), ctx, masterTx, wishCardID, doneAt) +} + +// UpdateAuthor mocks base method +func (m *MockService) UpdateAuthor(ctx context.Context, masterTx repository.MasterTx, wishCardID, userID int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateAuthor", ctx, masterTx, wishCardID, userID) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateAuthor indicates an expected call of UpdateAuthor +func (mr *MockServiceMockRecorder) UpdateAuthor(ctx, masterTx, wishCardID, userID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAuthor", reflect.TypeOf((*MockService)(nil).UpdateAuthor), ctx, masterTx, wishCardID, userID) +} + +// UpdatePlace mocks base method +func (m *MockService) UpdatePlace(ctx context.Context, masterTx repository.MasterTx, wishCardID, placeID int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdatePlace", ctx, masterTx, wishCardID, placeID) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdatePlace indicates an expected call of UpdatePlace +func (mr *MockServiceMockRecorder) UpdatePlace(ctx, masterTx, wishCardID, placeID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePlace", reflect.TypeOf((*MockService)(nil).UpdatePlace), ctx, masterTx, wishCardID, placeID) +} + +// UpdateCategory mocks base method +func (m *MockService) UpdateCategory(ctx context.Context, masterTx repository.MasterTx, wishCardID, categoryID int) (*wishcard.Entity, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateCategory", ctx, masterTx, wishCardID, categoryID) + ret0, _ := ret[0].(*wishcard.Entity) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateCategory indicates an expected call of UpdateCategory +func (mr *MockServiceMockRecorder) UpdateCategory(ctx, masterTx, wishCardID, categoryID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateCategory", reflect.TypeOf((*MockService)(nil).UpdateCategory), ctx, masterTx, wishCardID, categoryID) +} + // UpdateWithCategoryID mocks base method func (m *MockService) UpdateWithCategoryID(ctx context.Context, masterTx repository.MasterTx, wishCardID int, activity, description string, date, doneAt *time.Time, userID, categoryID, placeID int, tagIDs []int) (*wishcard.Entity, error) { m.ctrl.T.Helper() From 285e81ce26e6984ab6acece1e12444f67ad511d4 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 22:34:47 +0900 Subject: [PATCH 154/156] =?UTF-8?q?interactor=E3=81=AA=E3=81=8A=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishcard/interactor.go | 228 +++++++++++++-- pkg/api/usecase/wishcard/interactor_test.go | 304 +++++++++++++------- 2 files changed, 415 insertions(+), 117 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 7940fa0..284d09b 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -6,11 +6,17 @@ import ( "fmt" "net/http" "time" + + placeEntity "wantum/pkg/domain/entity/place" tagEntity "wantum/pkg/domain/entity/tag" + userEntity "wantum/pkg/domain/entity/user" + profileEntity "wantum/pkg/domain/entity/userprofile" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place" + "wantum/pkg/domain/service/profile" "wantum/pkg/domain/service/tag" + "wantum/pkg/domain/service/user" "wantum/pkg/domain/service/wishcard" "wantum/pkg/tlog" "wantum/pkg/werrors" @@ -35,19 +41,26 @@ type Interactor interface { type interactor struct { masterTxManager repository.MasterTxManager wishCardService wishcard.Service + userService user.Service + profileService profile.Service tagService tag.Service placeService place.Service } -func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, tagService tag.Service, placeService place.Service) Interactor { +func New(masterTxManager repository.MasterTxManager, wishCardService wishcard.Service, userService user.Service, profileService profile.Service, tagService tag.Service, placeService place.Service) Interactor { return &interactor{ masterTxManager: masterTxManager, wishCardService: wishCardService, + userService: userService, + profileService: profileService, tagService: tagService, placeService: placeService, } } +// TODO: 先に取得した値ボンボン詰め込んで大丈夫か...? +// TODO: upd系の編集権限があるか + func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID int, activity, description, place string, date *time.Time, tags []string) (*wishCardEntity.Entity, error) { // validation var err error @@ -74,12 +87,30 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i // create new entity var newWishCard *wishCardEntity.Entity + _author := &userEntity.Entity{} + _profile := &profileEntity.Entity{} + _place := &placeEntity.Entity{} + _tags := tagEntity.EntitySlice{} err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - place, err := i.placeService.Create(ctx, masterTx, place) + _author, err = i.userService.GetByPK(ctx, masterTx, userID) + if err != nil { + return werrors.Stack(err) + } + if _author == nil { + return werrors.Stack(werrors.UserNotFound) + } + _profile, err = i.profileService.GetByUserID(ctx, masterTx, _author.ID) + if err != nil { + return werrors.Stack(err) + } + + _place, err = i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } + + // TODO: きたない tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity @@ -93,10 +124,13 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i return werrors.Stack(err) } } + _tags = append(_tags, tag) tagIDs = append(tagIDs, tag.ID) } - newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, userID, categoryID, place.ID, tagIDs) + // TODO: カテゴリが存在するか確認する + + newWishCard, err = i.wishCardService.Create(ctx, masterTx, activity, description, date, _author.ID, categoryID, _place.ID, tagIDs) if err != nil { return werrors.Stack(err) } @@ -106,6 +140,10 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i if err != nil { return nil, werrors.Stack(err) } + newWishCard.Author = _author + newWishCard.Author.Profile = _profile + newWishCard.Place = _place + newWishCard.Tags = _tags return newWishCard, nil } @@ -133,12 +171,29 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI } var wishCard *wishCardEntity.Entity + _author := &userEntity.Entity{} + _profile := &profileEntity.Entity{} + _place := &placeEntity.Entity{} + _tags := tagEntity.EntitySlice{} err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - place, err := i.placeService.Create(ctx, masterTx, place) + _author, err = i.userService.GetByPK(ctx, masterTx, userID) + if err != nil { + return werrors.Stack(err) + } + if _author == nil { + return werrors.Stack(werrors.UserNotFound) + } + _profile, err = i.profileService.GetByUserID(ctx, masterTx, _author.ID) + if err != nil { + return werrors.Stack(err) + } + + _place, err = i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } + tagIDs := make([]int, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity @@ -152,9 +207,11 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI return werrors.Stack(err) } } + _tags = append(_tags, tag) tagIDs = append(tagIDs, tag.ID) } - wishCard, err = i.wishCardService.UpdateWithCategoryID(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, place.ID, tagIDs) + + wishCard, err = i.wishCardService.UpdateWithCategoryID(ctx, masterTx, wishCardID, activity, description, date, doneAt, userID, categoryID, _place.ID, tagIDs) if err != nil { return werrors.Stack(err) } @@ -163,6 +220,10 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI if err != nil { return nil, werrors.Stack(err) } + wishCard.Author = _author + wishCard.Author.Profile = _profile + wishCard.Place = _place + wishCard.Tags = _tags return wishCard, nil } @@ -183,17 +244,42 @@ func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) err func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) { var wishCard *wishCardEntity.Entity + _author := &userEntity.Entity{} + _profile := &profileEntity.Entity{} + _place := &placeEntity.Entity{} + _tags := tagEntity.EntitySlice{} var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { return werrors.Stack(err) } + _author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + _profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + _place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + _tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } return nil }) if err != nil { return nil, werrors.Stack(err) } + wishCard.Author = _author + wishCard.Author.Profile = _profile + wishCard.Place = _place + wishCard.Tags = _tags return wishCard, nil } @@ -205,6 +291,26 @@ func (i *interactor) GetByCategoryID(ctx context.Context, categoryID int) (wishC if err != nil { return werrors.Stack(err) } + // OPTIMIZE: でら遅い...? + for _, wishCard := range wishCards { + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } + } return nil }) if err != nil { @@ -220,13 +326,26 @@ func (i *interactor) UpdateActivity(ctx context.Context, userID, wishCardID int, return nil, werrors.Stack(err) } - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + wishCard, err = i.wishCardService.UpdateActivity(ctx, masterTx, wishCardID, activity) + if err != nil { + return werrors.Stack(err) + } + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) if err != nil { return werrors.Stack(err) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, activity, wishCard.Description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } @@ -246,13 +365,26 @@ func (i *interactor) UpdateDescription(ctx context.Context, userID, wishCardID i return nil, werrors.Stack(err) } - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + wishCard, err = i.wishCardService.UpdateDescription(ctx, masterTx, wishCardID, description) + if err != nil { + return werrors.Stack(err) + } + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) if err != nil { return werrors.Stack(err) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } @@ -271,18 +403,27 @@ func (i *interactor) UpdatePlace(ctx context.Context, userID, wishCardID int, pl return nil, werrors.Stack(err) } - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - place, err := i.placeService.Create(ctx, masterTx, place) + wishCard.Place, err = i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } - wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + wishCard, err = i.wishCardService.UpdatePlace(ctx, masterTx, wishCardID, wishCard.Place.ID) if err != nil { return werrors.Stack(err) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, wishCard.Description, wishCard.Date, wishCard.DoneAt, wishCard.Author.ID, place.ID) + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } @@ -301,13 +442,26 @@ func (i *interactor) UpdateDate(ctx context.Context, userID, wishCardID int, dat return nil, werrors.Stack(err) } - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) + wishCard, err = i.wishCardService.UpdateDate(ctx, masterTx, wishCardID, date) if err != nil { return werrors.Stack(err) } - wishCard, err = i.wishCardService.Update(ctx, masterTx, wishCardID, wishCard.Activity, wishCard.Description, date, wishCard.DoneAt, wishCard.Author.ID, wishCard.Place.ID) + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } @@ -320,7 +474,7 @@ func (i *interactor) UpdateDate(ctx context.Context, userID, wishCardID int, dat } func (i *interactor) AddTags(ctx context.Context, userID, wishCardID int, tags []string) (*wishCardEntity.Entity, error) { - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { // create or get tagIDs @@ -344,6 +498,23 @@ func (i *interactor) AddTags(ctx context.Context, userID, wishCardID int, tags [ if err != nil { return werrors.Stack(err) } + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } return nil }) if err != nil { @@ -353,7 +524,7 @@ func (i *interactor) AddTags(ctx context.Context, userID, wishCardID int, tags [ } func (i *interactor) DeleteTags(ctx context.Context, userID, wishCardID int, tagIDs []int) (*wishCardEntity.Entity, error) { - var wishCard *wishCardEntity.Entity + var wishCard = new(wishCardEntity.Entity) var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { // delete relation @@ -361,6 +532,23 @@ func (i *interactor) DeleteTags(ctx context.Context, userID, wishCardID int, tag if err != nil { return werrors.Stack(err) } + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + // QUESTION: author == nilだった時? + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + if err != nil { + return werrors.Stack(err) + } + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + if err != nil { + return werrors.Stack(err) + } return nil }) if err != nil { diff --git a/pkg/api/usecase/wishcard/interactor_test.go b/pkg/api/usecase/wishcard/interactor_test.go index 2783ad1..c1197a5 100644 --- a/pkg/api/usecase/wishcard/interactor_test.go +++ b/pkg/api/usecase/wishcard/interactor_test.go @@ -14,7 +14,9 @@ import ( wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place/mock_place" + "wantum/pkg/domain/service/profile/mock_profile" "wantum/pkg/domain/service/tag/mock_tag" + "wantum/pkg/domain/service/user/mock_user" "wantum/pkg/domain/service/wishcard/mock_wish_card" "github.com/golang/mock/gomock" @@ -32,7 +34,7 @@ var ( dummyTagName2 = "dummyTag2" dummyPlaceName = "dummyPlace" - dummyProfile = profileEntity.Entity{ + dummyProfile = &profileEntity.Entity{ UserID: 1, Name: "dummyName", Thumbnail: "dummyThumbnail", @@ -45,7 +47,7 @@ var ( DeletedAt: &dummyDate, } - dummyUser = userEntity.Entity{ + dummyUser = &userEntity.Entity{ ID: 1, AuthID: "dummyID", UserName: "dummyUserName", @@ -53,10 +55,9 @@ var ( CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: &dummyDate, - Profile: &dummyProfile, } - dummyTag1 = tagEntity.Entity{ + dummyTag1 = &tagEntity.Entity{ ID: 1, Name: dummyTagName1, CreatedAt: &dummyDate, @@ -64,7 +65,7 @@ var ( DeletedAt: &dummyDate, } - dummyTag2 = tagEntity.Entity{ + dummyTag2 = &tagEntity.Entity{ ID: 2, Name: dummyTagName2, CreatedAt: &dummyDate, @@ -73,30 +74,17 @@ var ( } dummyTagSlice = tagEntity.EntitySlice{ - &dummyTag1, - &dummyTag2, + dummyTag1, + dummyTag2, } - dummyPlace = placeEntity.Entity{ + dummyPlace = &placeEntity.Entity{ ID: 1, Name: dummyPlaceName, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, } - - dummyWishCard = wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, - Activity: dummyActivity, - Description: dummyDescription, - Date: &dummyDate, - DoneAt: nil, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - Place: &dummyPlace, - Tags: dummyTagSlice, - } ) func TestMain(m *testing.M) { @@ -119,18 +107,34 @@ func TestInteractor_CreateNewWishCard(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + } + + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().Create(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(dummyTag1, nil) tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) - tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(dummyTag2, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) tags := []string{dummyTagName1, dummyTagName2} result, err := interactor.CreateNewWishCard(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, tags) @@ -155,9 +159,8 @@ func TestInteractor_UpdateWishCardWithCategoryID(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ + dummyWishCard := &wishCardEntity.Entity{ ID: 1, - Author: &dummyUser, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -165,22 +168,26 @@ func TestInteractor_UpdateWishCardWithCategoryID(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().UpdateWithCategoryID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdateWithCategoryID(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(dummyTag1, nil) tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) - tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(dummyTag2, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) tags := []string{dummyTagName1, dummyTagName2} result, err := interactor.UpdateWishCardWithCategoryID(ctx, 1, 1, dummyActivity, dummyDescription, dummyPlaceName, &dummyDate, &dummyDate, 1, tags) @@ -205,6 +212,10 @@ func TestInteractor_DeleteWishCard(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() + userService := mock_user.NewMockService(ctrl) + + profileService := mock_profile.NewMockService(ctrl) + placeService := mock_place.NewMockService(ctrl) wishCardService := mock_wish_card.NewMockService(ctrl) @@ -212,7 +223,7 @@ func TestInteractor_DeleteWishCard(t *testing.T) { tagService := mock_tag.NewMockService(ctrl) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) err := interactor.DeleteWishCardByID(ctx, 1) @@ -225,15 +236,39 @@ func TestInteractor_GetByID(t *testing.T) { ctx := context.Background() ctrl := gomock.NewController(t) defer ctrl.Finish() + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, + Activity: dummyActivity, + Description: dummyDescription, + Date: &dummyDate, + DoneAt: &dummyDate, + CreatedAt: &dummyDate, + UpdatedAt: &dummyDate, + DeletedAt: nil, + Place: &placeEntity.Entity{ + ID: 1, + }, + } + + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.GetByID(ctx, 1) @@ -256,8 +291,10 @@ func TestInteractor_GetByCategoryID(t *testing.T) { dummyWishCards := wishCardEntity.EntitySlice{ &wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -265,32 +302,44 @@ func TestInteractor_GetByCategoryID(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, }, &wishCardEntity.Entity{ - ID: 2, - Author: &dummyUser, + ID: 2, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, - DoneAt: nil, + DoneAt: &dummyDate, CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil).Times(2) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil).Times(2) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil).Times(2) wishCardService := mock_wish_card.NewMockService(ctrl) wishCardService.EXPECT().GetByCategoryID(ctx, masterTx, gomock.Any()).Return(dummyWishCards, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil).Times(2) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) wishCards, err := interactor.GetByCategoryID(ctx, 1) @@ -314,9 +363,11 @@ func TestInteractor_UpdateActivity(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -324,19 +375,27 @@ func TestInteractor_UpdateActivity(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdateActivity(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.UpdateActivity(ctx, 1, 1, dummyActivity) @@ -351,9 +410,11 @@ func TestInteractor_UpdateDescription(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -361,19 +422,27 @@ func TestInteractor_UpdateDescription(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdateDescription(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.UpdateDescription(ctx, 1, 1, dummyDescription) @@ -388,9 +457,11 @@ func TestInteractor_UpdatePlace(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -398,20 +469,27 @@ func TestInteractor_UpdatePlace(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) - placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(&dummyPlace, nil) + placeService.EXPECT().Create(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdatePlace(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.UpdatePlace(ctx, 1, 1, dummyPlaceName) @@ -426,9 +504,11 @@ func TestInteractor_UpdateDate(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -436,19 +516,27 @@ func TestInteractor_UpdateDate(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(&dummyWishCard, nil) - wishCardService.EXPECT().Update(ctx, masterTx, gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().UpdateDate(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.UpdateDate(ctx, 1, 1, &dummyDate) @@ -463,9 +551,11 @@ func TestInteractor_AddTags(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -473,21 +563,30 @@ func TestInteractor_AddTags(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().AddTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().AddTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) - tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(&dummyTag1, nil) + tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName1).Return(dummyTag1, nil) tagService.EXPECT().GetByName(ctx, masterTx, dummyTagName2).Return(nil, nil) - tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(&dummyTag2, nil) + tagService.EXPECT().Create(ctx, masterTx, dummyTagName2).Return(dummyTag2, nil) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.AddTags(ctx, 1, 1, []string{dummyTagName1, dummyTagName2}) @@ -502,9 +601,11 @@ func TestInteractor_DeleteTags(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() - dummyWishCard := wishCardEntity.Entity{ - ID: 1, - Author: &dummyUser, + dummyWishCard := &wishCardEntity.Entity{ + ID: 1, + Author: &userEntity.Entity{ + ID: 1, + }, Activity: dummyActivity, Description: dummyDescription, Date: &dummyDate, @@ -512,18 +613,27 @@ func TestInteractor_DeleteTags(t *testing.T) { CreatedAt: &dummyDate, UpdatedAt: &dummyDate, DeletedAt: nil, - Place: &dummyPlace, - Tags: dummyTagSlice, + Place: &placeEntity.Entity{ + ID: 1, + }, } + userService := mock_user.NewMockService(ctrl) + userService.EXPECT().GetByPK(ctx, masterTx, gomock.Any()).Return(dummyUser, nil) + + profileService := mock_profile.NewMockService(ctrl) + profileService.EXPECT().GetByUserID(ctx, masterTx, gomock.Any()).Return(dummyProfile, nil) + placeService := mock_place.NewMockService(ctrl) + placeService.EXPECT().GetByID(ctx, masterTx, gomock.Any()).Return(dummyPlace, nil) wishCardService := mock_wish_card.NewMockService(ctrl) - wishCardService.EXPECT().DeleteTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(&dummyWishCard, nil) + wishCardService.EXPECT().DeleteTags(ctx, masterTx, gomock.Any(), gomock.Any()).Return(dummyWishCard, nil) tagService := mock_tag.NewMockService(ctrl) + tagService.EXPECT().GetByWishCardID(ctx, masterTx, gomock.Any()).Return(dummyTagSlice, nil) - interactor := New(masterTxManager, wishCardService, tagService, placeService) + interactor := New(masterTxManager, wishCardService, userService, profileService, tagService, placeService) result, err := interactor.DeleteTags(ctx, 1, 1, []int{1, 2}) From 07cb7d6093ed2c73030b90189974d7da1f41e339 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 22:46:10 +0900 Subject: [PATCH 155/156] fix unuse variable --- pkg/domain/service/wishcard/service_test.go | 51 --------------------- 1 file changed, 51 deletions(-) diff --git a/pkg/domain/service/wishcard/service_test.go b/pkg/domain/service/wishcard/service_test.go index cd16590..fb4567e 100644 --- a/pkg/domain/service/wishcard/service_test.go +++ b/pkg/domain/service/wishcard/service_test.go @@ -6,9 +6,7 @@ import ( "testing" "time" placeEntity "wantum/pkg/domain/entity/place" - tagEntity "wantum/pkg/domain/entity/tag" userEntity "wantum/pkg/domain/entity/user" - profileEntity "wantum/pkg/domain/entity/userprofile" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/repository/wishcard/mock_wish_card" @@ -28,55 +26,6 @@ var ( dummyUserID = 1 dummyPlaceID = 1 dummyCategoryID = 1 - - dummyProfile = profileEntity.Entity{ - UserID: 1, - Name: "dummyName", - Thumbnail: "dummyThumbnail", - Bio: "dummyBio", - Gender: 1, - Phone: "12345678901", - Birth: &dummyDate, - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - - dummyUser = userEntity.Entity{ - ID: 1, - AuthID: "dummyID", - UserName: "dummyUserName", - Mail: "hogehoge@example.com", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - Profile: nil, - } - - dummyPlace = placeEntity.Entity{ - ID: 1, - Name: "dummyPlace", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - } - - dummyTags = tagEntity.EntitySlice{ - &tagEntity.Entity{ - ID: 1, - Name: "tag1", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - }, - &tagEntity.Entity{ - ID: 2, - Name: "tag2", - CreatedAt: &dummyDate, - UpdatedAt: &dummyDate, - DeletedAt: &dummyDate, - }, - } ) func TestMain(m *testing.M) { From 668db896b14c998206300e58b9f0254b3a689d83 Mon Sep 17 00:00:00 2001 From: akubi0w1 Date: Sun, 27 Sep 2020 22:56:06 +0900 Subject: [PATCH 156/156] fix interactor --- pkg/api/usecase/wishcard/interactor.go | 57 +++++++++----------------- 1 file changed, 20 insertions(+), 37 deletions(-) diff --git a/pkg/api/usecase/wishcard/interactor.go b/pkg/api/usecase/wishcard/interactor.go index 284d09b..ed48bba 100644 --- a/pkg/api/usecase/wishcard/interactor.go +++ b/pkg/api/usecase/wishcard/interactor.go @@ -7,10 +7,7 @@ import ( "net/http" "time" - placeEntity "wantum/pkg/domain/entity/place" tagEntity "wantum/pkg/domain/entity/tag" - userEntity "wantum/pkg/domain/entity/user" - profileEntity "wantum/pkg/domain/entity/userprofile" wishCardEntity "wantum/pkg/domain/entity/wishcard" "wantum/pkg/domain/repository" "wantum/pkg/domain/service/place" @@ -87,24 +84,20 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i // create new entity var newWishCard *wishCardEntity.Entity - _author := &userEntity.Entity{} - _profile := &profileEntity.Entity{} - _place := &placeEntity.Entity{} - _tags := tagEntity.EntitySlice{} err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - _author, err = i.userService.GetByPK(ctx, masterTx, userID) + _author, err := i.userService.GetByPK(ctx, masterTx, userID) if err != nil { return werrors.Stack(err) } if _author == nil { return werrors.Stack(werrors.UserNotFound) } - _profile, err = i.profileService.GetByUserID(ctx, masterTx, _author.ID) + _profile, err := i.profileService.GetByUserID(ctx, masterTx, _author.ID) if err != nil { return werrors.Stack(err) } - _place, err = i.placeService.Create(ctx, masterTx, place) + _place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) @@ -112,6 +105,7 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i // TODO: きたない tagIDs := make([]int, 0, len(tags)) + _tags := make(tagEntity.EntitySlice, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity tag, err = i.tagService.GetByName(ctx, masterTx, tagName) @@ -134,16 +128,16 @@ func (i *interactor) CreateNewWishCard(ctx context.Context, userID, categoryID i if err != nil { return werrors.Stack(err) } + newWishCard.Author = _author + newWishCard.Author.Profile = _profile + newWishCard.Place = _place + newWishCard.Tags = _tags return nil }) if err != nil { return nil, werrors.Stack(err) } - newWishCard.Author = _author - newWishCard.Author.Profile = _profile - newWishCard.Place = _place - newWishCard.Tags = _tags return newWishCard, nil } @@ -171,30 +165,27 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI } var wishCard *wishCardEntity.Entity - _author := &userEntity.Entity{} - _profile := &profileEntity.Entity{} - _place := &placeEntity.Entity{} - _tags := tagEntity.EntitySlice{} err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - _author, err = i.userService.GetByPK(ctx, masterTx, userID) + _author, err := i.userService.GetByPK(ctx, masterTx, userID) if err != nil { return werrors.Stack(err) } if _author == nil { return werrors.Stack(werrors.UserNotFound) } - _profile, err = i.profileService.GetByUserID(ctx, masterTx, _author.ID) + _profile, err := i.profileService.GetByUserID(ctx, masterTx, _author.ID) if err != nil { return werrors.Stack(err) } - _place, err = i.placeService.Create(ctx, masterTx, place) + _place, err := i.placeService.Create(ctx, masterTx, place) if err != nil { // TODO: placeがすでにあったら無限に増えてしまう return werrors.Stack(err) } tagIDs := make([]int, 0, len(tags)) + _tags := make(tagEntity.EntitySlice, 0, len(tags)) for _, tagName := range tags { var tag *tagEntity.Entity tag, err = i.tagService.GetByName(ctx, masterTx, tagName) @@ -215,15 +206,15 @@ func (i *interactor) UpdateWishCardWithCategoryID(ctx context.Context, wishCardI if err != nil { return werrors.Stack(err) } + wishCard.Author = _author + wishCard.Author.Profile = _profile + wishCard.Place = _place + wishCard.Tags = _tags return nil }) if err != nil { return nil, werrors.Stack(err) } - wishCard.Author = _author - wishCard.Author.Profile = _profile - wishCard.Place = _place - wishCard.Tags = _tags return wishCard, nil } @@ -244,30 +235,26 @@ func (i *interactor) DeleteWishCardByID(ctx context.Context, wishCardID int) err func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*wishCardEntity.Entity, error) { var wishCard *wishCardEntity.Entity - _author := &userEntity.Entity{} - _profile := &profileEntity.Entity{} - _place := &placeEntity.Entity{} - _tags := tagEntity.EntitySlice{} var err error err = i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { wishCard, err = i.wishCardService.GetByID(ctx, masterTx, wishCardID) if err != nil { return werrors.Stack(err) } - _author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) + wishCard.Author, err = i.userService.GetByPK(ctx, masterTx, wishCard.Author.ID) if err != nil { return werrors.Stack(err) } // QUESTION: author == nilだった時? - _profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) + wishCard.Author.Profile, err = i.profileService.GetByUserID(ctx, masterTx, wishCard.Author.ID) if err != nil { return werrors.Stack(err) } - _place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) + wishCard.Place, err = i.placeService.GetByID(ctx, masterTx, wishCard.Place.ID) if err != nil { return werrors.Stack(err) } - _tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) + wishCard.Tags, err = i.tagService.GetByWishCardID(ctx, masterTx, wishCard.ID) if err != nil { return werrors.Stack(err) } @@ -276,10 +263,6 @@ func (i *interactor) GetByID(ctx context.Context, wishCardID int) (*wishCardEnti if err != nil { return nil, werrors.Stack(err) } - wishCard.Author = _author - wishCard.Author.Profile = _profile - wishCard.Place = _place - wishCard.Tags = _tags return wishCard, nil }