将一些module通用的方法和属性统一到BaseModule中

This commit is contained in:
zhl 2021-04-21 16:15:13 +08:00
parent d2cd8a909e
commit ac81078c19
10 changed files with 87 additions and 82 deletions

View File

@ -29,6 +29,15 @@ export default class ShopController extends BaseController {
} }
} }
@role('anon')
@router('get /shop/test')
async testCreate() {
let record = (await Shop.findOrCreate({name: '上海莱悦口腔门诊部'})).doc
record.showName = '11'
await record.save()
return record
}
@permission('shop:read') @permission('shop:read')
@router('get /shop/:id') @router('get /shop/:id')
async detail(req: any) { async detail(req: any) {

View File

@ -3,24 +3,19 @@ import {
getModelForClass, getModelForClass,
index, index,
modelOptions, modelOptions,
plugin,
pre, pre,
prop prop
} from '@typegoose/typegoose'; } from '@typegoose/typegoose'
import {dbconn} from 'decorators/dbconn'; import { dbconn } from 'decorators/dbconn'
// @ts-ignore // @ts-ignore
import findOrCreate from 'mongoose-findorcreate'; import findOrCreate from 'mongoose-findorcreate'
import { import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
Base, import { IDCounter } from './IDCounter'
FindOrCreate, import { BaseModule } from './Base'
TimeStamps
} from "@typegoose/typegoose/lib/defaultClasses";
import {IDCounter} from "./IDCounter";
interface AccountClass extends Base, TimeStamps {} interface AccountClass extends Base, TimeStamps {}
@dbconn() @dbconn()
@index({ plat: 1, app: 1, openId: 1}, { unique: true }) @index({ plat: 1, app: 1, openId: 1}, { unique: true })
@plugin(findOrCreate)
@modelOptions({schemaOptions: {collection: "account", timestamps: true}}) @modelOptions({schemaOptions: {collection: "account", timestamps: true}})
@pre<AccountClass>('save', async function() { @pre<AccountClass>('save', async function() {
if (!this.sid) { if (!this.sid) {
@ -28,7 +23,7 @@ interface AccountClass extends Base, TimeStamps {}
this.sid = counter.seq; this.sid = counter.seq;
} }
}) })
class AccountClass extends FindOrCreate{ class AccountClass extends BaseModule{
@prop({required: true}) @prop({required: true})
public plat!: string; public plat!: string;
@prop() @prop()
@ -67,4 +62,4 @@ class AccountClass extends FindOrCreate{
} }
} }
export const Account = getModelForClass(AccountClass, {existingConnection: AccountClass['db']}); export const Account = getModelForClass(AccountClass, {existingConnection: AccountClass.db});

34
src/models/Base.ts Normal file
View File

@ -0,0 +1,34 @@
import { FindOrCreate } from '@typegoose/typegoose/lib/defaultClasses'
import { checkJson } from '../decorators/nojson'
import { plugin } from '@typegoose/typegoose'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate'
import { Connection } from 'mongoose'
const jsonExcludeKeys = ['updatedAt', '__v']
const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id']
@plugin(findOrCreate)
export abstract class BaseModule extends FindOrCreate {
static db: Connection
public updateFromReq(data: any) {
for (let key in data) {
if (saveExcludeKeys.indexOf(key) == -1) {
this[key] = data[key]
}
}
}
public toJson() {
let result: any = {}
for (let key in this) {
if (checkJson(this, key+'' ) && jsonExcludeKeys.indexOf(key) == -1) {
result[key] = this[key]
}
}
return result
}
}

View File

@ -2,20 +2,15 @@ import {
getModelForClass, getModelForClass,
index, index,
modelOptions, modelOptions,
plugin,
prop, prop,
ReturnModelType ReturnModelType
} from '@typegoose/typegoose' } from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn' import { dbconn } from 'decorators/dbconn'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate' import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
import {
Base,
FindOrCreate,
TimeStamps
} from '@typegoose/typegoose/lib/defaultClasses'
import { genRandomString, sha512 } from 'utils/security.util' import { genRandomString, sha512 } from 'utils/security.util'
import { BaseModule } from '../Base'
/** /**
* salt和hash * salt和hash
@ -44,12 +39,12 @@ export function verifyPass(userpassword: string, passwordDb: string, salt: strin
export interface AdminClass extends Base, TimeStamps { export interface AdminClass extends Base, TimeStamps {
} }
@dbconn() @dbconn()
@index({ username: 1 }, { unique: true }) @index({ username: 1 }, { unique: true })
@modelOptions({ schemaOptions: { collection: 'admin_user', timestamps: true } }) @modelOptions({ schemaOptions: { collection: 'admin_user', timestamps: true } })
@plugin(findOrCreate)
// @ts-ignore // @ts-ignore
class AdminClass extends FindOrCreate { class AdminClass extends BaseModule {
@prop({ maxlength: 20, minlength: 5, required: true }) @prop({ maxlength: 20, minlength: 5, required: true })
public username: string public username: string
@prop({ required: true }) @prop({ required: true })

View File

@ -8,6 +8,7 @@ import {
} from "@typegoose/typegoose"; } from "@typegoose/typegoose";
import {AdminClass} from "./Admin"; import {AdminClass} from "./Admin";
import {Severity} from "@typegoose/typegoose/lib/internal/constants"; import {Severity} from "@typegoose/typegoose/lib/internal/constants";
import { BaseModule } from '../Base'
/** /**
* *
@ -15,7 +16,7 @@ import {Severity} from "@typegoose/typegoose/lib/internal/constants";
@dbconn() @dbconn()
@modelOptions({schemaOptions: {collection: "admin_log", timestamps: true}, @modelOptions({schemaOptions: {collection: "admin_log", timestamps: true},
options: {allowMixed: Severity.ALLOW}}) options: {allowMixed: Severity.ALLOW}})
class AdminLogClass { class AdminLogClass extends BaseModule{
@prop({ ref: 'AdminClass' }) @prop({ ref: 'AdminClass' })
public admin: Ref<AdminClass>; public admin: Ref<AdminClass>;
@prop() @prop()

View File

@ -1,19 +1,10 @@
import { import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
getModelForClass, import { dbconn } from 'decorators/dbconn'
index, import { BaseModule } from '../Base'
modelOptions,
plugin,
prop
} from '@typegoose/typegoose';
import {dbconn} from 'decorators/dbconn';
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate';
import {FindOrCreate} from "@typegoose/typegoose/lib/defaultClasses";
@dbconn() @dbconn()
@plugin(findOrCreate)
@modelOptions({schemaOptions: {collection: "admin_role", _id: false, timestamps: true}}) @modelOptions({schemaOptions: {collection: "admin_role", _id: false, timestamps: true}})
export class AdminRoleClass extends FindOrCreate{ export class AdminRoleClass extends BaseModule{
@prop() @prop()
public _id: string; public _id: string;
@prop() @prop()
@ -50,4 +41,4 @@ export class AdminRoleClass extends FindOrCreate{
} }
export const AdminRole = getModelForClass(AdminRoleClass, {existingConnection: AdminRoleClass['db']}); export const AdminRole = getModelForClass(AdminRoleClass, {existingConnection: AdminRoleClass.db});

View File

@ -1,18 +1,15 @@
import { import {
getModelForClass, index, getModelForClass,
index,
modelOptions, modelOptions,
plugin,
prop prop
} from '@typegoose/typegoose' } from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn' import { dbconn } from 'decorators/dbconn'
// @ts-ignore // @ts-ignore
import findOrCreate from 'mongoose-findorcreate' import findOrCreate from 'mongoose-findorcreate'
import { import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
Base,
FindOrCreate,
TimeStamps
} from '@typegoose/typegoose/lib/defaultClasses'
import { checkJson, noJson } from '../../decorators/nojson' import { checkJson, noJson } from '../../decorators/nojson'
import { BaseModule } from '../Base'
const jsonExcludeKeys = ['updatedAt', '__v'] const jsonExcludeKeys = ['updatedAt', '__v']
const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id'] const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id']
@ -50,10 +47,9 @@ interface ArticleClass extends Base, TimeStamps {
} }
@dbconn() @dbconn()
@plugin(findOrCreate)
@index({'tags': 1}, {unique: false}) @index({'tags': 1}, {unique: false})
@modelOptions({ schemaOptions: { collection: 'articles', timestamps: true } }) @modelOptions({ schemaOptions: { collection: 'articles', timestamps: true } })
class ArticleClass extends FindOrCreate { class ArticleClass extends BaseModule {
/** /**
* *
* @type {string} * @type {string}

12
src/models/shop/Coupon.ts Normal file
View File

@ -0,0 +1,12 @@
import { getModelForClass, modelOptions } from '@typegoose/typegoose'
import { dbconn } from '../../decorators/dbconn'
import { BaseModule } from '../Base'
@dbconn()
@modelOptions({ schemaOptions: { collection: 'shop_coupon', timestamps: true } })
class CouponClass extends BaseModule {
}
export const Coupon = getModelForClass(CouponClass, { existingConnection: CouponClass.db })

View File

@ -1,23 +1,12 @@
import { FindOrCreate } from '@typegoose/typegoose/lib/defaultClasses' import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate'
import {
getModelForClass,
index,
modelOptions,
plugin, post, prop
} from '@typegoose/typegoose'
import { dbconn } from '../../decorators/dbconn' import { dbconn } from '../../decorators/dbconn'
import { checkJson, noJson } from '../../decorators/nojson' import { noJson } from '../../decorators/nojson'
import { BaseModule } from '../Base'
const jsonExcludeKeys = ['updatedAt', '__v']
const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id']
@dbconn() @dbconn()
@plugin(findOrCreate)
@modelOptions({ schemaOptions: { collection: 'shop', timestamps: true } }) @modelOptions({ schemaOptions: { collection: 'shop', timestamps: true } })
class ShopClass extends FindOrCreate { class ShopClass extends BaseModule {
@prop({ required: true }) @prop({ required: true })
public name!: string public name!: string
/** /**
@ -92,24 +81,6 @@ class ShopClass extends FindOrCreate {
public extData: string public extData: string
public updateFromReq(data: any) {
for (let key in data) {
if (saveExcludeKeys.indexOf(key) == -1) {
this[key] = data[key]
}
}
}
public toJson() {
let result: any = {}
for (let key in this) {
if (checkJson(this, key+'' ) && jsonExcludeKeys.indexOf(key) == -1) {
result[key] = this[key]
}
}
return result
}
public static parseQueryParam(params) { public static parseQueryParam(params) {
let {key, timeBegin, timeEnd} = params let {key, timeBegin, timeEnd} = params
let opt: any = {deleted: false, show: true} let opt: any = {deleted: false, show: true}
@ -130,4 +101,4 @@ class ShopClass extends FindOrCreate {
} }
export const Shop = getModelForClass(ShopClass, { existingConnection: ShopClass['db'] }) export const Shop = getModelForClass(ShopClass, { existingConnection: ShopClass.db })

View File

@ -72,7 +72,8 @@ const zAuthPlugin: FastifyPluginAsync = async function (
return return
} catch (err) { } catch (err) {
return reply.send({ code: 401, msg: 'need auth' }) // return reply.send({ code: 401, msg: 'need auth' })
return
} }
} }