Skip to content

Commit

Permalink
ormをquerierインターフェースで分離した
Browse files Browse the repository at this point in the history
  • Loading branch information
YutaKakiki authored and YutaKakiki committed Jan 11, 2025
1 parent ebf5873 commit dd0ab04
Show file tree
Hide file tree
Showing 34 changed files with 339 additions and 186 deletions.
4 changes: 0 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,6 @@ get-app:
get-pkg:
cd ./pkg && go get $(name)

# github.com/kakkky/app、/pkgにおいてgo mod tidyする
mod-tidy:
cd ./app && go mod tidy && cd ../pkg && go mod tidy

###################
### go generate ###
###################
Expand Down
34 changes: 34 additions & 0 deletions app/adapter/query_service/interface_querier.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package queryservice

import "context"

// ORMはこのインターフェースを満たすように設計する
type Querier interface {
FetchTaskById(ctx context.Context, id string) (FetchTaskByIdRow, error)
FetchAllTasks(ctx context.Context) ([]FetchAllTasksRow, error)
FetchUserTasks(ctx context.Context, userID string) ([]FetchUserTasksRow, error)
}

type FetchTaskByIdRow struct {
ID string
Name string
UserID string
Content string
State int32
}

type FetchAllTasksRow struct {
ID string
Name string
UserID string
Content string
State int32
}

type FetchUserTasksRow struct {
ID string
Name string
UserID string
Content string
State int32
}
24 changes: 13 additions & 11 deletions app/adapter/query_service/task_query_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,21 @@ import (
taskUsecase "github.com/kakkky/app/application/usecase/task"
"github.com/kakkky/app/domain/errors"
taskDomain "github.com/kakkky/app/domain/task"
"github.com/kakkky/app/infrastructure/db/sqlc"
// "github.com/kakkky/app/infrastructure/db/sqlc"
)

type taskQueryService struct{}
type taskQueryService struct {
querier Querier
}

func NewTaskQueryService() taskUsecase.TaskQueryService {
return &taskQueryService{}
func NewTaskQueryService(querier Querier) taskUsecase.TaskQueryService {
return &taskQueryService{
querier: querier,
}
}

func (tqs *taskQueryService) FetchTaskById(ctx context.Context, id string) (*taskUsecase.FetchTaskDTO, error) {
queries := sqlc.GetQueries()
r, err := queries.FetchTaskById(ctx, id)
r, err := tqs.querier.FetchTaskById(ctx, id)
if err != nil && errors.Is(err, sql.ErrNoRows) {
return nil, errors.ErrNotFoundTask
}
Expand All @@ -44,8 +47,8 @@ func (tqs *taskQueryService) FetchTaskById(ctx context.Context, id string) (*tas
}

func (tqs *taskQueryService) FetchUserTasks(ctx context.Context, userId string) ([]*taskUsecase.FetchTaskDTO, error) {
queries := sqlc.GetQueries()
rs, err := queries.FetchUserTasks(ctx, userId)

rs, err := tqs.querier.FetchUserTasks(ctx, userId)
if err != nil {
return nil, err
}
Expand All @@ -68,9 +71,8 @@ func (tqs *taskQueryService) FetchUserTasks(ctx context.Context, userId string)
return dtos, nil
}

func (tqs *taskQueryService) FetchTasks(ctx context.Context) ([]*taskUsecase.FetchTaskDTO, error) {
queries := sqlc.GetQueries()
rs, err := queries.FetchTasks(ctx)
func (tqs *taskQueryService) FetchAllTasks(ctx context.Context) ([]*taskUsecase.FetchTaskDTO, error) {
rs, err := tqs.querier.FetchAllTasks(ctx)
if err != nil {
return nil, err
}
Expand Down
70 changes: 70 additions & 0 deletions app/adapter/repository/interface_querier.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package repository

import "context"

// ORMはこのインターフェースを満たすように設計する
type Querier interface {
DeleteTask(ctx context.Context, id string) error
DeleteUser(ctx context.Context, id string) error
FetchAllUser(ctx context.Context) ([]FetchAllUsersRow, error)
FindTaskById(ctx context.Context, id string) (FindTaskByIdRow, error)
FindUserByEmail(ctx context.Context, email string) (FindUserByEmailRow, error)
FindUserById(ctx context.Context, id string) (FindUserByIdRow, error)
InsertTask(ctx context.Context, arg InsertTaskParams) error
InsertUser(ctx context.Context, arg InsertUserParams) error
UpdateTask(ctx context.Context, arg UpdateTaskParams) error
UpdateUser(ctx context.Context, arg UpdateUserParams) error
}

type FetchAllUsersRow struct {
ID string
Email string
Name string
HashedPassword string
}

type FindUserByEmailRow struct {
ID string
Email string
Name string
HashedPassword string
}

type FindUserByIdRow struct {
ID string
Email string
Name string
HashedPassword string
}

type InsertUserParams struct {
ID string
Name string
Email string
HashedPassword string
}

type UpdateUserParams struct {
Name string
Email string
ID string
}

type FindTaskByIdRow struct {
ID string
UserID string
Content string
State int32
}

type InsertTaskParams struct {
ID string
UserID string
Content string
State int32
}

type UpdateTaskParams struct {
State int32
ID string
}
27 changes: 13 additions & 14 deletions app/adapter/repository/task_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,20 @@ import (

"github.com/kakkky/app/domain/errors"
"github.com/kakkky/app/domain/task"
"github.com/kakkky/app/infrastructure/db/sqlc"
)

type taskRepository struct{}
type taskRepository struct {
querier Querier
}

func NewTaskRepository() task.TaskRepository {
return &taskRepository{}
func NewTaskRepository(querier Querier) task.TaskRepository {
return &taskRepository{
querier: querier,
}
}

func (tr *taskRepository) FindById(ctx context.Context, id string) (*task.Task, error) {
queries := sqlc.GetQueries()
t, err := queries.FindTaskById(ctx, id)
t, err := tr.querier.FindTaskById(ctx, id)
if err != nil && errors.Is(err, sql.ErrNoRows) {
return nil, errors.ErrNotFoundTask
}
Expand All @@ -34,34 +36,31 @@ func (tr *taskRepository) FindById(ctx context.Context, id string) (*task.Task,
}

func (tr *taskRepository) Save(ctx context.Context, task *task.Task) error {
queries := sqlc.GetQueries()
params := sqlc.InsertTaskParams{
arg := InsertTaskParams{
ID: task.GetID(),
UserID: task.GetUserId(),
Content: task.GetContent().Value(),
State: int32(task.GetState().IntValue()),
}
if err := queries.InsertTask(ctx, params); err != nil {
if err := tr.querier.InsertTask(ctx, arg); err != nil {
return err
}
return nil
}

func (tr *taskRepository) Update(ctx context.Context, task *task.Task) error {
queries := sqlc.GetQueries()
params := sqlc.UpdateTaskParams{
arg := UpdateTaskParams{
ID: task.GetID(),
State: int32(task.GetState().IntValue()),
}
if err := queries.UpdateTask(ctx, params); err != nil {
if err := tr.querier.UpdateTask(ctx, arg); err != nil {
return err
}
return nil
}

func (tr *taskRepository) Delete(ctx context.Context, task *task.Task) error {
queries := sqlc.GetQueries()
if err := queries.DeleteTask(ctx, task.GetID()); err != nil {
if err := tr.querier.DeleteTask(ctx, task.GetID()); err != nil {
return err
}
return nil
Expand Down
33 changes: 15 additions & 18 deletions app/adapter/repository/user_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,33 @@ import (

"github.com/kakkky/app/domain/errors"
"github.com/kakkky/app/domain/user"
"github.com/kakkky/app/infrastructure/db/sqlc"
)

type userRepository struct{}
type userRepository struct {
querier Querier
}

func NewUserRepository() user.UserRepository {
return &userRepository{}
func NewUserRepository(querier Querier) user.UserRepository {
return &userRepository{
querier: querier,
}
}

func (ur *userRepository) Save(ctx context.Context, user *user.User) error {
queries := sqlc.GetQueries()
params := sqlc.InsertUserParams{
arg := InsertUserParams{
ID: user.GetID(),
Name: user.GetName(),
Email: user.GetEmail().Value(),
HashedPassword: user.GetHashedPassword().Value(),
}
if err := queries.InsertUser(ctx, params); err != nil {
if err := ur.querier.InsertUser(ctx, arg); err != nil {
return err
}
return nil
}

func (ur *userRepository) FindByEmail(ctx context.Context, email user.Email) (*user.User, error) {
queries := sqlc.GetQueries()
u, err := queries.FindUserByEmail(ctx, email.Value())
u, err := ur.querier.FindUserByEmail(ctx, email.Value())
if err != nil && errors.Is(err, sql.ErrNoRows) {
return nil, errors.ErrNotFoundUser
}
Expand All @@ -48,8 +49,7 @@ func (ur *userRepository) FindByEmail(ctx context.Context, email user.Email) (*u
}

func (ur *userRepository) FindById(ctx context.Context, id string) (*user.User, error) {
queries := sqlc.GetQueries()
u, err := queries.FindUserById(ctx, id)
u, err := ur.querier.FindUserById(ctx, id)
if err != nil && errors.Is(err, sql.ErrNoRows) {
return nil, errors.ErrNotFoundUser
}
Expand All @@ -66,8 +66,7 @@ func (ur *userRepository) FindById(ctx context.Context, id string) (*user.User,
}

func (ur *userRepository) FetchAllUsers(ctx context.Context) (user.Users, error) {
queries := sqlc.GetQueries()
us, err := queries.FetchAllUser(ctx)
us, err := ur.querier.FetchAllUser(ctx)
if err != nil {
return nil, err
}
Expand All @@ -86,21 +85,19 @@ func (ur *userRepository) FetchAllUsers(ctx context.Context) (user.Users, error)
}

func (ur *userRepository) Update(ctx context.Context, user *user.User) error {
queries := sqlc.GetQueries()
params := sqlc.UpdateUserParams{
params := UpdateUserParams{
Name: user.GetName(),
Email: user.GetEmail().Value(),
ID: user.GetID(),
}
if err := queries.UpdateUser(ctx, params); err != nil {
if err := ur.querier.UpdateUser(ctx, params); err != nil {
return err
}
return nil
}

func (ur *userRepository) Delete(ctx context.Context, user *user.User) error {
queries := sqlc.GetQueries()
if err := queries.DeleteUser(ctx, user.GetID()); err != nil {
if err := ur.querier.DeleteUser(ctx, user.GetID()); err != nil {
return err
}
return nil
Expand Down
2 changes: 1 addition & 1 deletion app/application/usecase/task/fetch_tasks_usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func NewFetchTasksUsease(taskQueryService TaskQueryService) *FetchTasksUsease {
func (ftu *FetchTasksUsease) Run(ctx context.Context) (
[]*FetchTaskUsecaseOutputDTO, error,
) {
dtos, err := ftu.taskQueryService.FetchTasks(ctx)
dtos, err := ftu.taskQueryService.FetchAllTasks(ctx)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion app/application/usecase/task/fetch_tasks_usecase_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func TestTask_FetchTasksUsecase_Run(t *testing.T) {
{
name: "正常系",
mockFn: func(mq *MockTaskQueryService) {
mq.EXPECT().FetchTasks(gomock.Any()).Return(
mq.EXPECT().FetchAllTasks(gomock.Any()).Return(
[]*FetchTaskDTO{
{
ID: "id",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import "context"
type TaskQueryService interface {
FetchTaskById(ctx context.Context, id string) (*FetchTaskDTO, error)
FetchUserTasks(ctx context.Context, userId string) ([]*FetchTaskDTO, error)
FetchTasks(ctx context.Context) ([]*FetchTaskDTO, error)
FetchAllTasks(ctx context.Context) ([]*FetchTaskDTO, error)
}

type FetchTaskDTO struct {
Expand Down
28 changes: 14 additions & 14 deletions app/application/usecase/task/mock_task_query_service.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit dd0ab04

Please sign in to comment.