58 lines
1.2 KiB
TypeScript
58 lines
1.2 KiB
TypeScript
import { app } from '@/app.ts';
|
|
import { User } from '@/models/user.ts';
|
|
|
|
app
|
|
.route({
|
|
path: 'user',
|
|
key: 'getUpdateInfo',
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const tokenUser = ctx.state?.tokenUser || {};
|
|
const user = await User.findByPk(tokenUser.id);
|
|
if (!user) {
|
|
ctx.throw(500, 'user not found');
|
|
}
|
|
ctx.body = {
|
|
nickname: user.nickname,
|
|
avatar: user.avatar,
|
|
data: user.data,
|
|
};
|
|
})
|
|
.addTo(app);
|
|
app
|
|
.route('user', 'updateInfo', {
|
|
middleware: ['auth'],
|
|
})
|
|
.define(async (ctx) => {
|
|
const { nickname, avatar, data } = ctx.query.data || {};
|
|
const tokenUser = ctx.state?.tokenUser || {};
|
|
const { id, uid } = tokenUser;
|
|
const user = await User.findByPk(id);
|
|
let updateData: any = {};
|
|
if (!user) {
|
|
ctx.throw(500, 'user not found');
|
|
}
|
|
if (nickname) {
|
|
updateData.nickname = nickname;
|
|
}
|
|
if (avatar) {
|
|
updateData.avatar = avatar;
|
|
}
|
|
await user.update(
|
|
{
|
|
...updateData,
|
|
data: {
|
|
...user.data,
|
|
...data,
|
|
},
|
|
},
|
|
{
|
|
fields: ['nickname', 'avatar', 'data'],
|
|
},
|
|
);
|
|
user.setTokenUser(tokenUser);
|
|
ctx.body = await user.getInfo();
|
|
})
|
|
.addTo(app);
|