You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2024/07/23 07:44:55 UTC

(incubator-answer) branch dev updated (07188847 -> bbefbbcb)

This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a change to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-answer.git


    from 07188847 fix: add front-matter licesnse
     new c97134dd feat: Support admin edit display name
     new bbefbbcb fix: Fix old user information still showing when editing repeatedly

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 docs/docs.go                                 | 28 +++++++++++++++-------------
 docs/swagger.json                            | 28 +++++++++++++++-------------
 docs/swagger.yaml                            | 22 +++++++++++++---------
 i18n/en_US.yaml                              |  3 +++
 internal/controller/meta_controller.go       |  2 +-
 internal/repo/user/user_repo.go              |  2 +-
 internal/schema/backyard_user_schema.go      |  1 +
 internal/service/user_admin/user_backyard.go |  1 +
 ui/src/hooks/useChangeProfileModal/index.tsx | 23 +++++++++++++++++++++--
 ui/src/services/admin/users.ts               |  1 +
 10 files changed, 72 insertions(+), 39 deletions(-)


(incubator-answer) 01/02: feat: Support admin edit display name

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-answer.git

commit c97134dd8d4e71fae1833a616ad4331bc482072c
Author: sy-records <52...@qq52o.cn>
AuthorDate: Fri Jul 19 19:55:28 2024 +0800

    feat: Support admin edit display name
    
    feat: Support admin edit display name
---
 docs/docs.go                                 | 28 +++++++++++++++-------------
 docs/swagger.json                            | 28 +++++++++++++++-------------
 docs/swagger.yaml                            | 22 +++++++++++++---------
 i18n/en_US.yaml                              |  3 +++
 internal/controller/meta_controller.go       |  2 +-
 internal/repo/user/user_repo.go              |  2 +-
 internal/schema/backyard_user_schema.go      |  1 +
 internal/service/user_admin/user_backyard.go |  1 +
 ui/src/hooks/useChangeProfileModal/index.tsx | 21 ++++++++++++++++++++-
 ui/src/services/admin/users.ts               |  1 +
 10 files changed, 71 insertions(+), 38 deletions(-)

diff --git a/docs/docs.go b/docs/docs.go
index ec6aafce..c0ff2fef 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -2985,7 +2985,7 @@ const docTemplate = `{
                                     "type": "object",
                                     "properties": {
                                         "data": {
-                                            "$ref": "#/definitions/schema.ReactionResp"
+                                            "$ref": "#/definitions/schema.ReactionRespItem"
                                         }
                                     }
                                 }
@@ -7482,10 +7482,16 @@ const docTemplate = `{
         "schema.EditUserProfileReq": {
             "type": "object",
             "required": [
+                "display_name",
                 "email",
                 "user_id"
             ],
             "properties": {
+                "display_name": {
+                    "type": "string",
+                    "maxLength": 30,
+                    "minLength": 4
+                },
                 "email": {
                     "type": "string",
                     "maxLength": 500
@@ -9035,31 +9041,27 @@ const docTemplate = `{
                 }
             }
         },
-        "schema.ReactionItem": {
+        "schema.ReactionRespItem": {
             "type": "object",
             "properties": {
                 "count": {
+                    "description": "Count is the number of users who reacted",
                     "type": "integer"
                 },
+                "emoji": {
+                    "description": "Emoji is the reaction emoji",
+                    "type": "string"
+                },
                 "is_active": {
+                    "description": "IsActive is if current user has reacted",
                     "type": "boolean"
                 },
                 "tooltip": {
+                    "description": "Tooltip is the user's name who reacted",
                     "type": "string"
                 }
             }
         },
-        "schema.ReactionResp": {
-            "type": "object",
-            "properties": {
-                "reaction_summary": {
-                    "type": "object",
-                    "additionalProperties": {
-                        "$ref": "#/definitions/schema.ReactionItem"
-                    }
-                }
-            }
-        },
         "schema.ReasonItem": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 52d30d83..1e93d2b0 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -2955,7 +2955,7 @@
                                     "type": "object",
                                     "properties": {
                                         "data": {
-                                            "$ref": "#/definitions/schema.ReactionResp"
+                                            "$ref": "#/definitions/schema.ReactionRespItem"
                                         }
                                     }
                                 }
@@ -7452,10 +7452,16 @@
         "schema.EditUserProfileReq": {
             "type": "object",
             "required": [
+                "display_name",
                 "email",
                 "user_id"
             ],
             "properties": {
+                "display_name": {
+                    "type": "string",
+                    "maxLength": 30,
+                    "minLength": 4
+                },
                 "email": {
                     "type": "string",
                     "maxLength": 500
@@ -9005,31 +9011,27 @@
                 }
             }
         },
-        "schema.ReactionItem": {
+        "schema.ReactionRespItem": {
             "type": "object",
             "properties": {
                 "count": {
+                    "description": "Count is the number of users who reacted",
                     "type": "integer"
                 },
+                "emoji": {
+                    "description": "Emoji is the reaction emoji",
+                    "type": "string"
+                },
                 "is_active": {
+                    "description": "IsActive is if current user has reacted",
                     "type": "boolean"
                 },
                 "tooltip": {
+                    "description": "Tooltip is the user's name who reacted",
                     "type": "string"
                 }
             }
         },
-        "schema.ReactionResp": {
-            "type": "object",
-            "properties": {
-                "reaction_summary": {
-                    "type": "object",
-                    "additionalProperties": {
-                        "$ref": "#/definitions/schema.ReactionItem"
-                    }
-                }
-            }
-        },
         "schema.ReasonItem": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index a02a46d7..93f8116a 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -444,6 +444,10 @@ definitions:
     type: object
   schema.EditUserProfileReq:
     properties:
+      display_name:
+        maxLength: 30
+        minLength: 4
+        type: string
       email:
         maxLength: 500
         type: string
@@ -453,6 +457,7 @@ definitions:
         maxLength: 30
         type: string
     required:
+    - display_name
     - email
     - user_id
     type: object
@@ -1537,22 +1542,21 @@ definitions:
     required:
     - id
     type: object
-  schema.ReactionItem:
+  schema.ReactionRespItem:
     properties:
       count:
+        description: Count is the number of users who reacted
         type: integer
+      emoji:
+        description: Emoji is the reaction emoji
+        type: string
       is_active:
+        description: IsActive is if current user has reacted
         type: boolean
       tooltip:
+        description: Tooltip is the user's name who reacted
         type: string
     type: object
-  schema.ReactionResp:
-    properties:
-      reaction_summary:
-        additionalProperties:
-          $ref: '#/definitions/schema.ReactionItem'
-        type: object
-    type: object
   schema.ReasonItem:
     properties:
       content_type:
@@ -4496,7 +4500,7 @@ paths:
             - $ref: '#/definitions/handler.RespBody'
             - properties:
                 data:
-                  $ref: '#/definitions/schema.ReactionResp'
+                  $ref: '#/definitions/schema.ReactionRespItem'
               type: object
       security:
       - ApiKeyAuth: []
diff --git a/i18n/en_US.yaml b/i18n/en_US.yaml
index 88fd6e7f..73ec16fa 100644
--- a/i18n/en_US.yaml
+++ b/i18n/en_US.yaml
@@ -1548,6 +1548,9 @@ ui:
       title: Edit profile
       form:
         fields:
+          display_name:
+            label: Display name
+            msg_range: Display name up to 30 characters.
           username:
             label: Username
             msg_range: Username up to 30 characters.
diff --git a/internal/controller/meta_controller.go b/internal/controller/meta_controller.go
index 5091b207..1ae3ab91 100644
--- a/internal/controller/meta_controller.go
+++ b/internal/controller/meta_controller.go
@@ -70,7 +70,7 @@ func (mc *MetaController) AddOrUpdateReaction(ctx *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param object_id query string true "object_id"
-// @Success 200 {object} handler.RespBody{data=schema.ReactionResp}
+// @Success 200 {object} handler.RespBody{data=schema.ReactionRespItem}
 // @Router /answer/api/v1/meta/reaction [get]
 func (mc *MetaController) GetReaction(ctx *gin.Context) {
 	req := &schema.GetReactionReq{}
diff --git a/internal/repo/user/user_repo.go b/internal/repo/user/user_repo.go
index f3faa381..fef1fa71 100644
--- a/internal/repo/user/user_repo.go
+++ b/internal/repo/user/user_repo.go
@@ -177,7 +177,7 @@ func (ur *userRepo) UpdateInfo(ctx context.Context, userInfo *entity.User) (err
 // UpdateUserProfile update user profile
 func (ur *userRepo) UpdateUserProfile(ctx context.Context, userInfo *entity.User) (err error) {
 	_, err = ur.data.DB.Context(ctx).Where("id = ?", userInfo.ID).
-		Cols("username", "e_mail", "mail_status").Update(userInfo)
+		Cols("username", "e_mail", "mail_status", "display_name").Update(userInfo)
 	if err != nil {
 		err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
 	}
diff --git a/internal/schema/backyard_user_schema.go b/internal/schema/backyard_user_schema.go
index 2418d5a7..9f8733b2 100644
--- a/internal/schema/backyard_user_schema.go
+++ b/internal/schema/backyard_user_schema.go
@@ -111,6 +111,7 @@ type UpdateUserRoleReq struct {
 // EditUserProfileReq edit user profile request
 type EditUserProfileReq struct {
 	UserID      string `validate:"required" json:"user_id"`
+	DisplayName string `validate:"required,gte=4,lte=30" json:"display_name"`
 	Username    string `validate:"omitempty,gt=3,lte=30" json:"username"`
 	Email       string `validate:"required,email,gt=0,lte=500" json:"email"`
 	LoginUserID string `json:"-"`
diff --git a/internal/service/user_admin/user_backyard.go b/internal/service/user_admin/user_backyard.go
index 6ce98f99..2d574454 100644
--- a/internal/service/user_admin/user_backyard.go
+++ b/internal/service/user_admin/user_backyard.go
@@ -391,6 +391,7 @@ func (us *UserAdminService) EditUserProfile(ctx context.Context, req *schema.Edi
 
 	user := &entity.User{}
 	user.ID = req.UserID
+	user.DisplayName = req.DisplayName
 	user.Username = req.Username
 	user.EMail = req.Email
 	user.MailStatus = entity.EmailStatusAvailable
diff --git a/ui/src/hooks/useChangeProfileModal/index.tsx b/ui/src/hooks/useChangeProfileModal/index.tsx
index e4496461..6d0ce456 100644
--- a/ui/src/hooks/useChangeProfileModal/index.tsx
+++ b/ui/src/hooks/useChangeProfileModal/index.tsx
@@ -45,8 +45,13 @@ const useChangeProfileModal = (props: IProps = {}, userData) => {
   const [userId, setUserId] = useState('');
   const schema: JSONSchema = {
     title: t('title'),
-    required: ['username', 'email'],
+    required: ['display_name', 'username', 'email'],
     properties: {
+      display_name: {
+        type: 'string',
+        title: t('form.fields.display_name.label'),
+        default: userData.display_name,
+      },
       username: {
         type: 'string',
         title: t('form.fields.username.label'),
@@ -60,6 +65,19 @@ const useChangeProfileModal = (props: IProps = {}, userData) => {
     },
   };
   const uiSchema: UISchema = {
+    display_name: {
+      'ui:options': {
+        inputType: 'text',
+        validator: (value) => {
+          const MIN_LENGTH = 3;
+          const MAX_LENGTH = 30;
+          if (value.length < MIN_LENGTH || value.length > MAX_LENGTH) {
+            return t('form.fields.display_name.msg_range');
+          }
+          return true;
+        },
+      },
+    },
     username: {
       'ui:options': {
         inputType: 'text',
@@ -114,6 +132,7 @@ const useChangeProfileModal = (props: IProps = {}, userData) => {
 
     if (onConfirm instanceof Function) {
       onConfirm({
+        display_name: formData.display_name.value,
         username: formData.username.value,
         email: formData.email.value,
         user_id: userId,
diff --git a/ui/src/services/admin/users.ts b/ui/src/services/admin/users.ts
index 910c10a3..ee8cad5d 100644
--- a/ui/src/services/admin/users.ts
+++ b/ui/src/services/admin/users.ts
@@ -69,6 +69,7 @@ export const updateUserPassword = (params: {
 };
 
 export const updateUserProfile = (params: {
+  display_name: string;
   username: string;
   email: string;
   user_id: string;


(incubator-answer) 02/02: fix: Fix old user information still showing when editing repeatedly

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-answer.git

commit bbefbbcb6446e37813e40a4a86c3fe342d736b29
Author: sy-records <52...@qq52o.cn>
AuthorDate: Tue Jul 23 08:39:24 2024 +0800

    fix: Fix old user information still showing when editing repeatedly
---
 ui/src/hooks/useChangeProfileModal/index.tsx | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/src/hooks/useChangeProfileModal/index.tsx b/ui/src/hooks/useChangeProfileModal/index.tsx
index 6d0ce456..6f85e25d 100644
--- a/ui/src/hooks/useChangeProfileModal/index.tsx
+++ b/ui/src/hooks/useChangeProfileModal/index.tsx
@@ -112,7 +112,7 @@ const useChangeProfileModal = (props: IProps = {}, userData) => {
   }>(null);
 
   const onClose = () => {
-    setFormData(initFormData(schema));
+    setFormData(formData);
     setVisibleState(false);
   };