From 990e7497431a0dfc03033550087db935f569e7a8 Mon Sep 17 00:00:00 2001 From: aichy126 <16996097+aichy126@users.noreply.github.com> Date: Thu, 13 Apr 2023 14:39:27 +0800 Subject: [PATCH] add question actions --- internal/controller/question_controller.go | 4 ++++ internal/schema/question_schema.go | 4 ++++ internal/service/permission/permission_name.go | 2 ++ .../service/permission/question_permission.go | 16 +++++++++++++++- internal/service/question_service.go | 2 +- 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/internal/controller/question_controller.go b/internal/controller/question_controller.go index 5ab5f613..97052183 100644 --- a/internal/controller/question_controller.go +++ b/internal/controller/question_controller.go @@ -191,6 +191,8 @@ func (qc *QuestionController) GetQuestion(ctx *gin.Context) { permission.QuestionDelete, permission.QuestionClose, permission.QuestionReopen, + permission.QuestionPin, + permission.QuestionHide, }) if err != nil { handler.HandleResponse(ctx, err, nil) @@ -202,6 +204,8 @@ func (qc *QuestionController) GetQuestion(ctx *gin.Context) { req.CanDelete = canList[1] req.CanClose = canList[2] req.CanReopen = canList[3] + req.CanPin = canList[4] + req.CanHide = canList[5] info, err := qc.questionService.GetQuestionAndAddPV(ctx, id, userID, req) if err != nil { diff --git a/internal/schema/question_schema.go b/internal/schema/question_schema.go index d9bbf76f..a051ab83 100644 --- a/internal/schema/question_schema.go +++ b/internal/schema/question_schema.go @@ -113,6 +113,10 @@ type QuestionPermission struct { CanClose bool `json:"-"` // whether user can reopen it CanReopen bool `json:"-"` + // whether user can pin it + CanPin bool `json:"-"` + // whether user can hide it + CanHide bool `json:"-"` // whether user can use reserved it CanUseReservedTag bool `json:"-"` } diff --git a/internal/service/permission/permission_name.go b/internal/service/permission/permission_name.go index 29509f84..783e3b49 100644 --- a/internal/service/permission/permission_name.go +++ b/internal/service/permission/permission_name.go @@ -45,4 +45,6 @@ const ( deleteActionName = "action.delete" closeActionName = "action.close" reopenActionName = "action.reopen" + pinActionName = "action.pin" + hideActionName = "action.hide" ) diff --git a/internal/service/permission/question_permission.go b/internal/service/permission/question_permission.go index 1321af45..a295f7ff 100644 --- a/internal/service/permission/question_permission.go +++ b/internal/service/permission/question_permission.go @@ -10,7 +10,7 @@ import ( // GetQuestionPermission get question permission func GetQuestionPermission(ctx context.Context, userID string, creatorUserID string, - canEdit, canDelete, canClose, canReopen bool) ( + canEdit, canDelete, canClose, canReopen, canPin, canHide bool) ( actions []*schema.PermissionMemberAction) { lang := handler.GetLangByCtx(ctx) actions = make([]*schema.PermissionMemberAction, 0) @@ -42,6 +42,20 @@ func GetQuestionPermission(ctx context.Context, userID string, creatorUserID str Type: "confirm", }) } + if canPin { + actions = append(actions, &schema.PermissionMemberAction{ + Action: "pin", + Name: translator.Tr(lang, pinActionName), + Type: "confirm", + }) + } + if canHide { + actions = append(actions, &schema.PermissionMemberAction{ + Action: "hide", + Name: translator.Tr(lang, hideActionName), + Type: "confirm", + }) + } if canDelete || userID == creatorUserID { actions = append(actions, &schema.PermissionMemberAction{ Action: "delete", diff --git a/internal/service/question_service.go b/internal/service/question_service.go index 5c4b2f3f..f3f8d546 100644 --- a/internal/service/question_service.go +++ b/internal/service/question_service.go @@ -641,7 +641,7 @@ func (qs *QuestionService) GetQuestion(ctx context.Context, questionID, userID s question.Description = htmltext.FetchExcerpt(question.HTML, "...", 240) question.MemberActions = permission.GetQuestionPermission(ctx, userID, question.UserID, - per.CanEdit, per.CanDelete, per.CanClose, per.CanReopen) + per.CanEdit, per.CanDelete, per.CanClose, per.CanReopen, per.CanPin, per.CanHide) return question, nil }