Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import (
"context"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/messaging"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/models"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/usecases"
"github.com/google/uuid"
)

type CreateTaskHistoryConsumer struct {
Expand All @@ -22,13 +20,7 @@ func NewCreateTaskHistoryConsumer() messaging.QueueConsumer {
}

func (c *CreateTaskHistoryConsumer) Consume(ctx context.Context, message *messaging.ProviderMessage) error {
var model models.TaskHistoryCreate
if err := message.DecodeAndValidateMessage(&model); err != nil {
return err
}

model.TenantID = uuid.MustParse(message.AuthContext.GetTenantID())
return c.CreateTaskHistoryUsecase.Execute(ctx, &model)
return nil
}

func (c *CreateTaskHistoryConsumer) QueueName() string {
Expand Down
134 changes: 6 additions & 128 deletions taskflow-service/src/application/controllers/tasks_v1_controller.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package controllers

import (
"errors"
"net/http"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/web/restserver"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/exceptions"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/models"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/usecases"
"github.com/google/uuid"
)

type TasksV1Controller struct {
Expand Down Expand Up @@ -84,20 +80,7 @@ func (c *TasksV1Controller) Routes() []restserver.Route {
// @Param title query string false "título da tarefa"
// @Router /api/v1/tasks [get]
func (c *TasksV1Controller) GetAllTask(wctx restserver.WebContext) {
var params models.TaskListParams
if err := wctx.DecodeQueryParams(&params); err != nil {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

params.TenantID = uuid.MustParse(wctx.AuthenticationContext().GetTenantID())
tasks, err := c.GetAllTaskUsecase.Execute(wctx.Context(), &params)
if err != nil {
wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.JsonResponse(http.StatusOK, tasks)
wctx.EmptyResponse(http.StatusNotImplemented)
}

// @Summary Criar uma nova tarefa
Expand All @@ -110,20 +93,7 @@ func (c *TasksV1Controller) GetAllTask(wctx restserver.WebContext) {
// @Param task body models.TaskCreate true "Dados da tarefa a ser criada"
// @Router /api/v1/tasks [post]
func (c *TasksV1Controller) CreateTask(wctx restserver.WebContext) {
var taskCreate models.TaskCreate
if err := wctx.DecodeBody(&taskCreate); err != nil {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

taskCreate.TenantID = uuid.MustParse(wctx.AuthenticationContext().GetTenantID())
createdTask, err := c.CreateTaskUsecase.Execute(wctx.Context(), &taskCreate)
if err != nil {
wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.JsonResponse(http.StatusCreated, createdTask)
wctx.EmptyResponse(http.StatusNotImplemented)
}

// @Summary Atualizar uma tarefa
Expand All @@ -137,34 +107,7 @@ func (c *TasksV1Controller) CreateTask(wctx restserver.WebContext) {
// @Param task body models.TaskUpdate true "Dados da tarefa a serem atualizados"
// @Router /api/v1/tasks/{id} [put]
func (c *TasksV1Controller) UpdateTask(wctx restserver.WebContext) {
var paramId uuid.UUID
paramId, err := uuid.Parse(wctx.PathParam("id"))
if err != nil {
wctx.ErrorResponse(http.StatusBadRequest, errors.New(exceptions.ErrInvalidTaskId))
return
}

var taskUpdate models.TaskUpdate
if err := wctx.DecodeBody(&taskUpdate); err != nil {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

taskUpdate.TaskID = paramId
taskUpdate.TenantID = uuid.MustParse(wctx.AuthenticationContext().GetTenantID())

err = c.UpdateTaskUsecase.Execute(wctx.Context(), &taskUpdate)
if err != nil {
if err.Error() == exceptions.ErrTaskNotExists {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.EmptyResponse(http.StatusNoContent)
wctx.EmptyResponse(http.StatusNotImplemented)
}

// @Summary Atualizar o status de uma tarefa
Expand All @@ -178,34 +121,7 @@ func (c *TasksV1Controller) UpdateTask(wctx restserver.WebContext) {
// @Param taskStatus body models.TaskStatusUpdate true "Dados do status da tarefa a serem atualizados"
// @Router /api/v1/tasks/{id}/status [patch]
func (c *TasksV1Controller) UpdateTaskStatus(wctx restserver.WebContext) {
var paramId uuid.UUID
paramId, err := uuid.Parse(wctx.PathParam("id"))
if err != nil {
wctx.ErrorResponse(http.StatusBadRequest, errors.New(exceptions.ErrInvalidTaskId))
return
}

var taskStatusUpdate models.TaskStatusUpdate
if err := wctx.DecodeBody(&taskStatusUpdate); err != nil {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

taskStatusUpdate.TaskID = paramId
taskStatusUpdate.TenantID = uuid.MustParse(wctx.AuthenticationContext().GetTenantID())

err = c.UpdateTaskStatusUsecase.Execute(wctx.Context(), &taskStatusUpdate)
if err != nil {
if err.Error() == exceptions.ErrTaskNotExists {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.EmptyResponse(http.StatusNoContent)
wctx.EmptyResponse(http.StatusNotImplemented)
}

// @Summary Deletar uma tarefa
Expand All @@ -218,24 +134,7 @@ func (c *TasksV1Controller) UpdateTaskStatus(wctx restserver.WebContext) {
// @Param id path string true "ID da tarefa a ser deletada"
// @Router /api/v1/tasks/{id} [delete]
func (c *TasksV1Controller) DeleteTask(wctx restserver.WebContext) {
var paramId uuid.UUID
paramId, err := uuid.Parse(wctx.PathParam("id"))
if err != nil {
wctx.ErrorResponse(http.StatusBadRequest, errors.New(exceptions.ErrInvalidTaskId))
return
}

err = c.DeleteTaskUsecase.Execute(wctx.Context(), paramId, uuid.MustParse(wctx.AuthenticationContext().GetTenantID()))
if err != nil {
if err.Error() == exceptions.ErrTaskNotExists {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}
wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.EmptyResponse(http.StatusNoContent)
wctx.EmptyResponse(http.StatusNotImplemented)
}

// @Summary Retornar histórico de uma determinada tarefa
Expand All @@ -248,26 +147,5 @@ func (c *TasksV1Controller) DeleteTask(wctx restserver.WebContext) {
// @Param pageSize query uint16 true "tamanho da página" minimum(1) default(10)
// @Router /api/v1/tasks/{id}/history [get]
func (c *TasksV1Controller) GetAllPaginatedTaskHistory(wctx restserver.WebContext) {
var paramId uuid.UUID
paramId, err := uuid.Parse(wctx.PathParam("id"))
if err != nil {
wctx.ErrorResponse(http.StatusBadRequest, errors.New(exceptions.ErrInvalidTaskId))
return
}

var params models.TaskHistoryPageParams
if err := wctx.DecodeQueryParams(&params); err != nil {
wctx.ErrorResponse(http.StatusBadRequest, err)
return
}

params.TenantID = uuid.MustParse(wctx.AuthenticationContext().GetTenantID())
params.TaskID = paramId
tasks, err := c.GetAllPaginatedTaskHistoryUsecase.Execute(wctx.Context(), &params)
if err != nil {
wctx.ErrorResponse(http.StatusInternalServerError, err)
return
}

wctx.JsonResponse(http.StatusOK, tasks)
wctx.EmptyResponse(http.StatusNotImplemented)
}
14 changes: 0 additions & 14 deletions taskflow-service/src/domain/models/task.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,4 @@
package models

import (
"time"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/types"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/enums"
"github.com/google/uuid"
)

type Task struct {
ID uuid.UUID `json:"id"`
Title string `json:"title"`
Description types.NullString `json:"description"`
Status enums.TaskStatus `json:"status"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
10 changes: 0 additions & 10 deletions taskflow-service/src/domain/models/task_create.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
package models

import (
"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/types"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/enums"
"github.com/google/uuid"
)

type TaskCreate struct {
Title string `json:"title" validate:"required"`
Description types.NullString `json:"description"`
TenantID uuid.UUID `json:"-"`
Status enums.TaskStatus `json:"-"`
}
5 changes: 0 additions & 5 deletions taskflow-service/src/domain/models/task_created.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
package models

import (
"github.com/google/uuid"
)

type TaskCreated struct {
ID uuid.UUID `json:"id"`
}
6 changes: 0 additions & 6 deletions taskflow-service/src/domain/models/task_history.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package models

import (
"time"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/types"
"github.com/google/uuid"
)

type TaskHistoryPage *types.Page[TaskHistory]

type TaskHistory struct {
ID uuid.UUID `json:"id"`
Description string `json:"description"`
CreatedAt time.Time `json:"createdAt"`
}
7 changes: 0 additions & 7 deletions taskflow-service/src/domain/models/task_history_create.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
package models

import (
"github.com/google/uuid"
)

type TaskHistoryCreate struct {
TaskID uuid.UUID `json:"taskId" validate:"required"`
Description string `json:"description" validate:"required"`
TenantID uuid.UUID `json:"-"`
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
package models

import (
"github.com/google/uuid"
)

type TaskHistoryPageParams struct {
Page uint16 `form:"page" validate:"required"`
PageSize uint16 `form:"pageSize" validate:"required"`
TenantID uuid.UUID `form:"-"`
TaskID uuid.UUID `form:"-"`
}
6 changes: 0 additions & 6 deletions taskflow-service/src/domain/models/task_list_params.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
package models

import (
"github.com/google/uuid"
)

type TaskListParams struct {
Title string `form:"title"`
TenantID uuid.UUID `form:"-"`
}
8 changes: 0 additions & 8 deletions taskflow-service/src/domain/models/task_status_update.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
package models

import (
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/enums"
"github.com/google/uuid"
)

type TaskStatusUpdate struct {
Status enums.TaskStatus `json:"status" validate:"required,oneOfTaskStatus"`
TaskID uuid.UUID `json:"-"`
TenantID uuid.UUID `json:"-"`
}
9 changes: 0 additions & 9 deletions taskflow-service/src/domain/models/task_update.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
package models

import (
"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/types"
"github.com/google/uuid"
)

type TaskUpdate struct {
Title string `json:"title" validate:"required"`
Description types.NullString `json:"description"`
TaskID uuid.UUID `json:"-"`
TenantID uuid.UUID `json:"-"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ package usecases

import (
"context"
"errors"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/logging"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/exceptions"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/models"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/infra/repositories"
)
Expand All @@ -30,14 +27,5 @@ func NewCreateTaskHistoryUsecase() *CreateTaskHistoryUsecase {
}

func (u *CreateTaskHistoryUsecase) Execute(ctx context.Context, model *models.TaskHistoryCreate) error {
if err := u.TasksHistoryRepository.Insert(ctx, model); err != nil {
logging.Error(ctx).
Err(err).
AddParam("step", "TasksHistoryRepository.Insert").
AddParam("model", model).
Msg(errAnErrorOccurredInCreateTaskHistoryUsecaseMsg)
return errors.New(exceptions.ErrOnInsertTaskHistory)
}

return nil
}
23 changes: 1 addition & 22 deletions taskflow-service/src/domain/usecases/create_task_usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@ package usecases

import (
"context"
"errors"

"github.com/colibriproject-dev/colibri-sdk-go/pkg/base/logging"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/enums"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/exceptions"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/domain/models"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/infra/producers"
"github.com/devfullcycle/fc4-arq-multi-tenancy/taskflow-service/src/infra/repositories"
Expand Down Expand Up @@ -35,22 +31,5 @@ func NewCreateTaskUsecase() *CreateTaskUsecase {
}

func (u *CreateTaskUsecase) Execute(ctx context.Context, model *models.TaskCreate) (*models.TaskCreated, error) {
model.Status = enums.TODO
result, err := u.TasksRepository.Insert(ctx, model)
if err != nil {
logging.Error(ctx).
Err(err).
AddParam("step", "TasksRepository.Insert").
AddParam("model", model).
Msg(errAnErrorOccurredInCreateTaskUsecaseMsg)
return nil, errors.New(exceptions.ErrOnInsertTask)
}

u.CreateTaskHistoryProducer.Send(ctx, &models.TaskHistoryCreate{
TaskID: result.ID,
Description: taskCreatedDescription,
TenantID: model.TenantID,
})

return result, nil
return nil, nil
}
Loading