From 177e2082f4cbcb7a4d140ede82d759f05285f012 Mon Sep 17 00:00:00 2001 From: hanif salafi Date: Tue, 18 Feb 2025 05:15:57 +0700 Subject: [PATCH] feat: update article approvals --- .../entity/article_approvals.entity.go | 2 +- app/database/entity/user_levels.entity.go | 21 +++++------ .../response/article_approvals.response.go | 2 +- .../service/article_approvals.service.go | 4 +-- .../articles/service/articles.service.go | 35 ++++++++++++++----- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/app/database/entity/article_approvals.entity.go b/app/database/entity/article_approvals.entity.go index 33c3856..9b14f29 100644 --- a/app/database/entity/article_approvals.entity.go +++ b/app/database/entity/article_approvals.entity.go @@ -8,6 +8,6 @@ type ArticleApprovals struct { ApprovalBy uint `json:"approval_by" gorm:"type:int4"` StatusId int `json:"status_id" gorm:"type:int4"` Message string `json:"message" gorm:"type:varchar"` - ApprovalAtLevel int `json:"approval_at_level" gorm:"type:int4"` + ApprovalAtLevel *int `json:"approval_at_level" gorm:"type:int4"` CreatedAt time.Time `json:"created_at" gorm:"default:now()"` } diff --git a/app/database/entity/user_levels.entity.go b/app/database/entity/user_levels.entity.go index f8476b6..dbbea4d 100644 --- a/app/database/entity/user_levels.entity.go +++ b/app/database/entity/user_levels.entity.go @@ -3,14 +3,15 @@ package entity import "time" type UserLevels struct { - ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` - Name string `json:"name" gorm:"type:varchar"` - AliasName string `json:"alias_name" gorm:"type:varchar"` - LevelNumber int `json:"level_number" gorm:"type:int4"` - ParentLevelId *int `json:"parent_level_id" gorm:"type:int4"` - ProvinceId *int `json:"province_id" gorm:"type:int4"` - Group *string `json:"group" gorm:"type:varchar"` - IsActive *bool `json:"is_active" gorm:"type:bool"` - CreatedAt time.Time `json:"created_at" gorm:"default:now()"` - UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` + ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"` + Name string `json:"name" gorm:"type:varchar"` + AliasName string `json:"alias_name" gorm:"type:varchar"` + LevelNumber int `json:"level_number" gorm:"type:int4"` + ParentLevelId *int `json:"parent_level_id" gorm:"type:int4"` + ProvinceId *int `json:"province_id" gorm:"type:int4"` + Group *string `json:"group" gorm:"type:varchar"` + IsApprovalActive *bool `json:"is_approval_active" gorm:"type:bool;default:false"` + IsActive *bool `json:"is_active" gorm:"type:bool"` + CreatedAt time.Time `json:"created_at" gorm:"default:now()"` + UpdatedAt time.Time `json:"updated_at" gorm:"default:now()"` } diff --git a/app/module/article_approvals/response/article_approvals.response.go b/app/module/article_approvals/response/article_approvals.response.go index 1206920..4b56b0a 100644 --- a/app/module/article_approvals/response/article_approvals.response.go +++ b/app/module/article_approvals/response/article_approvals.response.go @@ -8,6 +8,6 @@ type ArticleApprovalsResponse struct { ApprovalBy uint `json:"approvalBy"` StatusId int `json:"statusId"` Message string `json:"message"` - ApprovalAtLevel int `json:"approvalAtLevel"` + ApprovalAtLevel *int `json:"approvalAtLevel"` CreatedAt time.Time `json:"createdAt"` } diff --git a/app/module/article_approvals/service/article_approvals.service.go b/app/module/article_approvals/service/article_approvals.service.go index 3052404..1fdf469 100644 --- a/app/module/article_approvals/service/article_approvals.service.go +++ b/app/module/article_approvals/service/article_approvals.service.go @@ -72,12 +72,12 @@ func (_i *articleApprovalsService) Save(req request.ArticleApprovalsCreateReques createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken) newReq.ApprovalBy = createdBy.ID - newReq.ApprovalAtLevel = createdBy.UserLevel.LevelNumber + newReq.ApprovalAtLevel = &createdBy.UserLevel.LevelNumber approvalByUserLevelId := createdBy.UserLevelId approvalParentLevelId := createdBy.UserLevel.ParentLevelId - err = _i.ArticlesService.UpdateApproval(newReq.ArticleId, newReq.StatusId, int(approvalByUserLevelId), newReq.ApprovalAtLevel, *approvalParentLevelId) + err = _i.ArticlesService.UpdateApproval(newReq.ArticleId, newReq.StatusId, int(approvalByUserLevelId), *newReq.ApprovalAtLevel, *approvalParentLevelId) if err != nil { return nil, err } diff --git a/app/module/articles/service/articles.service.go b/app/module/articles/service/articles.service.go index e59b6f5..340cc30 100644 --- a/app/module/articles/service/articles.service.go +++ b/app/module/articles/service/articles.service.go @@ -179,8 +179,15 @@ func (_i *articlesService) Save(req request.ArticlesCreateRequest, authToken str // Approval statusIdOne := 1 - newReq.NeedApprovalFrom = &userParentLevelId - newReq.StatusId = &statusIdOne + statusIdTwo := 2 + createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken) + if createdBy != nil && *createdBy.UserLevel.IsApprovalActive == true { + newReq.NeedApprovalFrom = nil + newReq.StatusId = &statusIdTwo + } else { + newReq.NeedApprovalFrom = &userParentLevelId + newReq.StatusId = &statusIdOne + } saveArticleRes, err := _i.Repo.Create(newReq) if err != nil { @@ -188,12 +195,24 @@ func (_i *articlesService) Save(req request.ArticlesCreateRequest, authToken str } // Approval - articleApproval := &entity.ArticleApprovals{ - ArticleId: saveArticleRes.ID, - ApprovalBy: *newReq.CreatedById, - StatusId: statusIdOne, - Message: "Need Approval", - ApprovalAtLevel: userLevelNumber, + var articleApproval *entity.ArticleApprovals + + if createdBy != nil && *createdBy.UserLevel.IsApprovalActive == true { + articleApproval = &entity.ArticleApprovals{ + ArticleId: saveArticleRes.ID, + ApprovalBy: *newReq.CreatedById, + StatusId: statusIdOne, + Message: "Need Approval", + ApprovalAtLevel: &userLevelNumber, + } + } else { + articleApproval = &entity.ArticleApprovals{ + ArticleId: saveArticleRes.ID, + ApprovalBy: *newReq.CreatedById, + StatusId: statusIdTwo, + Message: "Publish Otomatis", + ApprovalAtLevel: nil, + } } _, err = _i.ArticleApprovalsRepo.Create(articleApproval)