feat:nickname系统
This commit is contained in:
父節點
2eb3d40009
當前提交
0c8f261948
@ -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
|
||||||
}
|
}
|
||||||
|
載入中…
x
新增問題並參考
Block a user