From d81c2dc1d72c7da8e5e36bbd579ae6d54e210184 Mon Sep 17 00:00:00 2001 From: Innei Date: Sat, 12 Mar 2022 14:12:26 +0800 Subject: [PATCH] feat(serverless): add `getMaster` --- src/modules/serverless/serverless.service.ts | 27 +++++++++++++++++++ src/processors/database/database.service.ts | 11 +++++--- src/shared/model/base.model.ts | 1 + .../serverless/serverless.service.spec.ts | 2 ++ .../snippet/snippet.controller.e2e-spec.ts | 3 ++- .../modules/snippet/snippet.service.spec.ts | 3 ++- 6 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/modules/serverless/serverless.service.ts b/src/modules/serverless/serverless.service.ts index 9b42c97e..1bf24963 100644 --- a/src/modules/serverless/serverless.service.ts +++ b/src/modules/serverless/serverless.service.ts @@ -11,6 +11,7 @@ import { InjectModel } from 'nestjs-typegoose' import path from 'path' import { nextTick } from 'process' import { DATA_DIR, NODE_REQUIRE_PATH } from '~/constants/path.constant' +import { DatabaseService } from '~/processors/database/database.service' import { AssetService } from '~/processors/helper/helper.asset.service' import { HttpService } from '~/processors/helper/helper.http.service' import { UniqueArray } from '~/ts-hepler/unique' @@ -31,6 +32,7 @@ export class ServerlessService { private readonly snippetModel: MongooseModel, private readonly assetService: AssetService, private readonly httpService: HttpService, + private readonly databaseService: DatabaseService, ) { nextTick(() => { // Add /includes/plugin to the path, also note that we need to support @@ -82,6 +84,31 @@ export class ServerlessService { document, name: model.name, reference: model.reference, + getMaster: async () => { + const collection = this.databaseService.db.collection('users') + const cur = collection.aggregate([ + { + $project: { + id: 1, + _id: 1, + username: 1, + name: 1, + introduce: 1, + avatar: 1, + mail: 1, + url: 1, + lastLoginTime: 1, + lastLoginIp: 1, + socialIds: 1, + }, + }, + ]) + + return await cur.next().then((doc) => { + cur.close() + return doc + }) + }, writeAsset: async ( path: string, diff --git a/src/processors/database/database.service.ts b/src/processors/database/database.service.ts index 755e531b..8bcb9b5b 100644 --- a/src/processors/database/database.service.ts +++ b/src/processors/database/database.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from '@nestjs/common' -import { ReturnModelType } from '@typegoose/typegoose' -import { InjectModel } from 'nestjs-typegoose' +import { Inject, Injectable } from '@nestjs/common' +import { mongoose, ReturnModelType } from '@typegoose/typegoose' +import { getConnectionToken, InjectModel } from 'nestjs-typegoose' import { NoteModel } from '~/modules/note/note.model' import { PageModel } from '~/modules/page/page.model' import { PostModel } from '~/modules/post/post.model' @@ -14,6 +14,7 @@ export class DatabaseService { private readonly noteModel: ReturnModelType, @InjectModel(PageModel) private readonly pageModel: ReturnModelType, + @Inject(getConnectionToken()) private connection: mongoose.Connection, ) {} // @ts-ignore @@ -55,4 +56,8 @@ export class DatabaseService { type: ['Post', 'Note', 'Page'][index], } } + + public get db() { + return this.connection.db + } } diff --git a/src/shared/model/base.model.ts b/src/shared/model/base.model.ts index e01df1c5..1dc1213d 100644 --- a/src/shared/model/base.model.ts +++ b/src/shared/model/base.model.ts @@ -26,6 +26,7 @@ import Paginate from 'mongoose-paginate-v2' createdAt: 'created', updatedAt: null, }, + versionKey: false, }, }) export class BaseModel { diff --git a/test/src/modules/serverless/serverless.service.spec.ts b/test/src/modules/serverless/serverless.service.spec.ts index 7b583ede..ed80ffc9 100644 --- a/test/src/modules/serverless/serverless.service.spec.ts +++ b/test/src/modules/serverless/serverless.service.spec.ts @@ -6,6 +6,7 @@ import { createMockedContextResponse } from '~/modules/serverless/mock-response. import { ServerlessService } from '~/modules/serverless/serverless.service' import { SnippetModel, SnippetType } from '~/modules/snippet/snippet.model' import { CacheService } from '~/processors/cache/cache.service' +import { DatabaseService } from '~/processors/database/database.service' import { AssetService } from '~/processors/helper/helper.asset.service' import { HttpService } from '~/processors/helper/helper.http.service' @@ -23,6 +24,7 @@ describe('test serverless function service', () => { provide: CacheService, useValue: {}, }, + { provide: DatabaseService, useValue: {} }, { provide: getModelToken('SnippetModel'), diff --git a/test/src/modules/snippet/snippet.controller.e2e-spec.ts b/test/src/modules/snippet/snippet.controller.e2e-spec.ts index 740e5cce..5a00dce0 100644 --- a/test/src/modules/snippet/snippet.controller.e2e-spec.ts +++ b/test/src/modules/snippet/snippet.controller.e2e-spec.ts @@ -8,6 +8,7 @@ import { ServerlessService } from '~/modules/serverless/serverless.service' import { SnippetController } from '~/modules/snippet/snippet.controller' import { SnippetModel, SnippetType } from '~/modules/snippet/snippet.model' import { SnippetService } from '~/modules/snippet/snippet.service' +import { DatabaseService } from '~/processors/database/database.service' describe('test /snippets', () => { let app: NestFastifyApplication @@ -34,7 +35,7 @@ describe('test /snippets', () => { controllers: [SnippetController], providers: [ SnippetService, - + { provide: DatabaseService, useValue: {} }, { provide: ServerlessService, useValue: { diff --git a/test/src/modules/snippet/snippet.service.spec.ts b/test/src/modules/snippet/snippet.service.spec.ts index 9a4f1a12..74b78cf0 100644 --- a/test/src/modules/snippet/snippet.service.spec.ts +++ b/test/src/modules/snippet/snippet.service.spec.ts @@ -7,6 +7,7 @@ import { ServerlessService } from '~/modules/serverless/serverless.service' import { SnippetModel, SnippetType } from '~/modules/snippet/snippet.model' import { SnippetService } from '~/modules/snippet/snippet.service' import { CacheService } from '~/processors/cache/cache.service' +import { DatabaseService } from '~/processors/database/database.service' describe('test Snippet Service', () => { let service: SnippetService @@ -16,7 +17,7 @@ describe('test Snippet Service', () => { const moduleRef = Test.createTestingModule({ providers: [ SnippetService, - + { provide: DatabaseService, useValue: {} }, { provide: CacheService, useValue: {} }, { provide: ServerlessService, useValue: {} }, {