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('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});