From 6c21bd038100392929d8f28da17b2661cbace5fe Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 19 Sep 2020 19:36:26 +0900 Subject: [PATCH 01/29] =?UTF-8?q?wishboard=E3=81=AErepository=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/wishboard/entity.go | 16 +++ pkg/domain/repository/wishboard/repository.go | 13 ++ .../mysql/wishboard/repository.go | 116 ++++++++++++++++++ pkg/werrors/constants.go | 6 + 4 files changed, 151 insertions(+) create mode 100644 pkg/domain/entity/wishboard/entity.go create mode 100644 pkg/domain/repository/wishboard/repository.go create mode 100644 pkg/infrastructure/mysql/wishboard/repository.go diff --git a/pkg/domain/entity/wishboard/entity.go b/pkg/domain/entity/wishboard/entity.go new file mode 100644 index 0000000..c86aae7 --- /dev/null +++ b/pkg/domain/entity/wishboard/entity.go @@ -0,0 +1,16 @@ +package wishboard + +import "time" + +type Entity struct { + ID int + Title string + BackgroundImageUrl string + InviteUrl string + UserID int + CreatedAt *time.Time + UpdatedAt *time.Time + DeletedAt *time.Time +} + +type EntitySlice []*Entity diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go new file mode 100644 index 0000000..9b046a6 --- /dev/null +++ b/pkg/domain/repository/wishboard/repository.go @@ -0,0 +1,13 @@ +package wishboard + +import ( + "context" + "wantum/pkg/domain/entity/wishboard" + "wantum/pkg/domain/repository" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) + SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) + SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) +} diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go new file mode 100644 index 0000000..e96ac13 --- /dev/null +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -0,0 +1,116 @@ +package wishboard + +import ( + "context" + "database/sql" + "wantum/pkg/domain/entity/wishboard" + "wantum/pkg/domain/repository" + wishboardrepository "wantum/pkg/domain/repository/wishboard" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type repositoryImpliment struct { + masterTxManager repository.MasterTxManager +} + +func New(masterTxManager repository.MasterTxManager) wishboardrepository.Repository { + return &repositoryImpliment{ + masterTxManager: masterTxManager, + } +} + +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) { + 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 wish_boards( + title, background_image_url, invite_url, user_id + ) VALUES (?, ?, ?, ?) + `, b.Title, b.BackgroundImageUrl, b.InviteUrl, b.UserID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + insertID, err := result.LastInsertId() + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + b.ID = int(insertID) + + return b, nil +} + +func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.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, title, background_image_url, invite_url, user_id, created_at, updated_at, deleted_at + FROM wish_boards + WHERE id = ? + `, wishBoardID) + + b := wishboard.Entity{} + err = row.Scan( + &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt, &b.DeletedAt) + + if err != nil { + if err == sql.ErrNoRows { + return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + return &b, nil +} + +func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.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, title, background_image_url, invite_url, user_id, created_at, updated_at, deleted_at + FROM wish_boards + WHERE user_id = ? + `, userID) + if err != nil { + if err == sql.ErrNoRows { + return []*wishboard.Entity{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bs := make(wishboard.EntitySlice, 0, 4) + for rows.Next() { + b := wishboard.Entity{} + err = rows.Scan( + &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt, &b.DeletedAt) + + if err != nil { + if err == sql.ErrNoRows { + return []*wishboard.Entity{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bs = append(bs, &b) + } + + return bs, nil +} diff --git a/pkg/werrors/constants.go b/pkg/werrors/constants.go index ac5cc5b..fb541cf 100644 --- a/pkg/werrors/constants.go +++ b/pkg/werrors/constants.go @@ -25,6 +25,12 @@ var ( ErrorMessageJP: "リクエストされたユーザーはすでに削除されている可能性があります", ErrorMessageEN: "requested user is not found", } + WishBoardNotFound = &WantumError{ + GrpcErrorCode: codes.NotFound, + ErrorCode: http.StatusNotFound, + ErrorMessageJP: "リクエストされたやりたいことボードは既に削除された可能性があります", + ErrorMessageEN: "requested wish_board is not found", + } BadRequest = &WantumError{ GrpcErrorCode: codes.InvalidArgument, ErrorCode: http.StatusBadRequest, From f5e3264754410262f187fe713718954a0ece3a58 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 20 Sep 2020 18:43:38 +0900 Subject: [PATCH 02/29] =?UTF-8?q?=E3=83=89=E3=83=A1=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E5=B1=A4=E3=81=BE=E3=81=A7=E3=81=AE=E5=AE=9F=E8=A3=85=E3=81=8A?= =?UTF-8?q?=E3=82=88=E3=81=B3users=5Fwish=5Fboards=E9=96=A2=E9=80=A3?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/userwishboard/repository.go | 12 +++ pkg/domain/service/wishboard/service.go | 67 ++++++++++++++++ .../mysql/userwishboard/repository.go | 80 +++++++++++++++++++ pkg/werrors/constants.go | 8 +- 4 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 pkg/domain/repository/userwishboard/repository.go create mode 100644 pkg/domain/service/wishboard/service.go create mode 100644 pkg/infrastructure/mysql/userwishboard/repository.go diff --git a/pkg/domain/repository/userwishboard/repository.go b/pkg/domain/repository/userwishboard/repository.go new file mode 100644 index 0000000..8b31f91 --- /dev/null +++ b/pkg/domain/repository/userwishboard/repository.go @@ -0,0 +1,12 @@ +package userwishboard + +import ( + "context" + "wantum/pkg/domain/repository" +) + +type Repository interface { + Insert(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error + Select(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error +} diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go new file mode 100644 index 0000000..05fcdcf --- /dev/null +++ b/pkg/domain/service/wishboard/service.go @@ -0,0 +1,67 @@ +package wishboard + +import ( + "context" + "wantum/pkg/domain/entity/wishboard" + "wantum/pkg/domain/repository" + userwishboardrepository "wantum/pkg/domain/repository/userwishboard" + wishboardrepository "wantum/pkg/domain/repository/wishboard" + "wantum/pkg/werrors" +) + +type Service interface { + Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) + GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) + GetByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) + UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) +} + +type service struct { + wishBoardRepository wishboardrepository.Repository + userWishBoardRepository userwishboardrepository.Repository +} + +func New(wishBoardRepository wishboardrepository.Repository, userWishBoardRepository userwishboardrepository.Repository) Service { + return &service{ + wishBoardRepository: wishBoardRepository, + userWishBoardRepository: userWishBoardRepository, + } +} + +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { + newWishBoard := wishboard.Entity{ + Title: title, + BackgroundImageUrl: backgroundImageUrl, + InviteUrl: inviteUrl, + UserID: userID, + } + created, err := s.wishBoardRepository.Insert(ctx, masterTx, &newWishBoard) + if err != nil { + return nil, werrors.Stack(err) + } + return created, nil +} + +func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { + b, err := s.wishBoardRepository.SelectByPK(ctx, masterTx, wishBoardID) + if err != nil { + return nil, werrors.Stack(err) + } + return b, nil +} + +func (s *service) GetByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { + bs, err := s.wishBoardRepository.SelectByUserID(ctx, masterTx, userID) + if err != nil { + return nil, werrors.Stack(err) + } + return bs, err +} + +func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { + exists, err := s.userWishBoardRepository.Select(ctx, masterTx, userID, wishBoardID) + if err != nil { + return false, werrors.Stack(err) + } + return exists, nil +} diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go new file mode 100644 index 0000000..4837532 --- /dev/null +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -0,0 +1,80 @@ +package userwishboard + +import ( + "context" + "database/sql" + "wantum/pkg/domain/repository" + "wantum/pkg/domain/repository/userwishboard" + "wantum/pkg/infrastructure/mysql" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type repositoryImpliment struct { + masterTxManager repository.MasterTxManager +} + +func New(masterTxManager repository.MasterTxManager) userwishboard.Repository { + return &repositoryImpliment{ + masterTxManager: masterTxManager, + } +} + +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID 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 users_wish_boards(user_id, wish_board_id) VALUES (?, ?); + `, userID, wishBoardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + return nil +} + +func (r *repositoryImpliment) Select(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return false, werrors.FromConstant(err, werrors.ServerError) + } + + row := tx.QueryRow(` + SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ?; + `, userID, wishBoardID) + + var i int + err = row.Scan(&i) + if err != nil { + if err == sql.ErrNoRows { + return false, nil + } + return false, werrors.FromConstant(err, werrors.ServerError) + } + + return true, nil +} + +func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID 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 users_wish_boards WHERE user_id = ? AND wish_board_id = ?; + `, userID, wishBoardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + return nil +} diff --git a/pkg/werrors/constants.go b/pkg/werrors/constants.go index fb541cf..cb27ed7 100644 --- a/pkg/werrors/constants.go +++ b/pkg/werrors/constants.go @@ -28,9 +28,15 @@ var ( WishBoardNotFound = &WantumError{ GrpcErrorCode: codes.NotFound, ErrorCode: http.StatusNotFound, - ErrorMessageJP: "リクエストされたやりたいことボードは既に削除された可能性があります", + ErrorMessageJP: "ボードは既に削除された可能性があります", ErrorMessageEN: "requested wish_board is not found", } + WishBoardPermissionDenied = &WantumError{ + GrpcErrorCode: codes.PermissionDenied, + ErrorCode: http.StatusForbidden, + ErrorMessageJP: "ボードへのアクセスが許可されていません", + ErrorMessageEN: "you don't have access to wish_board", + } BadRequest = &WantumError{ GrpcErrorCode: codes.InvalidArgument, ErrorCode: http.StatusBadRequest, From c1c1a37968b2a43a31e38d313d47a325106fb891 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 20 Sep 2020 18:52:57 +0900 Subject: [PATCH 03/29] =?UTF-8?q?create,=20get=E7=B3=BB=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E3=81=AE=E5=AE=9F=E8=A3=85=E3=81=8A=E3=82=88=E3=81=B3wishBoard?= =?UTF-8?q?Service.Create=E3=81=B8=E3=81=AE=E3=83=AA=E3=83=AC=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E9=96=A2=E9=80=A3=E3=81=AE=E5=87=A6?= =?UTF-8?q?=E7=90=86=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 131 ++++++++++++++++++++++++ pkg/domain/service/wishboard/service.go | 7 ++ 2 files changed, 138 insertions(+) create mode 100644 pkg/api/usecase/wishboard/interactor.go diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go new file mode 100644 index 0000000..fecb707 --- /dev/null +++ b/pkg/api/usecase/wishboard/interactor.go @@ -0,0 +1,131 @@ +package wishboard + +import ( + "context" + "errors" + "wantum/pkg/domain/entity/wishboard" + "wantum/pkg/domain/repository" + fileservice "wantum/pkg/domain/service/file" + userservice "wantum/pkg/domain/service/user" + wishboardservice "wantum/pkg/domain/service/wishboard" + "wantum/pkg/tlog" + "wantum/pkg/werrors" +) + +type Interactor interface { + CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) + GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) + GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) + UpdateWishBoard(ctx context.Context, wishBoardID int, title, backgroundImageUrl string) (*wishboard.Entity, error) + DeleteWishBoard(ctx context.Context, wishBoardID int) error +} + +type interactor struct { + masterTxManager repository.MasterTxManager + userService userservice.Service + wishBoardService wishboardservice.Service + fileService fileservice.Service +} + +func New(masterTxManager repository.MasterTxManager, userService userservice.Service, wishBoardService wishboardservice.Service, fileService fileservice.Service) Interactor { + return &interactor{ + masterTxManager: masterTxManager, + userService: userService, + wishBoardService: wishBoardService, + fileService: fileService, + } +} + +func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) { + if title == "" { + err := errors.New("title is empty") + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.BadRequest) + } + + var b *wishboard.Entity + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + backgroundImageUrl, err := i.fileService.UploadImageToLocalFolder(backgroundImage) + if err != nil { + return werrors.Stack(err) + } + + inviteUrl := "hoge" // karioki + + b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageUrl, inviteUrl, u.ID) + if err != nil { + return werrors.Stack(err) + } + + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + + return b, nil +} + +func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) { + var bs wishboard.EntitySlice + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + bs, err = i.wishBoardService.GetByUserID(ctx, masterTx, u.ID) + if err != nil { + return werrors.Stack(err) + } + + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + + return bs, nil +} + +func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) { + var b *wishboard.Entity + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + if !isMember { + err := errors.New("you don't belong to wish_board") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) + } + + b, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + + // やりたいことカテゴリー・カードの取得 + + return nil + }) + if err != nil { + return nil, werrors.Stack(err) + } + + return b, nil +} diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 05fcdcf..b635dda 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -35,10 +35,17 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl InviteUrl: inviteUrl, UserID: userID, } + created, err := s.wishBoardRepository.Insert(ctx, masterTx, &newWishBoard) if err != nil { return nil, werrors.Stack(err) } + + err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, created.ID) + if err != nil { + return nil, werrors.Stack(err) + } + return created, nil } From 380d7f6a2b74520e44170bcd1221948d140251e3 Mon Sep 17 00:00:00 2001 From: sana37 Date: Mon, 21 Sep 2020 18:04:16 +0900 Subject: [PATCH 04/29] =?UTF-8?q?=E3=82=BB=E3=83=9F=E3=82=B3=E3=83=AD?= =?UTF-8?q?=E3=83=B3=E3=81=AF=E4=B8=8D=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/infrastructure/mysql/userwishboard/repository.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 4837532..347252b 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -28,7 +28,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma } _, err = tx.Exec(` - INSERT INTO users_wish_boards(user_id, wish_board_id) VALUES (?, ?); + INSERT INTO users_wish_boards(user_id, wish_board_id) VALUES (?, ?) `, userID, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -46,7 +46,7 @@ func (r *repositoryImpliment) Select(ctx context.Context, masterTx repository.Ma } row := tx.QueryRow(` - SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ?; + SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) var i int @@ -69,7 +69,7 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma } _, err = tx.Exec(` - DELETE FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ?; + DELETE FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) From 63a937aebe554143d7525bebfa89d9a940565001 Mon Sep 17 00:00:00 2001 From: sana37 Date: Mon, 21 Sep 2020 18:14:09 +0900 Subject: [PATCH 05/29] =?UTF-8?q?repository.Insert=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=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/wishboard/repository.go | 2 +- pkg/domain/service/wishboard/service.go | 13 +++---------- pkg/infrastructure/mysql/wishboard/repository.go | 2 +- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index 9b046a6..bcf3060 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -7,7 +7,7 @@ import ( ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) + Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index b635dda..c08b089 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -29,24 +29,17 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { - newWishBoard := wishboard.Entity{ - Title: title, - BackgroundImageUrl: backgroundImageUrl, - InviteUrl: inviteUrl, - UserID: userID, - } - - created, err := s.wishBoardRepository.Insert(ctx, masterTx, &newWishBoard) + b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageUrl, inviteUrl, userID) if err != nil { return nil, werrors.Stack(err) } - err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, created.ID) + err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, b.ID) if err != nil { return nil, werrors.Stack(err) } - return created, nil + return b, nil } func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index e96ac13..3266e09 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -21,7 +21,7 @@ func New(masterTxManager repository.MasterTxManager) wishboardrepository.Reposit } } -func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) { +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) From bfea40ecadc98e4b8f8c94a8d946f545e75e117d Mon Sep 17 00:00:00 2001 From: sana37 Date: Tue, 22 Sep 2020 10:48:30 +0900 Subject: [PATCH 06/29] =?UTF-8?q?time=E9=96=A2=E9=80=A3=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/entity/wishboard/entity.go | 4 +-- .../mysql/wishboard/repository.go | 33 ++++++++++++------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/pkg/domain/entity/wishboard/entity.go b/pkg/domain/entity/wishboard/entity.go index c86aae7..7e4d1c1 100644 --- a/pkg/domain/entity/wishboard/entity.go +++ b/pkg/domain/entity/wishboard/entity.go @@ -8,8 +8,8 @@ type Entity struct { BackgroundImageUrl string InviteUrl string UserID int - CreatedAt *time.Time - UpdatedAt *time.Time + CreatedAt time.Time + UpdatedAt time.Time DeletedAt *time.Time } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 3266e09..ccfcb07 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -3,6 +3,7 @@ package wishboard import ( "context" "database/sql" + "time" "wantum/pkg/domain/entity/wishboard" "wantum/pkg/domain/repository" wishboardrepository "wantum/pkg/domain/repository/wishboard" @@ -28,11 +29,13 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } + now := time.Now() + result, err := tx.Exec(` INSERT INTO wish_boards( - title, background_image_url, invite_url, user_id - ) VALUES (?, ?, ?, ?) - `, b.Title, b.BackgroundImageUrl, b.InviteUrl, b.UserID) + title, background_image_url, invite_url, user_id, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?) + `, title, backgroundImageUrl, inviteUrl, userID, now, now) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) @@ -43,9 +46,17 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - b.ID = int(insertID) - return b, nil + return &wishboard.Entity{ + ID: int(insertID), + Title: title, + BackgroundImageUrl: backgroundImageUrl, + InviteUrl: inviteUrl, + UserID: userID, + CreatedAt: now, + UpdatedAt: now, + DeletedAt: nil, + }, nil } func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { @@ -57,14 +68,14 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor row := tx.QueryRow(` SELECT - id, title, background_image_url, invite_url, user_id, created_at, updated_at, deleted_at + id, title, background_image_url, invite_url, user_id, created_at, updated_at FROM wish_boards - WHERE id = ? + WHERE id = ? AND deleted_at = NULL `, wishBoardID) b := wishboard.Entity{} err = row.Scan( - &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt, &b.DeletedAt) + &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -85,9 +96,9 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos rows, err := tx.Query(` SELECT - id, title, background_image_url, invite_url, user_id, created_at, updated_at, deleted_at + id, title, background_image_url, invite_url, user_id, created_at, updated_at FROM wish_boards - WHERE user_id = ? + WHERE user_id = ? AND deleted_at = NULL `, userID) if err != nil { if err == sql.ErrNoRows { @@ -100,7 +111,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos for rows.Next() { b := wishboard.Entity{} err = rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt, &b.DeletedAt) + &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { From e77a907b07c6d559f2d292e35f812d31c67eca68 Mon Sep 17 00:00:00 2001 From: sana37 Date: Tue, 22 Sep 2020 10:49:35 +0900 Subject: [PATCH 07/29] =?UTF-8?q?wish=5Fboard=E3=81=AEupdate,=20delete?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/wishboard/repository.go | 3 + .../mysql/wishboard/repository.go | 69 +++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index bcf3060..3984bd4 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -10,4 +10,7 @@ type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) + UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error + UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index ccfcb07..ff97571 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -125,3 +125,72 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return bs, nil } + +func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + now := time.Now() + + _, err = tx.Exec(` + UPDATE wish_boards SET + title=?, + updated_at=? + WHERE id = ? + `, title, now, wishBoardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + return nil +} + +func (r *repositoryImpliment) UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + now := time.Now() + + _, err = tx.Exec(` + UPDATE wish_boards SET + background_image_url=?, + updated_at=? + WHERE id = ? + `, backgroundImageUrl, now, wishBoardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + return nil +} + +func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + now := time.Now() + + _, err = tx.Exec(` + UPDATE wish_boards SET + updated_at=?, + deleted_at=? + WHERE id = ? + `, now, now, wishBoardID) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.ServerError) + } + + return nil +} From 7ded1419a8a5edb2f1ccc23216fb992c4044c06c Mon Sep 17 00:00:00 2001 From: sana37 Date: Tue, 22 Sep 2020 11:48:44 +0900 Subject: [PATCH 08/29] =?UTF-8?q?update=E7=B3=BB=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 105 +++++++++++++++++++++++- pkg/domain/service/wishboard/service.go | 18 ++++ 2 files changed, 121 insertions(+), 2 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index fecb707..c969183 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -16,7 +16,8 @@ type Interactor interface { CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) - UpdateWishBoard(ctx context.Context, wishBoardID int, title, backgroundImageUrl string) (*wishboard.Entity, error) + UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error + UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error DeleteWishBoard(ctx context.Context, wishBoardID int) error } @@ -37,6 +38,7 @@ func New(masterTxManager repository.MasterTxManager, userService userservice.Ser } func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) { + // 空のタイトルは許容しない if title == "" { err := errors.New("title is empty") tlog.PrintErrorLogWithCtx(ctx, err) @@ -51,13 +53,16 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin return werrors.Stack(err) } + // 背景画像を保存し、URLを取得 backgroundImageUrl, err := i.fileService.UploadImageToLocalFolder(backgroundImage) if err != nil { return werrors.Stack(err) } + // TODO: 招待URLの自動生成 inviteUrl := "hoge" // karioki + // WishBoardの新規作成 b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageUrl, inviteUrl, u.ID) if err != nil { return werrors.Stack(err) @@ -81,6 +86,8 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo return werrors.Stack(err) } + // TODO: GetByMember de syuusei + // 自分が所属しているWishBoardのリストを取得 bs, err = i.wishBoardService.GetByUserID(ctx, masterTx, u.ID) if err != nil { return werrors.Stack(err) @@ -104,6 +111,7 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return werrors.Stack(err) } + // ユーザがWishBoardのメンバーでなければPermissionDenied isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, wishBoardID) if err != nil { return werrors.Stack(err) @@ -114,12 +122,13 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } + // WishBoardを取得 b, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) } - // やりたいことカテゴリー・カードの取得 + // TODO: WishCategory, WishCardの取得 return nil }) @@ -129,3 +138,95 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return b, nil } + +func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { + // 空のタイトルは許容しない + if title == "" { + err := errors.New("title is empty") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.BadRequest) + } + + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + // WishBoardが存在するか確認 + b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + + // ユーザがWishBoardのメンバーでなければPermissionDenied + isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + if err != nil { + return werrors.Stack(err) + } + if !isMember { + err := errors.New("you don't belong to wish_board") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) + } + + // タイトル更新 + err = i.wishBoardService.UpdateTitle(ctx, masterTx, b.ID, title) + if err != nil { + return werrors.Stack(err) + } + return nil + }) + if err != nil { + return werrors.Stack(err) + } + + return nil +} + +func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error { + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + // WishBoardが存在するか確認 + b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + + // ユーザがWishBoardのメンバーでなければPermissionDenied + isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + if err != nil { + return werrors.Stack(err) + } + if !isMember { + err := errors.New("you don't belong to wish_board") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) + } + + // 背景画像を保存し、URLを取得 + backgroundImageUrl, err := i.fileService.UploadImageToLocalFolder(backgroundImage) + if err != nil { + return werrors.Stack(err) + } + + // 背景画像URLの更新 + err = i.wishBoardService.UpdateBackgroundImageUrl(ctx, masterTx, b.ID, backgroundImageUrl) + if err != nil { + return werrors.Stack(err) + } + + return nil + }) + if err != nil { + return werrors.Stack(err) + } + + return nil +} diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index c08b089..7ca6476 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -14,6 +14,8 @@ type Service interface { GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) GetByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error + UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error } type service struct { @@ -65,3 +67,19 @@ func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, } return exists, nil } + +func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { + err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title) + if err != nil { + return werrors.Stack(err) + } + return nil +} + +func (s *service) UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error { + err := s.wishBoardRepository.UpdateBackgroundImageUrl(ctx, masterTx, wishBoardID, backgroundImageUrl) + if err != nil { + return werrors.Stack(err) + } + return nil +} From e8ab47330be32c2f07e12d1dc99398a397d88b93 Mon Sep 17 00:00:00 2001 From: sana37 Date: Tue, 22 Sep 2020 12:40:52 +0900 Subject: [PATCH 09/29] =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=81=AE?= =?UTF-8?q?=E3=83=9C=E3=83=BC=E3=83=89=E4=B8=80=E8=A6=A7=E3=81=AB=E3=81=A4?= =?UTF-8?q?=E3=81=84=E3=81=A6=E3=80=81=E6=89=80=E6=9C=89=E4=B8=80=E8=A6=A7?= =?UTF-8?q?=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E6=89=80=E5=B1=9E=E4=B8=80?= =?UTF-8?q?=E8=A6=A7=E3=81=B8=E3=81=A8=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 3 +- .../repository/userwishboard/repository.go | 3 +- pkg/domain/repository/wishboard/repository.go | 1 + pkg/domain/service/wishboard/service.go | 21 ++++++- .../mysql/userwishboard/repository.go | 35 ++++++++++- .../mysql/wishboard/repository.go | 58 ++++++++++++++++++- 6 files changed, 111 insertions(+), 10 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index c969183..f8f929d 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -86,9 +86,8 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo return werrors.Stack(err) } - // TODO: GetByMember de syuusei // 自分が所属しているWishBoardのリストを取得 - bs, err = i.wishBoardService.GetByUserID(ctx, masterTx, u.ID) + bs, err = i.wishBoardService.GetByMember(ctx, masterTx, u.ID) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/repository/userwishboard/repository.go b/pkg/domain/repository/userwishboard/repository.go index 8b31f91..4503809 100644 --- a/pkg/domain/repository/userwishboard/repository.go +++ b/pkg/domain/repository/userwishboard/repository.go @@ -7,6 +7,7 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error - Select(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + SelectByUserIDAndWishBoardID(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error } diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index 3984bd4..dc59d8f 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -9,6 +9,7 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) + SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 7ca6476..7304195 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -12,7 +12,8 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) - GetByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) + GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) + GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error @@ -52,7 +53,7 @@ func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wis return b, nil } -func (s *service) GetByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { +func (s *service) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { bs, err := s.wishBoardRepository.SelectByUserID(ctx, masterTx, userID) if err != nil { return nil, werrors.Stack(err) @@ -60,8 +61,22 @@ func (s *service) GetByUserID(ctx context.Context, masterTx repository.MasterTx, return bs, err } +func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { + wishBoardIDs, err := s.userWishBoardRepository.SelectByUserID(ctx, masterTx, userID) + if err != nil { + return nil, werrors.Stack(err) + } + + bs, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) + if err != nil { + return nil, werrors.Stack(err) + } + + return bs, nil +} + func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { - exists, err := s.userWishBoardRepository.Select(ctx, masterTx, userID, wishBoardID) + exists, err := s.userWishBoardRepository.SelectByUserIDAndWishBoardID(ctx, masterTx, userID, wishBoardID) if err != nil { return false, werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 347252b..65b6ca4 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -38,7 +38,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil } -func (r *repositoryImpliment) Select(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { +func (r *repositoryImpliment) SelectByUserIDAndWishBoardID(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -61,6 +61,39 @@ func (r *repositoryImpliment) Select(ctx context.Context, masterTx repository.Ma return true, nil } +func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, 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 wish_board_id FROM users_wish_boards WHERE user_id = ? + `, userID) + if err != nil { + if err == sql.ErrNoRows { + return []int{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bis := make([]int, 0, 4) + for rows.Next() { + var bi int + if err := rows.Scan(&bi); err != nil { + if err == sql.ErrNoRows { + return []int{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bis = append(bis, bi) + } + + return bis, nil +} + func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index ff97571..cefbf0f 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -1,8 +1,10 @@ package wishboard import ( + "bytes" "context" "database/sql" + "strconv" "time" "wantum/pkg/domain/entity/wishboard" "wantum/pkg/domain/repository" @@ -70,7 +72,7 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at FROM wish_boards - WHERE id = ? AND deleted_at = NULL + WHERE id = ? AND deleted_at IS NULL `, wishBoardID) b := wishboard.Entity{} @@ -87,6 +89,56 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor return &b, nil } +func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) { + tx, err := mysql.ExtractTx(masterTx) + if err != nil { + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + var buf bytes.Buffer + for i, wishBoardID := range wishBoardIDs { + if i == 0 { + buf.WriteString(strconv.Itoa(wishBoardID)) + } else { + buf.WriteString(",") + buf.WriteString(strconv.Itoa(wishBoardID)) + } + } + + rows, err := tx.Query(` + SELECT + id, title, background_image_url, invite_url, user_id, created_at, updated_at + FROM wish_boards + WHERE id IN (` + buf.String() + + `) AND deleted_at IS NULL + `) + if err != nil { + if err == sql.ErrNoRows { + return []*wishboard.Entity{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bs := make(wishboard.EntitySlice, 0, 4) + for rows.Next() { + b := wishboard.Entity{} + err := rows.Scan( + &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + + if err != nil { + if err == sql.ErrNoRows { + return []*wishboard.Entity{}, nil + } + return nil, werrors.FromConstant(err, werrors.ServerError) + } + + bs = append(bs, &b) + } + + return bs, nil +} + func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { @@ -98,7 +150,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at FROM wish_boards - WHERE user_id = ? AND deleted_at = NULL + WHERE user_id = ? AND deleted_at IS NULL `, userID) if err != nil { if err == sql.ErrNoRows { @@ -110,7 +162,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos bs := make(wishboard.EntitySlice, 0, 4) for rows.Next() { b := wishboard.Entity{} - err = rows.Scan( + err := rows.Scan( &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { From f1f6d6ed868f84ef9b05d1a7e897c903d3f79825 Mon Sep 17 00:00:00 2001 From: sana37 Date: Tue, 22 Sep 2020 12:48:29 +0900 Subject: [PATCH 10/29] =?UTF-8?q?delete=E7=B3=BB=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 42 ++++++++++++++++++++++++- pkg/domain/service/wishboard/service.go | 9 ++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index f8f929d..220fe1c 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -18,7 +18,7 @@ type Interactor interface { GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error - DeleteWishBoard(ctx context.Context, wishBoardID int) error + DeleteWishBoard(ctx context.Context, wishBoardID int, authID string) error } type interactor struct { @@ -229,3 +229,43 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, return nil } + +func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authID string) error { + err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { + // ログイン済ユーザ情報の取得 + u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + if err != nil { + return werrors.Stack(err) + } + + // WishBoardが存在するか確認 + b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + + // ユーザがWishBoardのメンバーでなければPermissionDenied + isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + if err != nil { + return werrors.Stack(err) + } + if !isMember { + err := errors.New("you don't belong to wish_board") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) + } + + // WishBoardを削除 + err = i.wishBoardService.Delete(ctx, masterTx, b.ID) + if err != nil { + return werrors.Stack(err) + } + + return nil + }) + if err != nil { + return werrors.Stack(err) + } + + return nil +} diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 7304195..80d2c45 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -17,6 +17,7 @@ type Service interface { UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error } type service struct { @@ -98,3 +99,11 @@ func (s *service) UpdateBackgroundImageUrl(ctx context.Context, masterTx reposit } return nil } + +func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { + err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardID) + if err != nil { + return werrors.Stack(err) + } + return nil +} From a53b1e0eb7440c2142ae8fb927a80bb79277106f Mon Sep 17 00:00:00 2001 From: sana37 Date: Wed, 23 Sep 2020 14:27:07 +0900 Subject: [PATCH 11/29] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/wishboard/service.go | 10 ++++++++ .../mysql/userwishboard/repository.go | 9 +++++++ .../mysql/wishboard/repository.go | 25 +++++++++++++++++-- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 80d2c45..a5a2191 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -33,11 +33,13 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { + // WishBoardの新規作成 b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageUrl, inviteUrl, userID) if err != nil { return nil, werrors.Stack(err) } + // UserとWishBoardのリレーションを作成 err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, b.ID) if err != nil { return nil, werrors.Stack(err) @@ -47,6 +49,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl } func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { + // WishBoardを主キーから取得 b, err := s.wishBoardRepository.SelectByPK(ctx, masterTx, wishBoardID) if err != nil { return nil, werrors.Stack(err) @@ -55,6 +58,7 @@ func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wis } func (s *service) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { + // Userが所有するWishBoard一覧を取得(招待されているだけのものは含まない) bs, err := s.wishBoardRepository.SelectByUserID(ctx, masterTx, userID) if err != nil { return nil, werrors.Stack(err) @@ -63,11 +67,13 @@ func (s *service) GetByOwner(ctx context.Context, masterTx repository.MasterTx, } func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { + // Userが所属するWishBoardのIDをリストで取得(招待されているものも含む) wishBoardIDs, err := s.userWishBoardRepository.SelectByUserID(ctx, masterTx, userID) if err != nil { return nil, werrors.Stack(err) } + // IDのリストをもとにWishBoardを複数取得 bs, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) if err != nil { return nil, werrors.Stack(err) @@ -77,6 +83,7 @@ func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, } func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { + // UserとWishBoardの間にリレーションはあるか? exists, err := s.userWishBoardRepository.SelectByUserIDAndWishBoardID(ctx, masterTx, userID, wishBoardID) if err != nil { return false, werrors.Stack(err) @@ -85,6 +92,7 @@ func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, } func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { + // WishBoardのタイトルを更新 err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title) if err != nil { return werrors.Stack(err) @@ -93,6 +101,7 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, } func (s *service) UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error { + // WishBoardの背景画像URLを更新 err := s.wishBoardRepository.UpdateBackgroundImageUrl(ctx, masterTx, wishBoardID, backgroundImageUrl) if err != nil { return werrors.Stack(err) @@ -101,6 +110,7 @@ func (s *service) UpdateBackgroundImageUrl(ctx context.Context, masterTx reposit } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { + // WishBoardの削除 err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 65b6ca4..264ee17 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -27,6 +27,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } + // 新規レコード追加 _, err = tx.Exec(` INSERT INTO users_wish_boards(user_id, wish_board_id) VALUES (?, ?) `, userID, wishBoardID) @@ -45,6 +46,7 @@ func (r *repositoryImpliment) SelectByUserIDAndWishBoardID(ctx context.Context, return false, werrors.FromConstant(err, werrors.ServerError) } + // userIDとwishBoardIDで検索 row := tx.QueryRow(` SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) @@ -53,11 +55,13 @@ func (r *repositoryImpliment) SelectByUserIDAndWishBoardID(ctx context.Context, err = row.Scan(&i) if err != nil { if err == sql.ErrNoRows { + // 見つからなければfalseを返す return false, nil } return false, werrors.FromConstant(err, werrors.ServerError) } + // 見つかればtrueを返す return true, nil } @@ -68,11 +72,13 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return nil, werrors.FromConstant(err, werrors.ServerError) } + // userIDで検索 rows, err := tx.Query(` SELECT wish_board_id FROM users_wish_boards WHERE user_id = ? `, userID) if err != nil { if err == sql.ErrNoRows { + // 見つからなければ空リストを返す return []int{}, nil } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -81,8 +87,10 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos bis := make([]int, 0, 4) for rows.Next() { var bi int + // wishBoardIDを取得 if err := rows.Scan(&bi); err != nil { if err == sql.ErrNoRows { + // 見つからなければ空リストを返す return []int{}, nil } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -101,6 +109,7 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } + // レコードの削除 _, err = tx.Exec(` DELETE FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index cefbf0f..5ba09cb 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -31,8 +31,10 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } + // 現在時刻を取得 now := time.Now() + // WishBoardの新規レコード追加 result, err := tx.Exec(` INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at @@ -43,6 +45,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } + // 新規作成されたWishBoardのIDを取得 insertID, err := result.LastInsertId() if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -68,6 +71,7 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor return nil, werrors.FromConstant(err, werrors.ServerError) } + // 主キーで検索(削除されていないもののみ) row := tx.QueryRow(` SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at @@ -75,12 +79,14 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor WHERE id = ? AND deleted_at IS NULL `, wishBoardID) + // Entityにコピー b := wishboard.Entity{} err = row.Scan( &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { + // 見つからなかったらNOT FOUNDエラー return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -96,6 +102,7 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } + // IDのリストからSQL文のIN句用の文字列を作成 var buf bytes.Buffer for i, wishBoardID := range wishBoardIDs { if i == 0 { @@ -106,6 +113,7 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito } } + // 主キーで複数検索(削除されていないもののみ) rows, err := tx.Query(` SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at @@ -115,20 +123,23 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito `) if err != nil { if err == sql.ErrNoRows { - return []*wishboard.Entity{}, nil + // 見つからなかったらNOT FOUNDエラー + return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) } bs := make(wishboard.EntitySlice, 0, 4) for rows.Next() { + // Entityへのコピー b := wishboard.Entity{} err := rows.Scan( &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { - return []*wishboard.Entity{}, nil + // 見つからなかったらNOT FOUNDエラー + return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) } @@ -146,6 +157,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return nil, werrors.FromConstant(err, werrors.ServerError) } + // ユーザIDで検索 rows, err := tx.Query(` SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at @@ -154,6 +166,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos `, userID) if err != nil { if err == sql.ErrNoRows { + // 見つからなかったから空リストを返す return []*wishboard.Entity{}, nil } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -161,12 +174,14 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos bs := make(wishboard.EntitySlice, 0, 4) for rows.Next() { + // Entityへのコピー b := wishboard.Entity{} err := rows.Scan( &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { + // 見つからなかったから空リストを返す return []*wishboard.Entity{}, nil } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -185,8 +200,10 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito return werrors.FromConstant(err, werrors.ServerError) } + // 現在時刻を取得 now := time.Now() + // titleとupdated_atを更新 _, err = tx.Exec(` UPDATE wish_boards SET title=?, @@ -208,8 +225,10 @@ func (r *repositoryImpliment) UpdateBackgroundImageUrl(ctx context.Context, mast return werrors.FromConstant(err, werrors.ServerError) } + // 現在時刻を取得 now := time.Now() + // back_ground_urlとupdated_atを更新 _, err = tx.Exec(` UPDATE wish_boards SET background_image_url=?, @@ -231,8 +250,10 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } + // 現在時刻を取得 now := time.Now() + // updated_atとdeleted_atに現在時刻をセット _, err = tx.Exec(` UPDATE wish_boards SET updated_at=?, From 97048bf43210daa5a7ca57b068e42fb5b7d11f3b Mon Sep 17 00:00:00 2001 From: sana37 Date: Wed, 23 Sep 2020 14:59:20 +0900 Subject: [PATCH 12/29] =?UTF-8?q?Url=20->=20URL=20=E3=81=B8=E3=81=A8?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/golang/go/wiki/CodeReviewComments#initialisms --- pkg/api/usecase/wishboard/interactor.go | 10 +++++----- pkg/domain/entity/wishboard/entity.go | 4 ++-- pkg/domain/repository/wishboard/repository.go | 4 ++-- pkg/domain/service/wishboard/service.go | 12 ++++++------ .../mysql/wishboard/repository.go | 18 +++++++++--------- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 220fe1c..85e1e5c 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -54,16 +54,16 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin } // 背景画像を保存し、URLを取得 - backgroundImageUrl, err := i.fileService.UploadImageToLocalFolder(backgroundImage) + backgroundImageURL, err := i.fileService.UploadImageToLocalFolder(backgroundImage) if err != nil { return werrors.Stack(err) } // TODO: 招待URLの自動生成 - inviteUrl := "hoge" // karioki + inviteURL := "hoge" // karioki // WishBoardの新規作成 - b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageUrl, inviteUrl, u.ID) + b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, u.ID) if err != nil { return werrors.Stack(err) } @@ -210,13 +210,13 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, } // 背景画像を保存し、URLを取得 - backgroundImageUrl, err := i.fileService.UploadImageToLocalFolder(backgroundImage) + backgroundImageURL, err := i.fileService.UploadImageToLocalFolder(backgroundImage) if err != nil { return werrors.Stack(err) } // 背景画像URLの更新 - err = i.wishBoardService.UpdateBackgroundImageUrl(ctx, masterTx, b.ID, backgroundImageUrl) + err = i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, b.ID, backgroundImageURL) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/entity/wishboard/entity.go b/pkg/domain/entity/wishboard/entity.go index 7e4d1c1..4195587 100644 --- a/pkg/domain/entity/wishboard/entity.go +++ b/pkg/domain/entity/wishboard/entity.go @@ -5,8 +5,8 @@ import "time" type Entity struct { ID int Title string - BackgroundImageUrl string - InviteUrl string + BackgroundImageURL string + InviteURL string UserID int CreatedAt time.Time UpdatedAt time.Time diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index dc59d8f..8e1b552 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -7,11 +7,11 @@ import ( ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) + Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error - UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error + UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index a5a2191..427e3a9 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -10,13 +10,13 @@ import ( ) type Service interface { - Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) + Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error - UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error + UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error } @@ -32,9 +32,9 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi } } -func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { +func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { // WishBoardの新規作成 - b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageUrl, inviteUrl, userID) + b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageURL, inviteURL, userID) if err != nil { return nil, werrors.Stack(err) } @@ -100,9 +100,9 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, return nil } -func (s *service) UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error { +func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { // WishBoardの背景画像URLを更新 - err := s.wishBoardRepository.UpdateBackgroundImageUrl(ctx, masterTx, wishBoardID, backgroundImageUrl) + err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL) if err != nil { return werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 5ba09cb..f5b6f39 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -24,7 +24,7 @@ func New(masterTxManager repository.MasterTxManager) wishboardrepository.Reposit } } -func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageUrl, inviteUrl string, userID int) (*wishboard.Entity, error) { +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -39,7 +39,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?) - `, title, backgroundImageUrl, inviteUrl, userID, now, now) + `, title, backgroundImageURL, inviteURL, userID, now, now) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) @@ -55,8 +55,8 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return &wishboard.Entity{ ID: int(insertID), Title: title, - BackgroundImageUrl: backgroundImageUrl, - InviteUrl: inviteUrl, + BackgroundImageURL: backgroundImageURL, + InviteURL: inviteURL, UserID: userID, CreatedAt: now, UpdatedAt: now, @@ -82,7 +82,7 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor // Entityにコピー b := wishboard.Entity{} err = row.Scan( - &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -134,7 +134,7 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito // Entityへのコピー b := wishboard.Entity{} err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -177,7 +177,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos // Entityへのコピー b := wishboard.Entity{} err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageUrl, &b.InviteUrl, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -218,7 +218,7 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito return nil } -func (r *repositoryImpliment) UpdateBackgroundImageUrl(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageUrl string) error { +func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -234,7 +234,7 @@ func (r *repositoryImpliment) UpdateBackgroundImageUrl(ctx context.Context, mast background_image_url=?, updated_at=? WHERE id = ? - `, backgroundImageUrl, now, wishBoardID) + `, backgroundImageURL, now, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) From af285f72c23378c41005d77a49ec59768db5bb49 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 26 Sep 2020 13:30:14 +0900 Subject: [PATCH 13/29] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=83=90=E3=83=AA=E3=83=87=E3=83=BC=E3=82=B7=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=92=E9=96=A2=E6=95=B0=E3=81=A8=E3=81=97=E3=81=A6?= =?UTF-8?q?=E5=88=87=E3=82=8A=E5=87=BA=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 27 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 85e1e5c..f778bba 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -38,11 +38,9 @@ func New(masterTxManager repository.MasterTxManager, userService userservice.Ser } func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) { - // 空のタイトルは許容しない - if title == "" { - err := errors.New("title is empty") - tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.BadRequest) + // タイトルのバリデーション + if err := validateTitle(ctx, title); err != nil { + return nil, werrors.Stack(err) } var b *wishboard.Entity @@ -139,11 +137,9 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s } func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { - // 空のタイトルは許容しない - if title == "" { - err := errors.New("title is empty") - tlog.PrintErrorLogWithCtx(ctx, err) - return werrors.FromConstant(err, werrors.BadRequest) + // タイトルのバリデーション + if err := validateTitle(ctx, title); err != nil { + return werrors.Stack(err) } err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -269,3 +265,14 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return nil } + +func validateTitle(ctx context.Context, title string) error { + // 空のタイトルは許容しない + if title == "" { + err := errors.New("title is empty") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.BadRequest) + } + + return nil +} From 4bcf2c32ce6b9c061d408694e51af914067df0fa Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 26 Sep 2020 14:39:48 +0900 Subject: [PATCH 14/29] =?UTF-8?q?=E5=91=BD=E5=90=8D=E3=82=92=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/api/usecase/wishboard/interactor.go | 8 ++++---- pkg/domain/repository/userwishboard/repository.go | 2 +- pkg/domain/service/wishboard/service.go | 6 +++--- pkg/infrastructure/mysql/userwishboard/repository.go | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index f778bba..cd0ef3b 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -109,7 +109,7 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, wishBoardID) + isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, wishBoardID) if err != nil { return werrors.Stack(err) } @@ -156,7 +156,7 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } @@ -195,7 +195,7 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } @@ -241,7 +241,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.UserBelongs(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/repository/userwishboard/repository.go b/pkg/domain/repository/userwishboard/repository.go index 4503809..9f5e179 100644 --- a/pkg/domain/repository/userwishboard/repository.go +++ b/pkg/domain/repository/userwishboard/repository.go @@ -7,7 +7,7 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error - SelectByUserIDAndWishBoardID(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + Exists(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 427e3a9..304eef0 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -14,7 +14,7 @@ type Service interface { GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) - UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + IsUserMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error @@ -82,9 +82,9 @@ func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, return bs, nil } -func (s *service) UserBelongs(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { +func (s *service) IsUserMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { // UserとWishBoardの間にリレーションはあるか? - exists, err := s.userWishBoardRepository.SelectByUserIDAndWishBoardID(ctx, masterTx, userID, wishBoardID) + exists, err := s.userWishBoardRepository.Exists(ctx, masterTx, userID, wishBoardID) if err != nil { return false, werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 264ee17..6a156cf 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -39,7 +39,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil } -func (r *repositoryImpliment) SelectByUserIDAndWishBoardID(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { +func (r *repositoryImpliment) Exists(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) From 651fca9946392a6a0fbb92a1b48437250c71ecd7 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 26 Sep 2020 14:54:04 +0900 Subject: [PATCH 15/29] =?UTF-8?q?=E9=85=8D=E5=88=97=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=83=A8=E5=88=86=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/infrastructure/mysql/userwishboard/repository.go | 2 +- pkg/infrastructure/mysql/wishboard/repository.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 6a156cf..cbecc83 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -84,7 +84,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return nil, werrors.FromConstant(err, werrors.ServerError) } - bis := make([]int, 0, 4) + bis := []int{} for rows.Next() { var bi int // wishBoardIDを取得 diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index f5b6f39..63f5065 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -129,7 +129,7 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } - bs := make(wishboard.EntitySlice, 0, 4) + bs := wishboard.EntitySlice{} for rows.Next() { // Entityへのコピー b := wishboard.Entity{} @@ -172,7 +172,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return nil, werrors.FromConstant(err, werrors.ServerError) } - bs := make(wishboard.EntitySlice, 0, 4) + bs := wishboard.EntitySlice{} for rows.Next() { // Entityへのコピー b := wishboard.Entity{} From 7c0a56639546f3a8234ebc78e1fd872a9290cafa Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 26 Sep 2020 15:18:31 +0900 Subject: [PATCH 16/29] =?UTF-8?q?=E7=A9=BA=E3=83=AA=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E8=BF=94=E3=81=97=E3=81=9F=E3=81=84=E3=81=A8=E3=81=8D?= =?UTF-8?q?=E3=81=AFnil=E3=81=A7=E3=82=82=E5=90=8C=E3=81=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/service/wishboard/service.go | 5 +++++ pkg/infrastructure/mysql/userwishboard/repository.go | 4 ++-- pkg/infrastructure/mysql/wishboard/repository.go | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 304eef0..e2721bc 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -73,6 +73,11 @@ func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, return nil, werrors.Stack(err) } + // 存在しないなら空で返す + if len(wishBoardIDs) == 0 { + return nil, nil + } + // IDのリストをもとにWishBoardを複数取得 bs, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) if err != nil { diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index cbecc83..91d4244 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -79,7 +79,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos if err != nil { if err == sql.ErrNoRows { // 見つからなければ空リストを返す - return []int{}, nil + return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } @@ -91,7 +91,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos if err := rows.Scan(&bi); err != nil { if err == sql.ErrNoRows { // 見つからなければ空リストを返す - return []int{}, nil + return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 63f5065..2dd451c 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -167,7 +167,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos if err != nil { if err == sql.ErrNoRows { // 見つからなかったから空リストを返す - return []*wishboard.Entity{}, nil + return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } @@ -182,7 +182,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos if err != nil { if err == sql.ErrNoRows { // 見つからなかったから空リストを返す - return []*wishboard.Entity{}, nil + return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } From 3f420b1c899cb139f9b515e00ab758e2dd72d9da Mon Sep 17 00:00:00 2001 From: sana37 Date: Sat, 26 Sep 2020 15:45:13 +0900 Subject: [PATCH 17/29] =?UTF-8?q?=E6=99=82=E5=88=BB=E3=81=AE=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=82=92domain=E5=B1=A4=E3=81=A7=E8=A1=8C=E3=81=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/repository/wishboard/repository.go | 9 +++--- pkg/domain/service/wishboard/service.go | 21 +++++++++--- .../mysql/wishboard/repository.go | 32 ++++++------------- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index 8e1b552..cd9027f 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -2,16 +2,17 @@ package wishboard import ( "context" + "time" "wantum/pkg/domain/entity/wishboard" "wantum/pkg/domain/repository" ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) + Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int, createdAt, updatedAt time.Time) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) - UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error - UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error - Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error + UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt time.Time) error + UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt time.Time) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, updatedAt, deletedAt time.Time) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index e2721bc..36ecb88 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -2,6 +2,7 @@ package wishboard import ( "context" + "time" "wantum/pkg/domain/entity/wishboard" "wantum/pkg/domain/repository" userwishboardrepository "wantum/pkg/domain/repository/userwishboard" @@ -33,8 +34,11 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { + // 現在時刻を取得 + now := time.Now() + // WishBoardの新規作成 - b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageURL, inviteURL, userID) + b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageURL, inviteURL, userID, now, now) if err != nil { return nil, werrors.Stack(err) } @@ -97,8 +101,11 @@ func (s *service) IsUserMember(ctx context.Context, masterTx repository.MasterTx } func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { + // 現在時刻を取得 + now := time.Now() + // WishBoardのタイトルを更新 - err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title) + err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, now) if err != nil { return werrors.Stack(err) } @@ -106,8 +113,11 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, } func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { + // 現在時刻を取得 + now := time.Now() + // WishBoardの背景画像URLを更新 - err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL) + err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, now) if err != nil { return werrors.Stack(err) } @@ -115,8 +125,11 @@ func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx reposit } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { + // 現在時刻を取得 + now := time.Now() + // WishBoardの削除 - err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardID) + err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardID, now, now) if err != nil { return werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 2dd451c..af60881 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -24,22 +24,19 @@ func New(masterTxManager repository.MasterTxManager) wishboardrepository.Reposit } } -func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int, createdAt, updatedAt time.Time) (*wishboard.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) } - // 現在時刻を取得 - now := time.Now() - // WishBoardの新規レコード追加 result, err := tx.Exec(` INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?) - `, title, backgroundImageURL, inviteURL, userID, now, now) + `, title, backgroundImageURL, inviteURL, userID, createdAt, updatedAt) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) @@ -58,8 +55,8 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma BackgroundImageURL: backgroundImageURL, InviteURL: inviteURL, UserID: userID, - CreatedAt: now, - UpdatedAt: now, + CreatedAt: createdAt, + UpdatedAt: updatedAt, DeletedAt: nil, }, nil } @@ -193,23 +190,20 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return bs, nil } -func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { +func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) } - // 現在時刻を取得 - now := time.Now() - // titleとupdated_atを更新 _, err = tx.Exec(` UPDATE wish_boards SET title=?, updated_at=? WHERE id = ? - `, title, now, wishBoardID) + `, title, updatedAt, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) @@ -218,23 +212,20 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito return nil } -func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { +func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) } - // 現在時刻を取得 - now := time.Now() - // back_ground_urlとupdated_atを更新 _, err = tx.Exec(` UPDATE wish_boards SET background_image_url=?, updated_at=? WHERE id = ? - `, backgroundImageURL, now, wishBoardID) + `, backgroundImageURL, updatedAt, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) @@ -243,23 +234,20 @@ func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, mast return nil } -func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { +func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, updatedAt, deletedAt time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) } - // 現在時刻を取得 - now := time.Now() - // updated_atとdeleted_atに現在時刻をセット _, err = tx.Exec(` UPDATE wish_boards SET updated_at=?, deleted_at=? WHERE id = ? - `, now, now, wishBoardID) + `, updatedAt, deletedAt, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) From f040adda6a387d7924860f8943fd2681a5e87240 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 15:48:41 +0900 Subject: [PATCH 18/29] =?UTF-8?q?-=20datetime=E3=81=ABtime.Time=E3=81=AE?= =?UTF-8?q?=E3=83=9D=E3=82=A4=E3=83=B3=E3=82=BF=E5=9E=8B=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20-=20insert=E3=81=A8delete=E3=81=AE=E5=BC=95?= =?UTF-8?q?=E6=95=B0=E3=82=92Entity=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/wishboard/entity.go | 5 ++- pkg/domain/repository/wishboard/repository.go | 8 ++-- pkg/domain/service/wishboard/service.go | 19 +++++++-- .../mysql/wishboard/repository.go | 41 ++++++++----------- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/pkg/domain/entity/wishboard/entity.go b/pkg/domain/entity/wishboard/entity.go index 4195587..1398b41 100644 --- a/pkg/domain/entity/wishboard/entity.go +++ b/pkg/domain/entity/wishboard/entity.go @@ -8,9 +8,10 @@ type Entity struct { BackgroundImageURL string InviteURL string UserID int - CreatedAt time.Time - UpdatedAt time.Time + CreatedAt *time.Time + UpdatedAt *time.Time DeletedAt *time.Time + //WishCategories } type EntitySlice []*Entity diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index cd9027f..0b81716 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -8,11 +8,11 @@ import ( ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int, createdAt, updatedAt time.Time) (*wishboard.Entity, error) + Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) - UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt time.Time) error - UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt time.Time) error - Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, updatedAt, deletedAt time.Time) error + UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error + UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt *time.Time) error + Delete(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 36ecb88..2cfef1c 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -37,8 +37,17 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl // 現在時刻を取得 now := time.Now() + b := &wishboard.Entity{ + Title: title, + BackgroundImageURL: backgroundImageURL, + InviteURL: inviteURL, + UserID: userID, + CreatedAt: &now, + UpdatedAt: &now, + } + // WishBoardの新規作成 - b, err := s.wishBoardRepository.Insert(ctx, masterTx, title, backgroundImageURL, inviteURL, userID, now, now) + b, err := s.wishBoardRepository.Insert(ctx, masterTx, b) if err != nil { return nil, werrors.Stack(err) } @@ -105,7 +114,7 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, now := time.Now() // WishBoardのタイトルを更新 - err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, now) + err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, &now) if err != nil { return werrors.Stack(err) } @@ -117,7 +126,7 @@ func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx reposit now := time.Now() // WishBoardの背景画像URLを更新 - err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, now) + err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, &now) if err != nil { return werrors.Stack(err) } @@ -128,8 +137,10 @@ func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wish // 現在時刻を取得 now := time.Now() + b := &wishboard.Entity{ID: wishBoardID, UpdatedAt: &now, DeletedAt: &now} + // WishBoardの削除 - err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardID, now, now) + err := s.wishBoardRepository.Delete(ctx, masterTx, b) if err != nil { return werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index af60881..4a0d0cd 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -24,7 +24,7 @@ func New(masterTxManager repository.MasterTxManager) wishboardrepository.Reposit } } -func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int, createdAt, updatedAt time.Time) (*wishboard.Entity, error) { +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -36,7 +36,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?) - `, title, backgroundImageURL, inviteURL, userID, createdAt, updatedAt) + `, b.Title, b.BackgroundImageURL, b.InviteURL, b.UserID, *b.CreatedAt, *b.UpdatedAt) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) @@ -49,16 +49,9 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } - return &wishboard.Entity{ - ID: int(insertID), - Title: title, - BackgroundImageURL: backgroundImageURL, - InviteURL: inviteURL, - UserID: userID, - CreatedAt: createdAt, - UpdatedAt: updatedAt, - DeletedAt: nil, - }, nil + b.ID = int(insertID) + + return b, nil } func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { @@ -77,9 +70,9 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor `, wishBoardID) // Entityにコピー - b := wishboard.Entity{} + b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} err = row.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -129,9 +122,9 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito bs := wishboard.EntitySlice{} for rows.Next() { // Entityへのコピー - b := wishboard.Entity{} + b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -172,9 +165,9 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos bs := wishboard.EntitySlice{} for rows.Next() { // Entityへのコピー - b := wishboard.Entity{} + b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, &b.CreatedAt, &b.UpdatedAt) + &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -190,7 +183,7 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return bs, nil } -func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt time.Time) error { +func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -203,7 +196,7 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito title=?, updated_at=? WHERE id = ? - `, title, updatedAt, wishBoardID) + `, title, *updatedAt, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) @@ -212,7 +205,7 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito return nil } -func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt time.Time) error { +func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -225,7 +218,7 @@ func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, mast background_image_url=?, updated_at=? WHERE id = ? - `, backgroundImageURL, updatedAt, wishBoardID) + `, backgroundImageURL, *updatedAt, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) @@ -234,7 +227,7 @@ func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, mast return nil } -func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, updatedAt, deletedAt time.Time) error { +func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -247,7 +240,7 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma updated_at=?, deleted_at=? WHERE id = ? - `, updatedAt, deletedAt, wishBoardID) + `, *b.UpdatedAt, *b.DeletedAt, b.ID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) From ea185d938060cb39c252040da73412320316bcdd Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 15:52:02 +0900 Subject: [PATCH 19/29] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/domain/entity/wishboard/entity.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/domain/entity/wishboard/entity.go b/pkg/domain/entity/wishboard/entity.go index 1398b41..a44ac3a 100644 --- a/pkg/domain/entity/wishboard/entity.go +++ b/pkg/domain/entity/wishboard/entity.go @@ -11,7 +11,7 @@ type Entity struct { CreatedAt *time.Time UpdatedAt *time.Time DeletedAt *time.Time - //WishCategories + // WishCategories } type EntitySlice []*Entity From 72509ac9229945e46456480aa6e2b4612cf43509 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 16:29:05 +0900 Subject: [PATCH 20/29] =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89?= =?UTF-8?q?=E5=90=8D=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/api/usecase/wishboard/interactor.go | 8 ++++---- pkg/domain/service/wishboard/service.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index cd0ef3b..548c187 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -109,7 +109,7 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, wishBoardID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, wishBoardID) if err != nil { return werrors.Stack(err) } @@ -156,7 +156,7 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } @@ -195,7 +195,7 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } @@ -241,7 +241,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsUserMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 2cfef1c..517ecae 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -15,7 +15,7 @@ type Service interface { GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) - IsUserMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) + IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error @@ -100,7 +100,7 @@ func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, return bs, nil } -func (s *service) IsUserMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { +func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { // UserとWishBoardの間にリレーションはあるか? exists, err := s.userWishBoardRepository.Exists(ctx, masterTx, userID, wishBoardID) if err != nil { From 1a419a67c66e582a2ca1f3a33176c6a5de831952 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 16:34:55 +0900 Subject: [PATCH 21/29] =?UTF-8?q?GetByOwner=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=80=81GetByMember=E3=82=92GetMyBoards=E3=81=AB=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/api/usecase/wishboard/interactor.go | 2 +- pkg/domain/repository/wishboard/repository.go | 1 - pkg/domain/service/wishboard/service.go | 14 +----- .../mysql/wishboard/repository.go | 43 ------------------- 4 files changed, 3 insertions(+), 57 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 548c187..8e94dd7 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -85,7 +85,7 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo } // 自分が所属しているWishBoardのリストを取得 - bs, err = i.wishBoardService.GetByMember(ctx, masterTx, u.ID) + bs, err = i.wishBoardService.GetMyBoards(ctx, masterTx, u.ID) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index 0b81716..40eab9a 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -11,7 +11,6 @@ type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) - SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt *time.Time) error Delete(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) error diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 517ecae..4f60acb 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -13,8 +13,7 @@ import ( type Service interface { Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) - GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) - GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) + GetMyBoards(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error @@ -70,16 +69,7 @@ func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wis return b, nil } -func (s *service) GetByOwner(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { - // Userが所有するWishBoard一覧を取得(招待されているだけのものは含まない) - bs, err := s.wishBoardRepository.SelectByUserID(ctx, masterTx, userID) - if err != nil { - return nil, werrors.Stack(err) - } - return bs, err -} - -func (s *service) GetByMember(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { +func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { // Userが所属するWishBoardのIDをリストで取得(招待されているものも含む) wishBoardIDs, err := s.userWishBoardRepository.SelectByUserID(ctx, masterTx, userID) if err != nil { diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 4a0d0cd..ffb3634 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -140,49 +140,6 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return bs, nil } -func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { - tx, err := mysql.ExtractTx(masterTx) - if err != nil { - tlog.PrintErrorLogWithCtx(ctx, err) - return nil, werrors.FromConstant(err, werrors.ServerError) - } - - // ユーザIDで検索 - rows, err := tx.Query(` - SELECT - id, title, background_image_url, invite_url, user_id, created_at, updated_at - FROM wish_boards - WHERE user_id = ? AND deleted_at IS NULL - `, userID) - if err != nil { - if err == sql.ErrNoRows { - // 見つからなかったから空リストを返す - return nil, nil - } - return nil, werrors.FromConstant(err, werrors.ServerError) - } - - bs := wishboard.EntitySlice{} - for rows.Next() { - // Entityへのコピー - b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} - err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) - - if err != nil { - if err == sql.ErrNoRows { - // 見つからなかったから空リストを返す - return nil, nil - } - return nil, werrors.FromConstant(err, werrors.ServerError) - } - - bs = append(bs, &b) - } - - return bs, nil -} - func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { From 27b79297ff9d2c57e846ed5c4c4709dc2f8c6746 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 16:50:34 +0900 Subject: [PATCH 22/29] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AF=E6=9C=80=E4=BD=8E=E9=99=90=E5=BF=85=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=82=82=E3=81=AE=E3=81=AB=E9=99=90=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 16 +-------------- pkg/domain/service/wishboard/service.go | 14 ------------- .../mysql/wishboard/repository.go | 20 ++++++++----------- 3 files changed, 9 insertions(+), 41 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 8e94dd7..5c88798 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -38,14 +38,12 @@ func New(masterTxManager repository.MasterTxManager, userService userservice.Ser } func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) { - // タイトルのバリデーション if err := validateTitle(ctx, title); err != nil { return nil, werrors.Stack(err) } var b *wishboard.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -58,9 +56,8 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin } // TODO: 招待URLの自動生成 - inviteURL := "hoge" // karioki + inviteURL := "hoge" - // WishBoardの新規作成 b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, u.ID) if err != nil { return werrors.Stack(err) @@ -78,7 +75,6 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) { var bs wishboard.EntitySlice err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -102,7 +98,6 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) { var b *wishboard.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -119,7 +114,6 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - // WishBoardを取得 b, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) @@ -137,13 +131,11 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s } func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { - // タイトルのバリデーション if err := validateTitle(ctx, title); err != nil { return werrors.Stack(err) } err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -166,7 +158,6 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - // タイトル更新 err = i.wishBoardService.UpdateTitle(ctx, masterTx, b.ID, title) if err != nil { return werrors.Stack(err) @@ -182,7 +173,6 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error { err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -211,7 +201,6 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, return werrors.Stack(err) } - // 背景画像URLの更新 err = i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, b.ID, backgroundImageURL) if err != nil { return werrors.Stack(err) @@ -228,7 +217,6 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authID string) error { err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - // ログイン済ユーザ情報の取得 u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) @@ -251,7 +239,6 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - // WishBoardを削除 err = i.wishBoardService.Delete(ctx, masterTx, b.ID) if err != nil { return werrors.Stack(err) @@ -267,7 +254,6 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI } func validateTitle(ctx context.Context, title string) error { - // 空のタイトルは許容しない if title == "" { err := errors.New("title is empty") tlog.PrintErrorLogWithCtx(ctx, err) diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 4f60acb..7eccbe7 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -33,7 +33,6 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi } func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { - // 現在時刻を取得 now := time.Now() b := &wishboard.Entity{ @@ -45,13 +44,11 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl UpdatedAt: &now, } - // WishBoardの新規作成 b, err := s.wishBoardRepository.Insert(ctx, masterTx, b) if err != nil { return nil, werrors.Stack(err) } - // UserとWishBoardのリレーションを作成 err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, b.ID) if err != nil { return nil, werrors.Stack(err) @@ -61,7 +58,6 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl } func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { - // WishBoardを主キーから取得 b, err := s.wishBoardRepository.SelectByPK(ctx, masterTx, wishBoardID) if err != nil { return nil, werrors.Stack(err) @@ -70,18 +66,15 @@ func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wis } func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { - // Userが所属するWishBoardのIDをリストで取得(招待されているものも含む) wishBoardIDs, err := s.userWishBoardRepository.SelectByUserID(ctx, masterTx, userID) if err != nil { return nil, werrors.Stack(err) } - // 存在しないなら空で返す if len(wishBoardIDs) == 0 { return nil, nil } - // IDのリストをもとにWishBoardを複数取得 bs, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) if err != nil { return nil, werrors.Stack(err) @@ -91,7 +84,6 @@ func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, } func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { - // UserとWishBoardの間にリレーションはあるか? exists, err := s.userWishBoardRepository.Exists(ctx, masterTx, userID, wishBoardID) if err != nil { return false, werrors.Stack(err) @@ -100,10 +92,8 @@ func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, us } func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { - // 現在時刻を取得 now := time.Now() - // WishBoardのタイトルを更新 err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, &now) if err != nil { return werrors.Stack(err) @@ -112,10 +102,8 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, } func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { - // 現在時刻を取得 now := time.Now() - // WishBoardの背景画像URLを更新 err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, &now) if err != nil { return werrors.Stack(err) @@ -124,12 +112,10 @@ func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx reposit } func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { - // 現在時刻を取得 now := time.Now() b := &wishboard.Entity{ID: wishBoardID, UpdatedAt: &now, DeletedAt: &now} - // WishBoardの削除 err := s.wishBoardRepository.Delete(ctx, masterTx, b) if err != nil { return werrors.Stack(err) diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index ffb3634..5cf2456 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -31,7 +31,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } - // WishBoardの新規レコード追加 + // CreatedAt, UpdatedAtの実体を渡す result, err := tx.Exec(` INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at @@ -42,7 +42,6 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } - // 新規作成されたWishBoardのIDを取得 insertID, err := result.LastInsertId() if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -61,7 +60,6 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor return nil, werrors.FromConstant(err, werrors.ServerError) } - // 主キーで検索(削除されていないもののみ) row := tx.QueryRow(` SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at @@ -69,14 +67,14 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor WHERE id = ? AND deleted_at IS NULL `, wishBoardID) - // Entityにコピー + // ポインタ型のフィールドについては、あらかじめメモリ確保する b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} + // CreatedAt, UpdatedAtはポインタなので「&」はつけずにそのまま渡す err = row.Scan( &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { - // 見つからなかったらNOT FOUNDエラー return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -103,7 +101,6 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito } } - // 主キーで複数検索(削除されていないもののみ) rows, err := tx.Query(` SELECT id, title, background_image_url, invite_url, user_id, created_at, updated_at @@ -113,7 +110,6 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito `) if err != nil { if err == sql.ErrNoRows { - // 見つからなかったらNOT FOUNDエラー return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -121,14 +117,14 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito bs := wishboard.EntitySlice{} for rows.Next() { - // Entityへのコピー + // ポインタ型のフィールドについては、あらかじめメモリ確保する b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} + // CreatedAt, UpdatedAtはポインタなので「&」はつけずにそのまま渡す err := rows.Scan( &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) if err != nil { if err == sql.ErrNoRows { - // 見つからなかったらNOT FOUNDエラー return nil, werrors.FromConstant(err, werrors.WishBoardNotFound) } return nil, werrors.FromConstant(err, werrors.ServerError) @@ -147,7 +143,7 @@ func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx reposito return werrors.FromConstant(err, werrors.ServerError) } - // titleとupdated_atを更新 + // UpdatedAtの実体を渡す _, err = tx.Exec(` UPDATE wish_boards SET title=?, @@ -169,7 +165,7 @@ func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, mast return werrors.FromConstant(err, werrors.ServerError) } - // back_ground_urlとupdated_atを更新 + // UpdatedAtの実体を渡す _, err = tx.Exec(` UPDATE wish_boards SET background_image_url=?, @@ -191,7 +187,7 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } - // updated_atとdeleted_atに現在時刻をセット + // UpdatedAt, DeletedAtの実体を渡す _, err = tx.Exec(` UPDATE wish_boards SET updated_at=?, From cc13e1ad8ae275cfcafcc9baff2a9abce3ae764f Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 17:09:37 +0900 Subject: [PATCH 23/29] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92?= =?UTF-8?q?=E3=82=8F=E3=81=8B=E3=82=8A=E3=82=84=E3=81=99=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 48 +++++++++---------- pkg/domain/repository/wishboard/repository.go | 4 +- pkg/domain/service/wishboard/service.go | 20 ++++---- .../mysql/wishboard/repository.go | 28 +++++------ 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 5c88798..def779f 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -42,7 +42,7 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin return nil, werrors.Stack(err) } - var b *wishboard.Entity + var wishBoardEntity *wishboard.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { u, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { @@ -58,7 +58,7 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin // TODO: 招待URLの自動生成 inviteURL := "hoge" - b, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, u.ID) + wishBoardEntity, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, u.ID) if err != nil { return werrors.Stack(err) } @@ -69,19 +69,19 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin return nil, werrors.Stack(err) } - return b, nil + return wishBoardEntity, nil } func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) { - var bs wishboard.EntitySlice + var wishBoardEntitySlice wishboard.EntitySlice err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } // 自分が所属しているWishBoardのリストを取得 - bs, err = i.wishBoardService.GetMyBoards(ctx, masterTx, u.ID) + wishBoardEntitySlice, err = i.wishBoardService.GetMyBoards(ctx, masterTx, userEntity.ID) if err != nil { return werrors.Stack(err) } @@ -92,19 +92,19 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo return nil, werrors.Stack(err) } - return bs, nil + return wishBoardEntitySlice, nil } func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) { - var b *wishboard.Entity + var wishBoardEntity *wishboard.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, wishBoardID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, userEntity.ID, wishBoardID) if err != nil { return werrors.Stack(err) } @@ -114,7 +114,7 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - b, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + wishBoardEntity, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) } @@ -127,7 +127,7 @@ func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID s return nil, werrors.Stack(err) } - return b, nil + return wishBoardEntity, nil } func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { @@ -136,19 +136,19 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au } err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } // WishBoardが存在するか確認 - b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + wishBoardEntity, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, userEntity.ID, wishBoardEntity.ID) if err != nil { return werrors.Stack(err) } @@ -158,7 +158,7 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - err = i.wishBoardService.UpdateTitle(ctx, masterTx, b.ID, title) + err = i.wishBoardService.UpdateTitle(ctx, masterTx, wishBoardEntity.ID, title) if err != nil { return werrors.Stack(err) } @@ -173,19 +173,19 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error { err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } // WishBoardが存在するか確認 - b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + wishBoardEntity, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, userEntity.ID, wishBoardEntity.ID) if err != nil { return werrors.Stack(err) } @@ -201,7 +201,7 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, return werrors.Stack(err) } - err = i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, b.ID, backgroundImageURL) + err = i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, wishBoardEntity.ID, backgroundImageURL) if err != nil { return werrors.Stack(err) } @@ -217,19 +217,19 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authID string) error { err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } // WishBoardが存在するか確認 - b, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) + wishBoardEntity, err := i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) if err != nil { return werrors.Stack(err) } // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsMember(ctx, masterTx, u.ID, b.ID) + isMember, err := i.wishBoardService.IsMember(ctx, masterTx, userEntity.ID, wishBoardEntity.ID) if err != nil { return werrors.Stack(err) } @@ -239,7 +239,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - err = i.wishBoardService.Delete(ctx, masterTx, b.ID) + err = i.wishBoardService.Delete(ctx, masterTx, wishBoardEntity.ID) if err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/repository/wishboard/repository.go b/pkg/domain/repository/wishboard/repository.go index 40eab9a..0b09872 100644 --- a/pkg/domain/repository/wishboard/repository.go +++ b/pkg/domain/repository/wishboard/repository.go @@ -8,10 +8,10 @@ import ( ) type Repository interface { - Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) + Insert(ctx context.Context, masterTx repository.MasterTx, wishBoardEntity *wishboard.Entity) (*wishboard.Entity, error) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string, updatedAt *time.Time) error - Delete(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) error + Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardEntity *wishboard.Entity) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 7eccbe7..2882916 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -35,7 +35,7 @@ func New(wishBoardRepository wishboardrepository.Repository, userWishBoardReposi func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, title, backgroundImageURL, inviteURL string, userID int) (*wishboard.Entity, error) { now := time.Now() - b := &wishboard.Entity{ + newWishBoard := &wishboard.Entity{ Title: title, BackgroundImageURL: backgroundImageURL, InviteURL: inviteURL, @@ -44,25 +44,25 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl UpdatedAt: &now, } - b, err := s.wishBoardRepository.Insert(ctx, masterTx, b) + createdWishBoard, err := s.wishBoardRepository.Insert(ctx, masterTx, newWishBoard) if err != nil { return nil, werrors.Stack(err) } - err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, b.ID) + err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, createdWishBoard.ID) if err != nil { return nil, werrors.Stack(err) } - return b, nil + return createdWishBoard, nil } func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { - b, err := s.wishBoardRepository.SelectByPK(ctx, masterTx, wishBoardID) + wishBoardEntity, err := s.wishBoardRepository.SelectByPK(ctx, masterTx, wishBoardID) if err != nil { return nil, werrors.Stack(err) } - return b, nil + return wishBoardEntity, nil } func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { @@ -75,12 +75,12 @@ func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, return nil, nil } - bs, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) + wishBoardEntitySlice, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) if err != nil { return nil, werrors.Stack(err) } - return bs, nil + return wishBoardEntitySlice, nil } func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { @@ -114,9 +114,9 @@ func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx reposit func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { now := time.Now() - b := &wishboard.Entity{ID: wishBoardID, UpdatedAt: &now, DeletedAt: &now} + wishBoardEntity := &wishboard.Entity{ID: wishBoardID, UpdatedAt: &now, DeletedAt: &now} - err := s.wishBoardRepository.Delete(ctx, masterTx, b) + err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardEntity) if err != nil { return werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index 5cf2456..e80b3ad 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -24,7 +24,7 @@ func New(masterTxManager repository.MasterTxManager) wishboardrepository.Reposit } } -func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) (*wishboard.Entity, error) { +func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.MasterTx, wishBoardEntity *wishboard.Entity) (*wishboard.Entity, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -36,7 +36,7 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma INSERT INTO wish_boards( title, background_image_url, invite_url, user_id, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?) - `, b.Title, b.BackgroundImageURL, b.InviteURL, b.UserID, *b.CreatedAt, *b.UpdatedAt) + `, wishBoardEntity.Title, wishBoardEntity.BackgroundImageURL, wishBoardEntity.InviteURL, wishBoardEntity.UserID, *wishBoardEntity.CreatedAt, *wishBoardEntity.UpdatedAt) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return nil, werrors.FromConstant(err, werrors.ServerError) @@ -48,9 +48,9 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return nil, werrors.FromConstant(err, werrors.ServerError) } - b.ID = int(insertID) + wishBoardEntity.ID = int(insertID) - return b, nil + return wishBoardEntity, nil } func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) (*wishboard.Entity, error) { @@ -68,10 +68,10 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor `, wishBoardID) // ポインタ型のフィールドについては、あらかじめメモリ確保する - b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} + wishBoardEntity := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} // CreatedAt, UpdatedAtはポインタなので「&」はつけずにそのまま渡す err = row.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) + &wishBoardEntity.ID, &wishBoardEntity.Title, &wishBoardEntity.BackgroundImageURL, &wishBoardEntity.InviteURL, &wishBoardEntity.UserID, wishBoardEntity.CreatedAt, wishBoardEntity.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -80,7 +80,7 @@ func (r *repositoryImpliment) SelectByPK(ctx context.Context, masterTx repositor return nil, werrors.FromConstant(err, werrors.ServerError) } - return &b, nil + return &wishBoardEntity, nil } func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx repository.MasterTx, wishBoardIDs []int) (wishboard.EntitySlice, error) { @@ -115,13 +115,13 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } - bs := wishboard.EntitySlice{} + wishBoardEntitySlice := wishboard.EntitySlice{} for rows.Next() { // ポインタ型のフィールドについては、あらかじめメモリ確保する - b := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} + wishBoardEntity := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} // CreatedAt, UpdatedAtはポインタなので「&」はつけずにそのまま渡す err := rows.Scan( - &b.ID, &b.Title, &b.BackgroundImageURL, &b.InviteURL, &b.UserID, b.CreatedAt, b.UpdatedAt) + &wishBoardEntity.ID, &wishBoardEntity.Title, &wishBoardEntity.BackgroundImageURL, &wishBoardEntity.InviteURL, &wishBoardEntity.UserID, wishBoardEntity.CreatedAt, wishBoardEntity.UpdatedAt) if err != nil { if err == sql.ErrNoRows { @@ -130,10 +130,10 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } - bs = append(bs, &b) + wishBoardEntitySlice = append(wishBoardEntitySlice, &wishBoardEntity) } - return bs, nil + return wishBoardEntitySlice, nil } func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error { @@ -180,7 +180,7 @@ func (r *repositoryImpliment) UpdateBackgroundImageURL(ctx context.Context, mast return nil } -func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, b *wishboard.Entity) error { +func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardEntity *wishboard.Entity) error { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) @@ -193,7 +193,7 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma updated_at=?, deleted_at=? WHERE id = ? - `, *b.UpdatedAt, *b.DeletedAt, b.ID) + `, *wishBoardEntity.UpdatedAt, *wishBoardEntity.DeletedAt, wishBoardEntity.ID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.ServerError) From f80c6d0122db16e9657994e98e81e3ef068ccf0e Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 17:14:52 +0900 Subject: [PATCH 24/29] =?UTF-8?q?=E6=9C=AC=E3=83=97=E3=83=AB=E3=83=AA?= =?UTF-8?q?=E3=82=AF=E3=81=AE=E5=AF=BE=E8=B1=A1=E3=81=A7=E3=81=AF=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 36 ------------------------- 1 file changed, 36 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index def779f..b59fb91 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -15,7 +15,6 @@ import ( type Interactor interface { CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) - GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error UpdateBackgroundImage(ctx context.Context, wishBoardID int, backgroundImage []byte, authID string) error DeleteWishBoard(ctx context.Context, wishBoardID int, authID string) error @@ -95,41 +94,6 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo return wishBoardEntitySlice, nil } -func (i *interactor) GetWishBoard(ctx context.Context, wishBoardID int, authID string) (*wishboard.Entity, error) { - var wishBoardEntity *wishboard.Entity - err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) - if err != nil { - return werrors.Stack(err) - } - - // ユーザがWishBoardのメンバーでなければPermissionDenied - isMember, err := i.wishBoardService.IsMember(ctx, masterTx, userEntity.ID, wishBoardID) - if err != nil { - return werrors.Stack(err) - } - if !isMember { - err := errors.New("you don't belong to wish_board") - tlog.PrintErrorLogWithCtx(ctx, err) - return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) - } - - wishBoardEntity, err = i.wishBoardService.GetByPK(ctx, masterTx, wishBoardID) - if err != nil { - return werrors.Stack(err) - } - - // TODO: WishCategory, WishCardの取得 - - return nil - }) - if err != nil { - return nil, werrors.Stack(err) - } - - return wishBoardEntity, nil -} - func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { if err := validateTitle(ctx, title); err != nil { return werrors.Stack(err) From f0abdec219e53d7165efc5fd57609913a54411ce Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 18:46:32 +0900 Subject: [PATCH 25/29] =?UTF-8?q?=E5=A4=89=E6=95=B0=E5=90=8D=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 10 +++++----- pkg/domain/service/wishboard/service.go | 4 ++-- .../mysql/userwishboard/repository.go | 19 +++++-------------- .../mysql/wishboard/repository.go | 6 +++--- 4 files changed, 15 insertions(+), 24 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index b59fb91..68c4b28 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -43,7 +43,7 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin var wishBoardEntity *wishboard.Entity err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { - u, err := i.userService.GetByAuthID(ctx, masterTx, authID) + userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { return werrors.Stack(err) } @@ -57,7 +57,7 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin // TODO: 招待URLの自動生成 inviteURL := "hoge" - wishBoardEntity, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, u.ID) + wishBoardEntity, err = i.wishBoardService.Create(ctx, masterTx, title, backgroundImageURL, inviteURL, userEntity.ID) if err != nil { return werrors.Stack(err) } @@ -72,7 +72,7 @@ func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title strin } func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishboard.EntitySlice, error) { - var wishBoardEntitySlice wishboard.EntitySlice + var wishBoardSlice wishboard.EntitySlice err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { userEntity, err := i.userService.GetByAuthID(ctx, masterTx, authID) if err != nil { @@ -80,7 +80,7 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo } // 自分が所属しているWishBoardのリストを取得 - wishBoardEntitySlice, err = i.wishBoardService.GetMyBoards(ctx, masterTx, userEntity.ID) + wishBoardSlice, err = i.wishBoardService.GetMyBoards(ctx, masterTx, userEntity.ID) if err != nil { return werrors.Stack(err) } @@ -91,7 +91,7 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo return nil, werrors.Stack(err) } - return wishBoardEntitySlice, nil + return wishBoardSlice, nil } func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 2882916..ed3c380 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -75,12 +75,12 @@ func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, return nil, nil } - wishBoardEntitySlice, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) + wishBoardSlice, err := s.wishBoardRepository.SelectByPKs(ctx, masterTx, wishBoardIDs) if err != nil { return nil, werrors.Stack(err) } - return wishBoardEntitySlice, nil + return wishBoardSlice, nil } func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) { diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 91d4244..5791a70 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -27,7 +27,6 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } - // 新規レコード追加 _, err = tx.Exec(` INSERT INTO users_wish_boards(user_id, wish_board_id) VALUES (?, ?) `, userID, wishBoardID) @@ -46,7 +45,6 @@ func (r *repositoryImpliment) Exists(ctx context.Context, masterTx repository.Ma return false, werrors.FromConstant(err, werrors.ServerError) } - // userIDとwishBoardIDで検索 row := tx.QueryRow(` SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) @@ -55,13 +53,11 @@ func (r *repositoryImpliment) Exists(ctx context.Context, masterTx repository.Ma err = row.Scan(&i) if err != nil { if err == sql.ErrNoRows { - // 見つからなければfalseを返す return false, nil } return false, werrors.FromConstant(err, werrors.ServerError) } - // 見つかればtrueを返す return true, nil } @@ -72,34 +68,30 @@ func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repos return nil, werrors.FromConstant(err, werrors.ServerError) } - // userIDで検索 rows, err := tx.Query(` SELECT wish_board_id FROM users_wish_boards WHERE user_id = ? `, userID) if err != nil { if err == sql.ErrNoRows { - // 見つからなければ空リストを返す return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } - bis := []int{} + wishBoardIDSlice := []int{} for rows.Next() { - var bi int - // wishBoardIDを取得 - if err := rows.Scan(&bi); err != nil { + var wishBoardID int + if err := rows.Scan(&wishBoardID); err != nil { if err == sql.ErrNoRows { - // 見つからなければ空リストを返す return nil, nil } return nil, werrors.FromConstant(err, werrors.ServerError) } - bis = append(bis, bi) + wishBoardIDSlice = append(wishBoardIDSlice, wishBoardID) } - return bis, nil + return wishBoardIDSlice, nil } func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error { @@ -109,7 +101,6 @@ func (r *repositoryImpliment) Delete(ctx context.Context, masterTx repository.Ma return werrors.FromConstant(err, werrors.ServerError) } - // レコードの削除 _, err = tx.Exec(` DELETE FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? `, userID, wishBoardID) diff --git a/pkg/infrastructure/mysql/wishboard/repository.go b/pkg/infrastructure/mysql/wishboard/repository.go index e80b3ad..4ee7ecf 100644 --- a/pkg/infrastructure/mysql/wishboard/repository.go +++ b/pkg/infrastructure/mysql/wishboard/repository.go @@ -115,7 +115,7 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } - wishBoardEntitySlice := wishboard.EntitySlice{} + wishBoardSlice := wishboard.EntitySlice{} for rows.Next() { // ポインタ型のフィールドについては、あらかじめメモリ確保する wishBoardEntity := wishboard.Entity{CreatedAt: &time.Time{}, UpdatedAt: &time.Time{}} @@ -130,10 +130,10 @@ func (r *repositoryImpliment) SelectByPKs(ctx context.Context, masterTx reposito return nil, werrors.FromConstant(err, werrors.ServerError) } - wishBoardEntitySlice = append(wishBoardEntitySlice, &wishBoardEntity) + wishBoardSlice = append(wishBoardSlice, &wishBoardEntity) } - return wishBoardEntitySlice, nil + return wishBoardSlice, nil } func (r *repositoryImpliment) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string, updatedAt *time.Time) error { From 88962cd2bca870bab0351993f8c3d56b34231cc8 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 18:55:21 +0900 Subject: [PATCH 26/29] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=87=E3=82=A3?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E3=82=B9=E3=82=BF=E3=82=A4=E3=83=AB=E3=81=AE?= =?UTF-8?q?=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 9 +++------ pkg/domain/service/wishboard/service.go | 18 +++++++++--------- .../mysql/userwishboard/repository.go | 4 +++- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 68c4b28..586274f 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -122,8 +122,7 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - err = i.wishBoardService.UpdateTitle(ctx, masterTx, wishBoardEntity.ID, title) - if err != nil { + if err := i.wishBoardService.UpdateTitle(ctx, masterTx, wishBoardEntity.ID, title); err != nil { return werrors.Stack(err) } return nil @@ -165,8 +164,7 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, return werrors.Stack(err) } - err = i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, wishBoardEntity.ID, backgroundImageURL) - if err != nil { + if err := i.wishBoardService.UpdateBackgroundImageURL(ctx, masterTx, wishBoardEntity.ID, backgroundImageURL); err != nil { return werrors.Stack(err) } @@ -203,8 +201,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } - err = i.wishBoardService.Delete(ctx, masterTx, wishBoardEntity.ID) - if err != nil { + if err := i.wishBoardService.Delete(ctx, masterTx, wishBoardEntity.ID); err != nil { return werrors.Stack(err) } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index ed3c380..8187da8 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -49,8 +49,7 @@ func (s *service) Create(ctx context.Context, masterTx repository.MasterTx, titl return nil, werrors.Stack(err) } - err = s.userWishBoardRepository.Insert(ctx, masterTx, userID, createdWishBoard.ID) - if err != nil { + if err := s.userWishBoardRepository.Insert(ctx, masterTx, userID, createdWishBoard.ID); err != nil { return nil, werrors.Stack(err) } @@ -94,8 +93,7 @@ func (s *service) IsMember(ctx context.Context, masterTx repository.MasterTx, us func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, title string) error { now := time.Now() - err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, &now) - if err != nil { + if err := s.wishBoardRepository.UpdateTitle(ctx, masterTx, wishBoardID, title, &now); err != nil { return werrors.Stack(err) } return nil @@ -104,8 +102,7 @@ func (s *service) UpdateTitle(ctx context.Context, masterTx repository.MasterTx, func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx repository.MasterTx, wishBoardID int, backgroundImageURL string) error { now := time.Now() - err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, &now) - if err != nil { + if err := s.wishBoardRepository.UpdateBackgroundImageURL(ctx, masterTx, wishBoardID, backgroundImageURL, &now); err != nil { return werrors.Stack(err) } return nil @@ -114,10 +111,13 @@ func (s *service) UpdateBackgroundImageURL(ctx context.Context, masterTx reposit func (s *service) Delete(ctx context.Context, masterTx repository.MasterTx, wishBoardID int) error { now := time.Now() - wishBoardEntity := &wishboard.Entity{ID: wishBoardID, UpdatedAt: &now, DeletedAt: &now} + wishBoardEntity := &wishboard.Entity{ + ID: wishBoardID, + UpdatedAt: &now, + DeletedAt: &now, + } - err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardEntity) - if err != nil { + if err := s.wishBoardRepository.Delete(ctx, masterTx, wishBoardEntity); err != nil { return werrors.Stack(err) } return nil diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index 5791a70..fe318ec 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -28,7 +28,9 @@ func (r *repositoryImpliment) Insert(ctx context.Context, masterTx repository.Ma } _, err = tx.Exec(` - INSERT INTO users_wish_boards(user_id, wish_board_id) VALUES (?, ?) + INSERT INTO users_wish_boards( + user_id, wish_board_id + ) VALUES (?, ?) `, userID, wishBoardID) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) From 471ac90e8bdaab3a3b2708012ad2d44dc17402f7 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 19:02:34 +0900 Subject: [PATCH 27/29] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 586274f..436b582 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -117,7 +117,7 @@ func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, au return werrors.Stack(err) } if !isMember { - err := errors.New("you don't belong to wish_board") + err := errors.New("Error occurred when update board title. cause: permission denied") tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } @@ -153,7 +153,7 @@ func (i *interactor) UpdateBackgroundImage(ctx context.Context, wishBoardID int, return werrors.Stack(err) } if !isMember { - err := errors.New("you don't belong to wish_board") + err := errors.New("Error occurred when update board background image. cause: permission denied") tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } @@ -196,7 +196,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return werrors.Stack(err) } if !isMember { - err := errors.New("you don't belong to wish_board") + err := errors.New("Error occurred when delete board. cause: permission denied") tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.WishBoardPermissionDenied) } @@ -216,7 +216,7 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI func validateTitle(ctx context.Context, title string) error { if title == "" { - err := errors.New("title is empty") + err := errors.New("Error occurred when board title validation.") tlog.PrintErrorLogWithCtx(ctx, err) return werrors.FromConstant(err, werrors.BadRequest) } From f9dd1929517ed6d5209c86df611e5c4c33a2b506 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 27 Sep 2020 19:21:37 +0900 Subject: [PATCH 28/29] =?UTF-8?q?=EF=BC=92=E7=82=B9=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - user_wish_boardでExists句を使用 - メソッド名の変更 --- pkg/domain/repository/userwishboard/repository.go | 2 +- pkg/domain/service/wishboard/service.go | 2 +- .../mysql/userwishboard/repository.go | 15 +++++++-------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pkg/domain/repository/userwishboard/repository.go b/pkg/domain/repository/userwishboard/repository.go index 9f5e179..15d2ca8 100644 --- a/pkg/domain/repository/userwishboard/repository.go +++ b/pkg/domain/repository/userwishboard/repository.go @@ -8,6 +8,6 @@ import ( type Repository interface { Insert(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error Exists(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) (bool, error) - SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) + SelectWishBoardIDsByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) Delete(ctx context.Context, masterTx repository.MasterTx, userID, wishBoardID int) error } diff --git a/pkg/domain/service/wishboard/service.go b/pkg/domain/service/wishboard/service.go index 8187da8..ffe6da9 100644 --- a/pkg/domain/service/wishboard/service.go +++ b/pkg/domain/service/wishboard/service.go @@ -65,7 +65,7 @@ func (s *service) GetByPK(ctx context.Context, masterTx repository.MasterTx, wis } func (s *service) GetMyBoards(ctx context.Context, masterTx repository.MasterTx, userID int) (wishboard.EntitySlice, error) { - wishBoardIDs, err := s.userWishBoardRepository.SelectByUserID(ctx, masterTx, userID) + wishBoardIDs, err := s.userWishBoardRepository.SelectWishBoardIDsByUserID(ctx, masterTx, userID) if err != nil { return nil, werrors.Stack(err) } diff --git a/pkg/infrastructure/mysql/userwishboard/repository.go b/pkg/infrastructure/mysql/userwishboard/repository.go index fe318ec..dbfa185 100644 --- a/pkg/infrastructure/mysql/userwishboard/repository.go +++ b/pkg/infrastructure/mysql/userwishboard/repository.go @@ -48,22 +48,21 @@ func (r *repositoryImpliment) Exists(ctx context.Context, masterTx repository.Ma } row := tx.QueryRow(` - SELECT id FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? + SELECT EXISTS ( + SELECT * FROM users_wish_boards WHERE user_id = ? AND wish_board_id = ? + ) `, userID, wishBoardID) - var i int - err = row.Scan(&i) + var exists bool + err = row.Scan(&exists) if err != nil { - if err == sql.ErrNoRows { - return false, nil - } return false, werrors.FromConstant(err, werrors.ServerError) } - return true, nil + return exists, nil } -func (r *repositoryImpliment) SelectByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) { +func (r *repositoryImpliment) SelectWishBoardIDsByUserID(ctx context.Context, masterTx repository.MasterTx, userID int) ([]int, error) { tx, err := mysql.ExtractTx(masterTx) if err != nil { tlog.PrintErrorLogWithCtx(ctx, err) From d9759d22dd0d4cd9c63dd34c3360b75ec439c522 Mon Sep 17 00:00:00 2001 From: sana37 Date: Sun, 4 Oct 2020 16:25:19 +0900 Subject: [PATCH 29/29] =?UTF-8?q?=E7=A9=BA=E3=82=BF=E3=82=A4=E3=83=88?= =?UTF-8?q?=E3=83=AB=E5=88=A4=E5=AE=9A=E3=81=AF=E5=88=A5=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AB=E5=88=87=E3=82=8A=E5=87=BA=E3=81=97=E3=81=9F=E3=82=8A?= =?UTF-8?q?=E3=81=97=E3=81=AA=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/usecase/wishboard/interactor.go | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/pkg/api/usecase/wishboard/interactor.go b/pkg/api/usecase/wishboard/interactor.go index 436b582..6b202ff 100644 --- a/pkg/api/usecase/wishboard/interactor.go +++ b/pkg/api/usecase/wishboard/interactor.go @@ -37,8 +37,10 @@ func New(masterTxManager repository.MasterTxManager, userService userservice.Ser } func (i *interactor) CreateNewWishBoard(ctx context.Context, authID, title string, backgroundImage []byte) (*wishboard.Entity, error) { - if err := validateTitle(ctx, title); err != nil { - return nil, werrors.Stack(err) + if title == "" { + err := errors.New("Error occurred when board title validation.") + tlog.PrintErrorLogWithCtx(ctx, err) + return nil, werrors.FromConstant(err, werrors.BadRequest) } var wishBoardEntity *wishboard.Entity @@ -95,8 +97,10 @@ func (i *interactor) GetMyWishBoards(ctx context.Context, authID string) (wishbo } func (i *interactor) UpdateTitle(ctx context.Context, wishBoardID int, title, authID string) error { - if err := validateTitle(ctx, title); err != nil { - return werrors.Stack(err) + if title == "" { + err := errors.New("Error occurred when board title validation.") + tlog.PrintErrorLogWithCtx(ctx, err) + return werrors.FromConstant(err, werrors.BadRequest) } err := i.masterTxManager.Transaction(ctx, func(ctx context.Context, masterTx repository.MasterTx) error { @@ -213,13 +217,3 @@ func (i *interactor) DeleteWishBoard(ctx context.Context, wishBoardID int, authI return nil } - -func validateTitle(ctx context.Context, title string) error { - if title == "" { - err := errors.New("Error occurred when board title validation.") - tlog.PrintErrorLogWithCtx(ctx, err) - return werrors.FromConstant(err, werrors.BadRequest) - } - - return nil -}