From 0ec66123e82651f02d1ce7e35ee83c61e0cde275 Mon Sep 17 00:00:00 2001 From: claudealdric Date: Mon, 16 Sep 2024 09:40:11 -0400 Subject: [PATCH] Change the return value type of `GetTaskById` from value to pointer --- data/file_system_store.go | 13 ++++++------- data/file_system_store_test.go | 4 ++-- data/store.go | 2 +- testutils/mock_store.go | 11 +++++------ 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/data/file_system_store.go b/data/file_system_store.go index eec9d13..4193d78 100644 --- a/data/file_system_store.go +++ b/data/file_system_store.go @@ -41,23 +41,22 @@ func NewFileSystemStore(file *os.File) (*FileSystemStore, error) { }, nil } -func (f *FileSystemStore) GetTaskById(id int) (models.Task, error) { - var task models.Task +func (f *FileSystemStore) GetTaskById(id int) (*models.Task, error) { tasks, err := f.getTasksFromFile() if err != nil { - return task, err + return nil, err } task, ok := utils.SliceFind(tasks, func(t models.Task) bool { return t.Id == id }) if !ok { - return task, fmt.Errorf( + return nil, fmt.Errorf( "task with ID %d: %w", id, ErrResourceNotFound, ) } - return task, nil + return &task, nil } func (f *FileSystemStore) GetTasks() ([]models.Task, error) { @@ -117,7 +116,7 @@ func (f *FileSystemStore) UpdateTask(task models.Task) (models.Task, error) { taskToUpdate.Title = task.Title for i, t := range tasks { if t.Id == task.Id { - tasks[i] = taskToUpdate + tasks[i] = *taskToUpdate break } } @@ -126,7 +125,7 @@ func (f *FileSystemStore) UpdateTask(task models.Task) (models.Task, error) { return models.Task{}, err } - return taskToUpdate, nil + return *taskToUpdate, nil } func (f *FileSystemStore) GetUserByEmail(email string) (*models.User, error) { diff --git a/data/file_system_store_test.go b/data/file_system_store_test.go index 355e3ba..1109bca 100644 --- a/data/file_system_store_test.go +++ b/data/file_system_store_test.go @@ -50,7 +50,7 @@ func TestFileSystemStoreTasks(t *testing.T) { got, err := store.GetTaskById(wantedTask.Id) assert.HasNoError(t, err) - assert.Equals(t, got, wantedTask) + assert.Equals(t, *got, wantedTask) }) t.Run("GetTaskById returns an `ErrNotFound` error if task does not exist", func(t *testing.T) { @@ -135,7 +135,7 @@ func TestFileSystemStoreTasks(t *testing.T) { retrievedTask, err := store.GetTaskById(task.Id) assert.HasNoError(t, err) - assert.Equals(t, retrievedTask, wantedTask) + assert.Equals(t, *retrievedTask, wantedTask) }) t.Run("UpdateTaskById returns an error with an invalid ID", func(t *testing.T) { diff --git a/data/store.go b/data/store.go index 43bb6d1..b972566 100644 --- a/data/store.go +++ b/data/store.go @@ -11,7 +11,7 @@ var ErrResourceNotFound = errors.New("resource not found") type Store interface { CreateTask(dto *models.CreateTaskDTO) (*models.Task, error) DeleteTaskById(id int) error - GetTaskById(id int) (models.Task, error) + GetTaskById(id int) (*models.Task, error) GetTasks() ([]models.Task, error) UpdateTask(task models.Task) (models.Task, error) diff --git a/testutils/mock_store.go b/testutils/mock_store.go index 0f3182d..c458c01 100644 --- a/testutils/mock_store.go +++ b/testutils/mock_store.go @@ -46,21 +46,20 @@ func (m *mockStore) CreateTask(dto *models.CreateTaskDTO) (*models.Task, error) return &task, nil } -func (m *mockStore) GetTaskById(id int) (models.Task, error) { +func (m *mockStore) GetTaskById(id int) (*models.Task, error) { m.GetTaskByIdCalls++ - var task models.Task if m.shouldForceError { if id == -1 { - return task, data.ErrResourceNotFound + return nil, data.ErrResourceNotFound } else { - return task, forcedError + return nil, forcedError } } tasks, _ := m.GetTasks() - task, _ = utils.SliceFind(tasks, func(t models.Task) bool { + task, _ := utils.SliceFind(tasks, func(t models.Task) bool { return t.Id == id }) - return task, nil + return &task, nil } func (m *mockStore) GetTasks() ([]models.Task, error) {