65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import {
|
|
getModelForClass,
|
|
index,
|
|
modelOptions,
|
|
pre,
|
|
prop
|
|
} from '@typegoose/typegoose'
|
|
import { dbconn } from 'decorators/dbconn'
|
|
// @ts-ignore
|
|
import findOrCreate from 'mongoose-findorcreate'
|
|
import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
|
|
import { IDCounter } from './IDCounter'
|
|
import { BaseModule } from './Base'
|
|
|
|
interface AccountClass extends Base, TimeStamps {}
|
|
@dbconn()
|
|
@index({ plat: 1, app: 1, openId: 1}, { unique: true })
|
|
@modelOptions({schemaOptions: {collection: "account", timestamps: true}})
|
|
@pre<AccountClass>('save', async function() {
|
|
if (!this.sid) {
|
|
let counter = await IDCounter.nextCount();
|
|
this.sid = counter.seq;
|
|
}
|
|
})
|
|
class AccountClass extends BaseModule{
|
|
@prop({required: true})
|
|
public plat!: string;
|
|
@prop()
|
|
public sid: number;
|
|
@prop({required: true})
|
|
public app!: string;
|
|
@prop({required: true})
|
|
public openId!: string;
|
|
@prop()
|
|
public unionId?: string;
|
|
@prop()
|
|
public nickname?: string;
|
|
@prop()
|
|
public avatar?: string;
|
|
@prop({default: 0})
|
|
public sex?: string;
|
|
@prop({default: 'CN'})
|
|
public country?: string;
|
|
@prop()
|
|
public province?: string;
|
|
@prop()
|
|
public city?: string;
|
|
@prop({default: false})
|
|
public locked: boolean;
|
|
@prop()
|
|
public lockedTime?: Date;
|
|
@prop()
|
|
public comment?: string;
|
|
@prop({ type: () => [String], default: [] })
|
|
public friends: string[];
|
|
@prop()
|
|
public lastLogin?: Date;
|
|
|
|
public hasFriend(otherId: string): boolean {
|
|
return this.friends.indexOf(otherId) >= 0;
|
|
}
|
|
}
|
|
|
|
export const Account = getModelForClass(AccountClass, {existingConnection: AccountClass.db});
|