feat: fixing logic for approval ppid

This commit is contained in:
hanif salafi 2024-05-08 00:30:55 +07:00
parent e5775814d8
commit 3b05b665c3
8 changed files with 87 additions and 89 deletions

View File

@ -12,7 +12,7 @@ type PpidDataApprovalHistoriesCreateRequest struct {
PpidDataId uint `json:"ppidDataId" validate:"required"` PpidDataId uint `json:"ppidDataId" validate:"required"`
Message string `json:"message" validate:"required"` Message string `json:"message" validate:"required"`
ApprovalStatusId int `json:"approvalStatusId" validate:"required"` ApprovalStatusId int `json:"approvalStatusId" validate:"required"`
ApprovalAtLevel int `json:"approvalAtLevel" validate:"required"` ApprovalAtLevel *int `json:"approvalAtLevel"`
} }
func (req PpidDataApprovalHistoriesCreateRequest) ToEntity() *entity.PpidDataApprovalHistories { func (req PpidDataApprovalHistoriesCreateRequest) ToEntity() *entity.PpidDataApprovalHistories {
@ -20,6 +20,6 @@ func (req PpidDataApprovalHistoriesCreateRequest) ToEntity() *entity.PpidDataApp
PpidDataId: req.PpidDataId, PpidDataId: req.PpidDataId,
Message: req.Message, Message: req.Message,
ApprovalStatusId: req.ApprovalStatusId, ApprovalStatusId: req.ApprovalStatusId,
ApprovalAtLevel: req.ApprovalAtLevel, ApprovalAtLevel: *req.ApprovalAtLevel,
} }
} }

View File

@ -169,14 +169,16 @@ func (_i *ppidDatasController) Update(c *fiber.Ctx) error {
// @Description API for UpdateApprovalStatus PpidDatas // @Description API for UpdateApprovalStatus PpidDatas
// @Tags PPID Data // @Tags PPID Data
// @Security Bearer // @Security Bearer
// @Param Authorization header string true "Insert your access token" default(Bearer <Add access token here>)
// @Param payload body requestPpidApproval.PpidDataApprovalHistoriesCreateRequest true "Required payload" // @Param payload body requestPpidApproval.PpidDataApprovalHistoriesCreateRequest true "Required payload"
// @Success 200 {object} response.Response // @Success 200 {object} response.Response
// @Failure 400 {object} response.BadRequestError // @Failure 400 {object} response.BadRequestError
// @Failure 401 {object} response.UnauthorizedError // @Failure 401 {object} response.UnauthorizedError
// @Failure 500 {object} response.InternalServerError // @Failure 500 {object} response.InternalServerError
// @Router /ppid-datas/approval [put] // @Router /ppid-datas/approval [post]
func (_i *ppidDatasController) UpdateApprovalStatus(c *fiber.Ctx) error { func (_i *ppidDatasController) UpdateApprovalStatus(c *fiber.Ctx) error {
req := new(requestPpidApproval.PpidDataApprovalHistoriesCreateRequest) req := new(requestPpidApproval.PpidDataApprovalHistoriesCreateRequest)
if err := utilVal.ParseAndValidate(c, req); err != nil { if err := utilVal.ParseAndValidate(c, req); err != nil {
return err return err
} }

View File

@ -48,7 +48,7 @@ func (_i *PpidDatasRouter) RegisterPpidDatasRoutes() {
router.Get("/:id", ppidDatasController.Show) router.Get("/:id", ppidDatasController.Show)
router.Post("/", ppidDatasController.Save) router.Post("/", ppidDatasController.Save)
router.Put("/:id", ppidDatasController.Update) router.Put("/:id", ppidDatasController.Update)
router.Put("/approval", ppidDatasController.UpdateApprovalStatus) router.Post("/approval", ppidDatasController.UpdateApprovalStatus)
router.Delete("/:id", ppidDatasController.Delete) router.Delete("/:id", ppidDatasController.Delete)
}) })
} }

View File

@ -1,7 +1,6 @@
package service package service
import ( import (
"fmt"
"github.com/rs/zerolog" "github.com/rs/zerolog"
"go-humas-be/app/database/entity" "go-humas-be/app/database/entity"
requestPpidApproval "go-humas-be/app/module/ppid_data_approval_histories/request" requestPpidApproval "go-humas-be/app/module/ppid_data_approval_histories/request"
@ -121,6 +120,7 @@ func (_i *ppidDatasService) Update(id uint, req request.PpidDatasUpdateRequest)
} }
func (_i *ppidDatasService) UpdateApprovalStatus(req requestPpidApproval.PpidDataApprovalHistoriesCreateRequest, authToken string) (err error) { func (_i *ppidDatasService) UpdateApprovalStatus(req requestPpidApproval.PpidDataApprovalHistoriesCreateRequest, authToken string) (err error) {
_i.Log.Info().Interface("data", req).Msg("")
ppidData, err := _i.Repo.FindOne(req.PpidDataId) ppidData, err := _i.Repo.FindOne(req.PpidDataId)
if err != nil { if err != nil {
return err return err
@ -135,19 +135,25 @@ func (_i *ppidDatasService) UpdateApprovalStatus(req requestPpidApproval.PpidDat
approvalBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken) approvalBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken)
if approvalBy != nil { if approvalBy != nil {
findUserLevel, _ := _i.UserLevelsRepo.FindOne(uint(approvalBy.UserLevelId)) approvalByUserLevel, _ := _i.UserLevelsRepo.FindOne(uint(approvalBy.UserLevelId))
findUserParentLevel, _ := _i.UserLevelsRepo.FindOne(uint(findUserLevel.ParentLevelId)) approvalByParentLevel, _ := _i.UserLevelsRepo.FindOne(uint(approvalByUserLevel.ParentLevelId))
if findUserLevel != nil {
if findUserLevel.LevelNumber == 1 { _i.Log.Info().Interface("== findUserLevel ==", approvalByUserLevel).Msg("")
_i.Log.Info().Interface("== findUserParentLevel ==", approvalByParentLevel).Msg("")
if approvalByUserLevel != nil {
ppidData.ApprovalStatusId = req.ApprovalStatusId
if req.ApprovalStatusId == 1 {
if approvalByUserLevel.LevelNumber == 1 {
isPublish := true isPublish := true
publishLevel := 1 publishLevel := 1
timeNow := time.Now() timeNow := time.Now()
ppidData.IsPublish = &isPublish ppidData.IsPublish = &isPublish
ppidData.PublishLevel = &publishLevel ppidData.PublishLevel = &publishLevel
ppidData.PublishedAt = &timeNow ppidData.PublishedAt = &timeNow
ppidData.ApprovalStatusId = req.ApprovalStatusId
ppidData.NeedApprovalFromUserRole = nil ppidData.NeedApprovalFromUserRole = nil
ppidData.NeedApprovalFromUserLevel = nil ppidData.NeedApprovalFromUserLevel = nil
} else if findUserLevel.LevelNumber == 2 { } else if approvalByUserLevel.LevelNumber > 1 {
isPublish := true isPublish := true
publishLevel := 2 publishLevel := 2
timeNow := time.Now() timeNow := time.Now()
@ -155,18 +161,36 @@ func (_i *ppidDatasService) UpdateApprovalStatus(req requestPpidApproval.PpidDat
ppidData.PublishLevel = &publishLevel ppidData.PublishLevel = &publishLevel
ppidData.PublishedAt = &timeNow ppidData.PublishedAt = &timeNow
needApprovalFromUserLevel := fmt.Sprintf("%s", findUserParentLevel.ID) needApprovalFromUserLevel := strconv.FormatUint(uint64(approvalByParentLevel.ID), 10)
ppidData.NeedApprovalFromUserLevel = &needApprovalFromUserLevel ppidData.NeedApprovalFromUserLevel = &needApprovalFromUserLevel
findUserRoles, _ := _i.userRoleLevelDetailsRepo.FindByUserLevels(findUserParentLevel.ID) findUserRoles, _ := _i.userRoleLevelDetailsRepo.FindByUserLevels(approvalByParentLevel.ID)
var needApprovalFromUserRole []string var needApprovalFromUserRole []string
for _, role := range findUserRoles { for _, role := range findUserRoles {
roleId := fmt.Sprintf("%s", role.UserRoleId) roleId := strconv.FormatUint(uint64(role.UserRoleId), 10)
needApprovalFromUserRole = append(needApprovalFromUserRole, roleId) needApprovalFromUserRole = append(needApprovalFromUserRole, roleId)
} }
needApprovalFromUserRoleStr := strings.Join(needApprovalFromUserRole, "/") needApprovalFromUserRoleStr := strings.Join(needApprovalFromUserRole, "/")
ppidData.NeedApprovalFromUserRole = &needApprovalFromUserRoleStr ppidData.NeedApprovalFromUserRole = &needApprovalFromUserRoleStr
} }
} else if req.ApprovalStatusId == 2 {
createdBy, _ := _i.UsersRepo.FindOne(*ppidData.CreatedById)
if createdBy != nil {
needApprovalFromUserLevel := strconv.FormatUint(uint64(createdBy.UserLevelId), 10)
ppidData.NeedApprovalFromUserLevel = &needApprovalFromUserLevel
needApprovalFromUserRole := strconv.FormatUint(uint64(createdBy.UserRoleId), 10)
ppidData.NeedApprovalFromUserRole = &needApprovalFromUserRole
}
} else {
isPublish := false
ppidData.IsPublish = &isPublish
ppidData.PublishLevel = nil
ppidData.PublishedAt = nil
ppidData.ApprovalStatusId = req.ApprovalStatusId
ppidData.NeedApprovalFromUserRole = nil
ppidData.NeedApprovalFromUserLevel = nil
}
} }
} }

View File

@ -56,8 +56,7 @@ func (_i *userRoleLevelDetailsRepository) FindOne(id uint) (userRoleLevelDetails
} }
func (_i *userRoleLevelDetailsRepository) FindByUserLevels(userLevelId uint) (userRoleLevelDetails []*entity.UserRoleLevelDetails, err error) { func (_i *userRoleLevelDetailsRepository) FindByUserLevels(userLevelId uint) (userRoleLevelDetails []*entity.UserRoleLevelDetails, err error) {
if err := _i.DB.DB.Find(&userRoleLevelDetails). if err := _i.DB.DB.Where(&entity.UserRoleLevelDetails{UserLevelId: userLevelId}).Find(&userRoleLevelDetails).Error; err != nil {
Where(&entity.UserRoleLevelDetails{UserLevelId: userLevelId}).Error; err != nil {
return nil, err return nil, err
} }

View File

@ -4637,7 +4637,7 @@ const docTemplate = `{
} }
}, },
"/ppid-datas/approval": { "/ppid-datas/approval": {
"put": { "post": {
"security": [ "security": [
{ {
"Bearer": [] "Bearer": []
@ -4649,6 +4649,14 @@ const docTemplate = `{
], ],
"summary": "UpdateApprovalStatus PpidDatas", "summary": "UpdateApprovalStatus PpidDatas",
"parameters": [ "parameters": [
{
"type": "string",
"default": "Bearer \u003cAdd access token here\u003e",
"description": "Insert your access token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"description": "Required payload", "description": "Required payload",
"name": "payload", "name": "payload",
@ -6693,31 +6701,15 @@ const docTemplate = `{
"type": "object", "type": "object",
"required": [ "required": [
"articleId", "articleId",
"createdById",
"downloadCount",
"fileAlt",
"fileName",
"filePath",
"fileThumbnail",
"fileUrl",
"heightPixel",
"id", "id",
"isPublish", "isPublish",
"publishedAt", "publishedAt",
"size", "statusId"
"statusId",
"widthPixel"
], ],
"properties": { "properties": {
"articleId": { "articleId": {
"type": "integer" "type": "integer"
}, },
"createdById": {
"type": "integer"
},
"downloadCount": {
"type": "integer"
},
"fileAlt": { "fileAlt": {
"type": "string" "type": "string"
}, },
@ -6950,7 +6942,6 @@ const docTemplate = `{
"request.PpidDataApprovalHistoriesCreateRequest": { "request.PpidDataApprovalHistoriesCreateRequest": {
"type": "object", "type": "object",
"required": [ "required": [
"approvalAtLevel",
"approvalStatusId", "approvalStatusId",
"message", "message",
"ppidDataId" "ppidDataId"

View File

@ -4626,7 +4626,7 @@
} }
}, },
"/ppid-datas/approval": { "/ppid-datas/approval": {
"put": { "post": {
"security": [ "security": [
{ {
"Bearer": [] "Bearer": []
@ -4638,6 +4638,14 @@
], ],
"summary": "UpdateApprovalStatus PpidDatas", "summary": "UpdateApprovalStatus PpidDatas",
"parameters": [ "parameters": [
{
"type": "string",
"default": "Bearer \u003cAdd access token here\u003e",
"description": "Insert your access token",
"name": "Authorization",
"in": "header",
"required": true
},
{ {
"description": "Required payload", "description": "Required payload",
"name": "payload", "name": "payload",
@ -6682,31 +6690,15 @@
"type": "object", "type": "object",
"required": [ "required": [
"articleId", "articleId",
"createdById",
"downloadCount",
"fileAlt",
"fileName",
"filePath",
"fileThumbnail",
"fileUrl",
"heightPixel",
"id", "id",
"isPublish", "isPublish",
"publishedAt", "publishedAt",
"size", "statusId"
"statusId",
"widthPixel"
], ],
"properties": { "properties": {
"articleId": { "articleId": {
"type": "integer" "type": "integer"
}, },
"createdById": {
"type": "integer"
},
"downloadCount": {
"type": "integer"
},
"fileAlt": { "fileAlt": {
"type": "string" "type": "string"
}, },
@ -6939,7 +6931,6 @@
"request.PpidDataApprovalHistoriesCreateRequest": { "request.PpidDataApprovalHistoriesCreateRequest": {
"type": "object", "type": "object",
"required": [ "required": [
"approvalAtLevel",
"approvalStatusId", "approvalStatusId",
"message", "message",
"ppidDataId" "ppidDataId"

View File

@ -59,10 +59,6 @@ definitions:
properties: properties:
articleId: articleId:
type: integer type: integer
createdById:
type: integer
downloadCount:
type: integer
fileAlt: fileAlt:
type: string type: string
fileName: fileName:
@ -89,20 +85,10 @@ definitions:
type: string type: string
required: required:
- articleId - articleId
- createdById
- downloadCount
- fileAlt
- fileName
- filePath
- fileThumbnail
- fileUrl
- heightPixel
- id - id
- isPublish - isPublish
- publishedAt - publishedAt
- size
- statusId - statusId
- widthPixel
type: object type: object
request.ArticlesCreateRequest: request.ArticlesCreateRequest:
properties: properties:
@ -249,7 +235,6 @@ definitions:
ppidDataId: ppidDataId:
type: integer type: integer
required: required:
- approvalAtLevel
- approvalStatusId - approvalStatusId
- message - message
- ppidDataId - ppidDataId
@ -3655,9 +3640,15 @@ paths:
tags: tags:
- PPID Data - PPID Data
/ppid-datas/approval: /ppid-datas/approval:
put: post:
description: API for UpdateApprovalStatus PpidDatas description: API for UpdateApprovalStatus PpidDatas
parameters: parameters:
- default: Bearer <Add access token here>
description: Insert your access token
in: header
name: Authorization
required: true
type: string
- description: Required payload - description: Required payload
in: body in: body
name: payload name: payload