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);
};