Skip to content

Commit

Permalink
Merge pull request #20 from RECYTHNG/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
haiser1 authored Jun 20, 2024
2 parents a69e37c + bbdc806 commit b595f97
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 14 deletions.
12 changes: 12 additions & 0 deletions docs/swagger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1667,6 +1667,18 @@ paths:
type: integer
example: 10
default: 10
- name: end-date
in: query
required: false
schema:
type: string
example: "desc"
- name: status
in: query
required: false
schema:
type: string
example: true
responses:
'200':
description: List of tasks
Expand Down
21 changes: 20 additions & 1 deletion internal/task/manage_task/handler/manage_task_handler_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ func (handler *ManageTaskHandlerImpl) CreateTaskHandler(c echo.Context) error {
if errors.Is(err, pkg.ErrTaskStepsNull) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrTaskStepsNull.Error())
}
if errors.Is(err, pkg.ErrParsedTime) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrParsedTime.Error())
}
if errors.Is(err, pkg.ErrThumbnail) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrThumbnail.Error())
}
Expand Down Expand Up @@ -93,6 +96,8 @@ func (handler *ManageTaskHandlerImpl) CreateTaskHandler(c echo.Context) error {
func (handler *ManageTaskHandlerImpl) GetTaskChallengePaginationHandler(c echo.Context) error {
page := c.QueryParam("page")
limit := c.QueryParam("limit")
status := c.QueryParam("status")
endDate := c.QueryParam("end-date")
if page == "" {
page = "1"
}
Expand All @@ -107,8 +112,19 @@ func (handler *ManageTaskHandlerImpl) GetTaskChallengePaginationHandler(c echo.C
if errPage != nil || pageInt <= 0 {
return helper.ErrorHandler(c, http.StatusBadRequest, "invalid page parameter")
}
if status != "" {
if status != "true" && status != "false" {
return helper.ErrorHandler(c, http.StatusBadRequest, "invalid status parameter")
}
}

tasks, totalData, err := handler.Usecase.GetTaskChallengePagination(pageInt, limitInt)
if endDate != "" {
if endDate != "asc" && endDate != "desc" {
return helper.ErrorHandler(c, http.StatusBadRequest, "invalid end date parameter")
}
}

tasks, totalData, err := handler.Usecase.GetTaskChallengePagination(pageInt, limitInt, status, endDate)
if err != nil {
return helper.ErrorHandler(c, http.StatusInternalServerError, "internal server error, detail: "+err.Error())
}
Expand Down Expand Up @@ -221,6 +237,9 @@ func (handler *ManageTaskHandlerImpl) UpdateTaskHandler(c echo.Context) error {
if errors.Is(err, pkg.ErrTaskStepsNull) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrTaskStepsNull.Error())
}
if errors.Is(err, pkg.ErrParsedTime) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrParsedTime.Error())
}
if errors.Is(err, pkg.ErrThumbnail) {
return helper.ErrorHandler(c, http.StatusBadRequest, pkg.ErrThumbnail.Error())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
type ManageTaskRepository interface {
CreateTask(task *task.TaskChallenge) (*task.TaskChallenge, error)
FindLastIdTaskChallenge() (string, error)
GetTaskChallengePagination(page int, limit int) ([]task.TaskChallenge, int, error)
GetTaskChallengePagination(page int, limit int, status string, endDate string) ([]task.TaskChallenge, int, error)
GetTaskById(id string) (*task.TaskChallenge, error)
FindTask(id string) (*task.TaskChallenge, error)
UpdateTaskChallenge(taskChallenge *task.TaskChallenge, taskId string) (*task.TaskChallenge, error)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package repository

import (
"fmt"
"log"
"time"

Expand Down Expand Up @@ -34,20 +33,43 @@ func (repository *ManageTaskRepositoryImpl) FindLastIdTaskChallenge() (string, e
return task.ID, nil
}

func (repository *ManageTaskRepositoryImpl) GetTaskChallengePagination(page int, limit int) ([]task.TaskChallenge, int, error) {
func (repository *ManageTaskRepositoryImpl) GetTaskChallengePagination(page int, limit int, status string, endDate string) ([]task.TaskChallenge, int, error) {
var tasks []task.TaskChallenge
var total int64
offset := (page - 1) * limit

db := repository.DB.GetDB()
err := db.Model(&task.TaskChallenge{}).Count(&total).Error
if err != nil {
return nil, 0, fmt.Errorf("failed to count total tasks: %w", err)
baseQuery := repository.DB.GetDB().Model(&task.TaskChallenge{})

if status != "" {
if status == "true" {
baseQuery = baseQuery.Where("status = ?", true)
} else if status == "false" {
baseQuery = baseQuery.Where("status = ?", false)
}
}
totalQuery := baseQuery
if err := totalQuery.Count(&total).Error; err != nil {
return nil, 0, err
}

dataQuery := baseQuery.
Preload("TaskSteps").
Preload("Admin").
Limit(limit).
Offset(offset)

if endDate != "" {
if endDate == "desc" {
dataQuery = dataQuery.Order("end_date DESC")
} else if endDate == "asc" {
dataQuery = dataQuery.Order("end_date ASC")
}
} else {
dataQuery = dataQuery.Order("created_at DESC")
}

err = db.Preload("TaskSteps").Preload("Admin").Limit(limit).Offset(offset).Order("id desc").Find(&tasks).Error
if err != nil {
return nil, 0, fmt.Errorf("failed to fetch tasks: %w", err)
if err := dataQuery.Find(&tasks).Error; err != nil {
return nil, 0, err
}

return tasks, int(total), nil
Expand Down
2 changes: 1 addition & 1 deletion internal/task/manage_task/usecase/manage_task_usecase.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

type ManageTaskUsecase interface {
CreateTaskUsecase(request *dto.CreateTaskResquest, thumbnail []*multipart.FileHeader, adminId string) (*task.TaskChallenge, error)
GetTaskChallengePagination(page int, limit int) ([]task.TaskChallenge, int, error)
GetTaskChallengePagination(page int, limit int, status string, endDate string) ([]task.TaskChallenge, int, error)
GetTaskByIdUsecase(id string) (*task.TaskChallenge, error)
UpdateTaskChallengeUsecase(request *dto.UpdateTaskRequest, thumbnail []*multipart.FileHeader, id string) (*task.TaskChallenge, error)
DeleteTaskChallengeUsecase(id string) error
Expand Down
4 changes: 2 additions & 2 deletions internal/task/manage_task/usecase/manage_task_usecase_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ func (usecase *ManageTaskUsecaseImpl) CreateTaskUsecase(request *dto.CreateTaskR
return taskChallange, nil
}

func (usecase *ManageTaskUsecaseImpl) GetTaskChallengePagination(page int, limit int) ([]task.TaskChallenge, int, error) {
tasks, total, err := usecase.ManageTaskRepository.GetTaskChallengePagination(page, limit)
func (usecase *ManageTaskUsecaseImpl) GetTaskChallengePagination(page int, limit int, status string, endDate string) ([]task.TaskChallenge, int, error) {
tasks, total, err := usecase.ManageTaskRepository.GetTaskChallengePagination(page, limit, status, endDate)
if err != nil {
return nil, 0, err
}
Expand Down

0 comments on commit b595f97

Please sign in to comment.