Files
ZYZ/web-server/app/db/User.ts
liangtongchuan c53db8634d 修改代码格式;
数据库查询加 lean 判断;
其它内容微调。
2020-08-27 20:01:40 +08:00

75 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { COUNTER } from './../consts/consts';
import { CounterModel } from './Counter';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
/**
* 用户字段接口
*/
@index({ tel: 1 })
@index({ uid: 1 })
export default class User extends BaseModel {
@prop({ required: true })
uid: number;
@prop({ required: true })
username: string;
@prop({ required: true })
token: string;
@prop({ required: true })
tel: string;
@prop({ required: true })
telHash: string;
@prop({ required: true })
lastLoginTime: Date;
@prop({ required: true })
createTime: Date;
// 平台ios, android, web, pc
@prop({ required: true })
platform: string;
@prop({ required: true })
pkgName: string;
// 服务器类型official, channel, ios, oversea
@prop({ required: true })
serverType: string;
public static async updateToken(tel: string, token: string, platform: string, pkgName: string, serverType: string, lean = true) {
let user = await UserModel.findOne({ tel }).lean();
const curTime: Date = new Date();
let update = {};
if (!user) {
const uid = await CounterModel.getNewCounter(COUNTER.UID);
update = Object.assign(update, { platform, pkgName, serverType, createTime: curTime, uid, username: `用户${uid}` });
}
update = Object.assign(update, { token, lastLoginTime: curTime });
user = await UserModel.findOneAndUpdate({ tel }, update, { upsert: true, new: true }).lean(lean);
return user;
}
public static async findUserByToken(token: string, lean = true) {
const user = await UserModel.findOne({ token }).select('uid token').lean(lean);
return user;
}
public static async findUserByTel(tel: string, lean = true) {
const user = await UserModel.findOne({ tel }).select('uid tel').lean(lean);
return user;
}
public static async findUserByUid(uid: number, lean = true) {
const user = await UserModel.findOne({ uid }).select('uid tel').lean(lean);
return user;
}
}
export const UserModel = getModelForClass(User);