From ac81078c19b5d81ab71e895a158cef464a34448a Mon Sep 17 00:00:00 2001 From: zhl Date: Wed, 21 Apr 2021 16:15:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E4=B8=80=E4=BA=9Bmodule=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=96=B9=E6=B3=95=E5=92=8C=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=88=B0BaseModule=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/admin/controllers/shop.controller.ts | 9 ++++++ src/models/Account.ts | 21 +++++-------- src/models/Base.ts | 34 +++++++++++++++++++++ src/models/admin/Admin.ts | 15 +++------ src/models/admin/AdminLog.ts | 3 +- src/models/admin/AdminRole.ts | 19 +++--------- src/models/content/Article.ts | 14 +++------ src/models/shop/Coupon.ts | 12 ++++++++ src/models/shop/Shop.ts | 39 +++--------------------- src/plugins/zauth.ts | 3 +- 10 files changed, 87 insertions(+), 82 deletions(-) create mode 100644 src/models/Base.ts create mode 100644 src/models/shop/Coupon.ts diff --git a/src/admin/controllers/shop.controller.ts b/src/admin/controllers/shop.controller.ts index e9d8c26..1eb2ee3 100644 --- a/src/admin/controllers/shop.controller.ts +++ b/src/admin/controllers/shop.controller.ts @@ -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) { diff --git a/src/models/Account.ts b/src/models/Account.ts index 65df304..4ce4b76 100644 --- a/src/models/Account.ts +++ b/src/models/Account.ts @@ -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('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}); diff --git a/src/models/Base.ts b/src/models/Base.ts new file mode 100644 index 0000000..a5f1033 --- /dev/null +++ b/src/models/Base.ts @@ -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 + } +} diff --git a/src/models/admin/Admin.ts b/src/models/admin/Admin.ts index d64acbe..0e9dce7 100644 --- a/src/models/admin/Admin.ts +++ b/src/models/admin/Admin.ts @@ -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 }) diff --git a/src/models/admin/AdminLog.ts b/src/models/admin/AdminLog.ts index b82d8b4..c1e0583 100644 --- a/src/models/admin/AdminLog.ts +++ b/src/models/admin/AdminLog.ts @@ -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; @prop() diff --git a/src/models/admin/AdminRole.ts b/src/models/admin/AdminRole.ts index f307133..67fc07e 100644 --- a/src/models/admin/AdminRole.ts +++ b/src/models/admin/AdminRole.ts @@ -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}); diff --git a/src/models/content/Article.ts b/src/models/content/Article.ts index fe3d555..38a0094 100644 --- a/src/models/content/Article.ts +++ b/src/models/content/Article.ts @@ -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} diff --git a/src/models/shop/Coupon.ts b/src/models/shop/Coupon.ts new file mode 100644 index 0000000..f0400c9 --- /dev/null +++ b/src/models/shop/Coupon.ts @@ -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 }) diff --git a/src/models/shop/Shop.ts b/src/models/shop/Shop.ts index 3d442a2..d44b6e1 100644 --- a/src/models/shop/Shop.ts +++ b/src/models/shop/Shop.ts @@ -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 }) diff --git a/src/plugins/zauth.ts b/src/plugins/zauth.ts index f418ea5..6497c49 100644 --- a/src/plugins/zauth.ts +++ b/src/plugins/zauth.ts @@ -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 } }