feat:nickname系统

This commit is contained in:
juzeon 2021-10-11 19:26:44 +08:00
父節點 2eb3d40009
當前提交 0c8f261948
共有 7 個檔案被更改,包括 50 行新增1 行删除

查看文件

@ -5,6 +5,7 @@ export function fillIUser(single: any) {
id: single.id, id: single.id,
username: single.username, username: single.username,
realName: single.realName, realName: single.realName,
nickname: single.nickname,
avatar: single.avatar, avatar: single.avatar,
role: single.role role: single.role
} }

查看文件

@ -13,7 +13,7 @@ export class PostModel {
} }
async findPostsByStatus(status: TPostStatus, page: number) { async findPostsByStatus(status: TPostStatus, page: number) {
return db.query('select p.*,u.realName,u.avatar from posts p left join users u on u.id=p.userId where p.status=? order by p.time desc ' return db.query('select p.*,u.realName,u.nickname,u.username,u.avatar from posts p left join users u on u.id=p.userId where p.status=? order by p.time desc '
+ pageToLimitSqlSegment(page), [status]) + pageToLimitSqlSegment(page), [status])
} }

查看文件

@ -32,4 +32,16 @@ export class UserModel {
async updateAvatar(id: number, avatar: string) { async updateAvatar(id: number, avatar: string) {
await db.query('update users set avatar=? where id=?', [avatar, id]) await db.query('update users set avatar=? where id=?', [avatar, id])
} }
async updateNickname(id: number, nickname: string) {
await db.query('update users set nickname=? where id=?', [nickname, id])
}
async findUserByNickname(nickname: string) {
let user = await db.query('select * from users where nickname=?', [nickname])
if (!user.length) {
return null
}
return fillIUser(user[0])
}
} }

查看文件

@ -31,5 +31,17 @@ userRouter.post('/uploadAvatar',
res.json(await userService.uploadAvatar(req.user as JWTUserPayload, req.files.image as UploadedFile)) res.json(await userService.uploadAvatar(req.user as JWTUserPayload, req.files.image as UploadedFile))
}) })
) )
userRouter.post('/updateNickname',
body('nickname').notEmpty().withMessage('请输入昵称').isLength({max: 31}).custom((input, meta) => {
if (!/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/.test(input)) {
throw new Error('昵称只能包括中文,英文字母和数字及「_」')
}
return true
}),
expressAsyncHandler(async (req: express.Request, res: express.Response) => {
if (hasValidationErrors(req, res)) return
res.json(await userService.updateNickname(req.user as JWTUserPayload, req.body.nickname))
})
)
export {userRouter} export {userRouter}

查看文件

@ -22,6 +22,20 @@ export class PostService {
async listPublished(page: number) { async listPublished(page: number) {
let posts = await this.postModel.findPostsByStatus(2, page) let posts = await this.postModel.findPostsByStatus(2, page)
posts = posts.map((single: any) => {
if (!single.nickname) {
let stars = ''
for (let i = 0; i < single.username.length - 6; i++) {
stars += '*'
}
single.nickname = single.username.substring(0, 4)
+ stars
+ single.username.substring(single.username.length - 2, single.username.length)
}
delete single.realName
delete single.username
return single
})
return resultJson.success(posts) return resultJson.success(posts)
} }
} }

查看文件

@ -72,4 +72,13 @@ export class UserService {
await this.userModel.updateAvatar(jwtUserPayload.id, avatar) await this.userModel.updateAvatar(jwtUserPayload.id, avatar)
return resultJson.success(avatar) return resultJson.success(avatar)
} }
async updateNickname(jwtUserPayload: JWTUserPayload, nickname: string) {
let user = await this.userModel.findUserByNickname(nickname)
if (user && user.id !== jwtUserPayload.id) {
return resultJson.error('该昵称已被使用')
}
await this.userModel.updateNickname(jwtUserPayload.id, nickname)
return resultJson.success(nickname)
}
} }

查看文件

@ -9,6 +9,7 @@ export interface IUser {
id?: number, id?: number,
username: string, username: string,
realName: string, realName: string,
nickname?: string,
avatar?: string, avatar?: string,
role: TUserRole role: TUserRole
} }