From 01234ad58d18a40dcda09e42126b9b3cd237bdd9 Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Mon, 15 Jul 2024 11:21:08 +0700 Subject: [PATCH] feat: update ppid data files for sorting by position --- .../repository/ppid_data_files.repository.go | 39 +++++++++++++++++++ .../request/ppid_data_files.request.go | 8 ++++ 2 files changed, 47 insertions(+) diff --git a/app/module/ppid_data_files/repository/ppid_data_files.repository.go b/app/module/ppid_data_files/repository/ppid_data_files.repository.go index 3908e7d..b81dd1b 100644 --- a/app/module/ppid_data_files/repository/ppid_data_files.repository.go +++ b/app/module/ppid_data_files/repository/ppid_data_files.repository.go @@ -7,6 +7,7 @@ import ( "go-humas-be/app/database/entity" "go-humas-be/app/module/ppid_data_files/request" "go-humas-be/utils/paginator" + "strings" ) type ppidDataFilesRepository struct { @@ -39,11 +40,49 @@ func (_i *ppidDataFilesRepository) GetAll(req request.PpidDataFilesQueryRequest) var count int64 query := _i.DB.DB.Model(&entity.PpidDataFiles{}) + query = query.Where("is_active = ?", true) + + if req.Title != nil && *req.Title != "" { + title := strings.ToLower(*req.Title) + query = query.Where("LOWER(title) LIKE ?", "%"+strings.ToLower(title)+"%") + } + if req.Description != nil && *req.Description != "" { + description := strings.ToLower(*req.Description) + query = query.Where("LOWER(description) LIKE ?", "%"+strings.ToLower(description)+"%") + } + if req.Unit != nil && *req.Unit != "" { + unit := strings.ToLower(*req.Unit) + query = query.Where("LOWER(unit) LIKE ?", "%"+strings.ToLower(unit)+"%") + } + if req.FileType != nil && *req.FileType != "" { + query = query.Where("file_type = ?", req.FileType) + } + if req.PpidDataId != nil { + query = query.Where("ppid_data_id = ?", req.PpidDataId) + } + if req.IsPublish != nil { + query = query.Where("is_publish = ?", req.IsPublish) + } + if req.StatusId != nil { + query = query.Where("status_id = ?", req.StatusId) + } query.Count(&count) + if req.Pagination.SortBy != "" { + direction := "ASC" + if req.Pagination.Sort == "desc" { + direction = "DESC" + } + query.Order(fmt.Sprintf("%s %s", req.Pagination.SortBy, direction)) + } + req.Pagination.Count = count req.Pagination = paginator.Paging(req.Pagination) + if req.Pagination.Limit == -1 { + query.Limit(req.Pagination.Limit) + } + err = query.Offset(req.Pagination.Offset).Limit(req.Pagination.Limit).Find(&ppidDataFiless).Error if err != nil { return diff --git a/app/module/ppid_data_files/request/ppid_data_files.request.go b/app/module/ppid_data_files/request/ppid_data_files.request.go index d9831eb..657b9e1 100644 --- a/app/module/ppid_data_files/request/ppid_data_files.request.go +++ b/app/module/ppid_data_files/request/ppid_data_files.request.go @@ -17,6 +17,7 @@ type PpidDataFilesQueryRequest struct { Description *string `json:"description"` Unit *string `json:"unit"` FileType *string `json:"fileType"` + Position *int `json:"position"` StatusId *int `json:"statusId"` IsPublish *bool `json:"isPublish"` Pagination *paginator.Pagination `json:"pagination"` @@ -102,6 +103,7 @@ type PpidDataFilesQueryRequestContext struct { Description string `json:"description"` Unit string `json:"unit"` FileType string `json:"fileType"` + Position string `json:"position"` StatusId string `json:"statusId"` IsPublish string `json:"isPublish"` } @@ -127,6 +129,12 @@ func (req PpidDataFilesQueryRequestContext) ToParamRequest() PpidDataFilesQueryR if fileType := req.FileType; fileType != "" { request.FileType = &fileType } + if positionStr := req.Position; positionStr != "" { + position, err := strconv.Atoi(positionStr) + if err == nil { + request.Position = &position + } + } if statusIdStr := req.StatusId; statusIdStr != "" { statusId, err := strconv.Atoi(statusIdStr) if err == nil {