diff --git a/packages/core/src/routes/admin-user.ts b/packages/core/src/routes/admin-user.ts index 5de5bc9e6..792c89da3 100644 --- a/packages/core/src/routes/admin-user.ts +++ b/packages/core/src/routes/admin-user.ts @@ -94,6 +94,34 @@ export default function adminUserRoutes(router: T) { } ); + router.patch( + '/users/:userId', + koaGuard({ + params: object({ userId: string().min(1) }), + body: object({ + name: string().min(3).optional(), + avatar: string().url().optional(), + }), + }), + async (ctx, next) => { + const { + params: { userId }, + body: { name, avatar }, + } = ctx.guard; + + await findUserById(userId); + + const user = await updateUserById(userId, { + name, + avatar, + }); + + ctx.body = pick(user, ...userInfoSelectFields); + + return next(); + } + ); + router.patch( '/users/:userId/roleNames', koaGuard({ diff --git a/packages/schemas/src/types/user.ts b/packages/schemas/src/types/user.ts index dc755f593..04d0e09b5 100644 --- a/packages/schemas/src/types/user.ts +++ b/packages/schemas/src/types/user.ts @@ -5,6 +5,8 @@ export const userInfoSelectFields = Object.freeze([ 'username', 'primaryEmail', 'primaryPhone', + 'name', + 'avatar', 'roleNames', 'customData', ] as const);