将一些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')
@router('get /shop/:id')
async detail(req: any) {

View File

@ -3,24 +3,19 @@ import {
getModelForClass,
index,
modelOptions,
plugin,
pre,
prop
} from '@typegoose/typegoose';
import {dbconn} from 'decorators/dbconn';
} from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate';
import {
Base,
FindOrCreate,
TimeStamps
} from "@typegoose/typegoose/lib/defaultClasses";
import {IDCounter} from "./IDCounter";
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 })
@plugin(findOrCreate)
@modelOptions({schemaOptions: {collection: "account", timestamps: true}})
@pre<AccountClass>('save', async function() {
if (!this.sid) {
@ -28,7 +23,7 @@ interface AccountClass extends Base, TimeStamps {}
this.sid = counter.seq;
}
})
class AccountClass extends FindOrCreate{
class AccountClass extends BaseModule{
@prop({required: true})
public plat!: string;
@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,
index,
modelOptions,
plugin,
prop,
ReturnModelType
} from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate'
import {
Base,
FindOrCreate,
TimeStamps
} from '@typegoose/typegoose/lib/defaultClasses'
import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
import { genRandomString, sha512 } from 'utils/security.util'
import { BaseModule } from '../Base'
/**
* salt和hash
@ -44,12 +39,12 @@ export function verifyPass(userpassword: string, passwordDb: string, salt: strin
export interface AdminClass extends Base, TimeStamps {
}
@dbconn()
@index({ username: 1 }, { unique: true })
@modelOptions({ schemaOptions: { collection: 'admin_user', timestamps: true } })
@plugin(findOrCreate)
// @ts-ignore
class AdminClass extends FindOrCreate {
class AdminClass extends BaseModule {
@prop({ maxlength: 20, minlength: 5, required: true })
public username: string
@prop({ required: true })

View File

@ -8,6 +8,7 @@ import {
} from "@typegoose/typegoose";
import {AdminClass} from "./Admin";
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()
@modelOptions({schemaOptions: {collection: "admin_log", timestamps: true},
options: {allowMixed: Severity.ALLOW}})
class AdminLogClass {
class AdminLogClass extends BaseModule{
@prop({ ref: 'AdminClass' })
public admin: Ref<AdminClass>;
@prop()

View File

@ -1,19 +1,10 @@
import {
getModelForClass,
index,
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";
import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn'
import { BaseModule } from '../Base'
@dbconn()
@plugin(findOrCreate)
@modelOptions({schemaOptions: {collection: "admin_role", _id: false, timestamps: true}})
export class AdminRoleClass extends FindOrCreate{
export class AdminRoleClass extends BaseModule{
@prop()
public _id: string;
@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 {
getModelForClass, index,
getModelForClass,
index,
modelOptions,
plugin,
prop
} from '@typegoose/typegoose'
import { dbconn } from 'decorators/dbconn'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate'
import {
Base,
FindOrCreate,
TimeStamps
} from '@typegoose/typegoose/lib/defaultClasses'
import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses'
import { checkJson, noJson } from '../../decorators/nojson'
import { BaseModule } from '../Base'
const jsonExcludeKeys = ['updatedAt', '__v']
const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id']
@ -50,10 +47,9 @@ interface ArticleClass extends Base, TimeStamps {
}
@dbconn()
@plugin(findOrCreate)
@index({'tags': 1}, {unique: false})
@modelOptions({ schemaOptions: { collection: 'articles', timestamps: true } })
class ArticleClass extends FindOrCreate {
class ArticleClass extends BaseModule {
/**
*
* @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'
// @ts-ignore
import findOrCreate from 'mongoose-findorcreate'
import {
getModelForClass,
index,
modelOptions,
plugin, post, prop
} from '@typegoose/typegoose'
import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose'
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()
@plugin(findOrCreate)
@modelOptions({ schemaOptions: { collection: 'shop', timestamps: true } })
class ShopClass extends FindOrCreate {
class ShopClass extends BaseModule {
@prop({ required: true })
public name!: string
/**
@ -92,24 +81,6 @@ class ShopClass extends FindOrCreate {
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) {
let {key, timeBegin, timeEnd} = params
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
} catch (err) {
return reply.send({ code: 401, msg: 'need auth' })
// return reply.send({ code: 401, msg: 'need auth' })
return
}
}