Skip to content

Commit

Permalink
Fix issue where any projectId can be set for tasks even if non-existant
Browse files Browse the repository at this point in the history
  • Loading branch information
pacholoamit committed Jul 7, 2022
1 parent 7721503 commit e4769db
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 13 deletions.
9 changes: 5 additions & 4 deletions api/internal/project/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,15 @@ func (s *service) Create(t *dto.Project) (*dto.Project, error) {

func (s *service) Update(id int, t *dto.Project) (*dto.Project, error) {
project, err := s.repo.Update(id, t)
if err != nil {
s.logger.Error("Error when Updating a project:", err)
return &dto.Project{}, err
}
if project.ID == 0 {
s.logger.Error("Error when Updating project:", err)
return &dto.Project{}, errors.New("project not found")
}
if err != nil {
s.logger.Error("Error when Getting project:", err)
return &dto.Project{}, err
}

return project, nil
}

Expand Down
27 changes: 22 additions & 5 deletions api/internal/task/repository.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package task

import (
"errors"
"fmt"

"github.com/pacholoamit/GO-TASK-MGR/common/log"
"github.com/pacholoamit/GO-TASK-MGR/pkg/dto"
"gorm.io/gorm"
Expand All @@ -27,7 +30,6 @@ func NewRepository(db *gorm.DB, l log.Logger) Repository {
func (r repository) List() ([]dto.Task, error) {
tasks := []dto.Task{}
if err := r.db.Find(&tasks).Error; err != nil {
r.logger.Error("Error when Getting all tasks:", err)
return []dto.Task{}, err
}
return tasks, nil
Expand All @@ -36,34 +38,49 @@ func (r repository) List() ([]dto.Task, error) {
func (r repository) Get(id int) (dto.Task, error) {
task := dto.Task{}
if err := r.db.First(&task, id).Error; err != nil {
r.logger.Error("Error when Getting task:", err)
return dto.Task{}, err
}
return task, nil
}

func (r repository) Create(t *dto.Task) (*dto.Task, error) {
project := new(dto.Project)
// Validates if Project exists
if t.ProjectID != 0 {
r.db.Model(&project).Where("id = ?", t.ProjectID)
}
if t.ProjectID != 0 && project.ID == 0 {
return new(dto.Task), errors.New("project not found")
}

if err := r.db.Create(&t).Error; err != nil {
r.logger.Error("Error when Creating task:", err)
return new(dto.Task), err
}
return t, nil
}

func (r repository) Update(id int, t *dto.Task) (*dto.Task, error) {
task := new(dto.Task)
project := new(dto.Project)
// Validates if Project exists
if t.ProjectID != 0 {
r.db.Model(&project).Where("id = ?", t.ProjectID)
}
if t.ProjectID != 0 && project.ID == 0 {
return new(dto.Task), errors.New("project not found")
}

if err := r.db.Find(&task, id).Updates(&t).Error; err != nil {
r.logger.Error("Error when Updating task:", err)
return new(dto.Task), err
}

fmt.Print(task)
return task, nil
}

func (r repository) Delete(id int) (dto.Task, error) {
task := dto.Task{}
if err := r.db.Clauses(clause.Returning{}).Where("id = ?", id).Delete(&task).Error; err != nil {
r.logger.Error("Error when Deleting task:", err)
return dto.Task{}, err
}
return task, nil
Expand Down
9 changes: 5 additions & 4 deletions api/internal/task/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,15 @@ func (s *service) Create(t *dto.Task) (*dto.Task, error) {
func (s *service) Update(id int, t *dto.Task) (*dto.Task, error) {
task, err := s.repo.Update(id, t)

if task.ID == 0 {
s.logger.Info("Error when Updating task:", err)
return task, errors.New("task not found")
}
if err != nil {
s.logger.Error("Error when Updating task:", err)
return task, err
}
if task.ID == 0 {
s.logger.Info("Error when Updating task:", err)
return task, errors.New("task not found")
}

return task, nil
}

Expand Down

0 comments on commit e4769db

Please sign in to comment.