corgi/src/models/Account.ts
2021-04-27 17:25:28 +08:00

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