From 73daf1e44e693703e1dc07b033fa226d7618cf8b Mon Sep 17 00:00:00 2001 From: MiaoWoo Date: Tue, 11 Jun 2019 13:09:50 +0800 Subject: [PATCH] feat: add cc-server-db --- lerna.json | 5 ++- packages/cc-server-core/package.json | 5 ++- .../cc-server-core/src/function/handle.ts | 9 +++--- .../cc-server-core/src/function/tsconfig.json | 22 ------------- packages/cc-server-core/src/index.ts | 14 ++------ packages/cc-server-db-mongo/package.json | 8 +++-- packages/cc-server-db-mongo/src/client.ts | 32 ++++++++----------- packages/cc-server-db-mongo/src/connection.ts | 4 +-- packages/cc-server-db/.gitignore | 4 +++ packages/cc-server-db/README.md | 11 +++++++ packages/cc-server-db/package.json | 27 ++++++++++++++++ packages/cc-server-db/src/index.ts | 11 +++++++ packages/cc-server-db/tsconfig.json | 7 ++++ packages/cc-server-ioc/package.json | 10 ++++-- packages/cc-server-ioc/src/constant/types.ts | 4 --- packages/cc-server-ioc/src/decorators.ts | 16 ---------- packages/cc-server-ioc/src/index.ts | 24 ++++++++++++-- tsconfig.json | 3 ++ 18 files changed, 129 insertions(+), 87 deletions(-) delete mode 100644 packages/cc-server-core/src/function/tsconfig.json create mode 100644 packages/cc-server-db/.gitignore create mode 100644 packages/cc-server-db/README.md create mode 100644 packages/cc-server-db/package.json create mode 100644 packages/cc-server-db/src/index.ts create mode 100644 packages/cc-server-db/tsconfig.json delete mode 100644 packages/cc-server-ioc/src/constant/types.ts delete mode 100644 packages/cc-server-ioc/src/decorators.ts diff --git a/lerna.json b/lerna.json index 121fc7a..a798233 100644 --- a/lerna.json +++ b/lerna.json @@ -1,8 +1,11 @@ { "npmClient": "yarn", "useWorkspaces": true, + "scripts": { + "build": "npx tsc" + }, "packages": [ "packages/*" ], "version": "0.0.2" -} +} \ No newline at end of file diff --git a/packages/cc-server-core/package.json b/packages/cc-server-core/package.json index fedba65..c474a08 100644 --- a/packages/cc-server-core/package.json +++ b/packages/cc-server-core/package.json @@ -11,6 +11,7 @@ }, "scripts": { "dev": "npx ts-node src/index.ts", + "build": "npx tsc", "test": "echo \"Error: run tests from root\" && exit 1" }, "dependencies": { @@ -24,6 +25,8 @@ }, "devDependencies": { "@types/body-parser": "^1.17.0", + "@types/express": "^4.17.0", "ts-node": "^8.2.0" - } + }, + "gitHead": "7d84393a3cb6be6be9ed51d71f12677d2d7d0728" } diff --git a/packages/cc-server-core/src/function/handle.ts b/packages/cc-server-core/src/function/handle.ts index 3487b51..a430e46 100644 --- a/packages/cc-server-core/src/function/handle.ts +++ b/packages/cc-server-core/src/function/handle.ts @@ -1,18 +1,19 @@ import { - controller, httpGet, httpPost, httpPut, httpDelete + controller, httpGet, httpPost } from 'inversify-express-utils'; import { inject } from 'inversify'; -import { MongoDBClient } from 'cc-server-db-mongo' +import { DBClient } from 'cc-server-db' +import 'cc-server-db-mongo' @controller('/') export class UserController { constructor( - @inject(MongoDBClient) private MongoDBClient: MongoDBClient + @inject(DBClient) private client: DBClient ) { } @httpGet('/') public async getUsers(): Promise { - return [] + return this.client.find('users', {}); } @httpPost('/') diff --git a/packages/cc-server-core/src/function/tsconfig.json b/packages/cc-server-core/src/function/tsconfig.json deleted file mode 100644 index b07591d..0000000 --- a/packages/cc-server-core/src/function/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "outDir": "dist", - "sourceRoot": "src", - "module": "commonjs", - "target": "es5", - "lib": [ - "es6", - "dom" - ], - "noImplicitAny": false, - "sourceMap": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "noUnusedLocals": true - }, - "compileOnSave": false, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/packages/cc-server-core/src/index.ts b/packages/cc-server-core/src/index.ts index 2678d96..1cedaf2 100644 --- a/packages/cc-server-core/src/index.ts +++ b/packages/cc-server-core/src/index.ts @@ -1,19 +1,11 @@ import 'reflect-metadata'; import { InversifyExpressServer } from 'inversify-express-utils'; -import { Container } from 'inversify'; import * as bodyParser from 'body-parser'; +import { container, buildProviderModule } from 'cc-server-ioc'; + import './function/handle'; -import { METADATA_KEY } from 'cc-server-ioc'; -// load everything needed to the Container -let container = new Container(); -Reflect.defineMetadata(METADATA_KEY.container, container, Reflect) - -// auto load service -let services: Function[] = Reflect.getMetadata(METADATA_KEY.service, Reflect); -for (const service of services) { - service() -} +container.load(buildProviderModule()); // start the server let server = new InversifyExpressServer(container); diff --git a/packages/cc-server-db-mongo/package.json b/packages/cc-server-db-mongo/package.json index a76c6fb..27f8f6b 100644 --- a/packages/cc-server-db-mongo/package.json +++ b/packages/cc-server-db-mongo/package.json @@ -10,15 +10,19 @@ "registry": "https://repo.yumc.pw/repository/npm-hosted/" }, "scripts": { + "build": "npx tsc", "test": "echo \"Error: run tests from root\" && exit 1" }, "dependencies": { + "cc-server-db": "^0.0.2", "cc-server-ioc": "^0.0.2", "inversify": "^5.0.1", "mongodb": "^3.2.7", - "reflect-metadata": "^0.1.13" + "reflect-metadata": "^0.1.13", + "typescript": "^3.5.1" }, "devDependencies": { "@types/mongodb": "^3.1.28" - } + }, + "gitHead": "7d84393a3cb6be6be9ed51d71f12677d2d7d0728" } diff --git a/packages/cc-server-db-mongo/src/client.ts b/packages/cc-server-db-mongo/src/client.ts index ddec809..71337ad 100644 --- a/packages/cc-server-db-mongo/src/client.ts +++ b/packages/cc-server-db-mongo/src/client.ts @@ -1,17 +1,10 @@ -import { Db, ObjectID, UpdateWriteOpResult } from 'mongodb'; -import { injectable } from 'inversify'; +import { Db, ObjectID } from 'mongodb'; import { MongoDBConnection } from './connection'; -import { service } from 'cc-server-ioc' +import { provide } from 'cc-server-ioc' +import { DBClient } from 'cc-server-db' -interface DBClient { - find(table: string, where: object): T -} - -export const NAME: string = 'MongoDBClient' - -@service() -@injectable() -export class MongoDBClient implements DBClient { +@provide(DBClient) +export class MongoDBClient { public db: Db; constructor() { @@ -20,8 +13,8 @@ export class MongoDBClient implements DBClient { }); } - public find(collection: string, filter: object): Promise { - return this.db.collection(collection).find(filter).toArray(); + public async find(collection: string, filter: object): Promise { + return await this.db.collection(collection).find(filter).toArray(); } public async findOne(collection: string, filter: Object): Promise { @@ -30,7 +23,7 @@ export class MongoDBClient implements DBClient { } public async findOneById(collection: string, objectId: string): Promise { - return this.findOne(collection, { _id: new ObjectID(objectId) }) + return await this.findOne(collection, { _id: new ObjectID(objectId) }) } public async insertOne(collection: string, model: T): Promise { @@ -38,12 +31,13 @@ export class MongoDBClient implements DBClient { return insert.ops[0]; } - public updateOne(collection: string, where: any, model: any): Promise { - return this.db.collection(collection).updateOne(where, { $set: model }); + public async updateOne(collection: string, where: any, model: any): Promise { + let result = await this.db.collection(collection).updateOne(where, { $set: model }); + return result.result.ok == 1 && result.result.n > 0; } - public updateById(collection: string, objectId: string, model: any): Promise { - return this.updateOne(collection, { _id: new ObjectID(objectId) }, { $set: model }) + public async updateById(collection: string, objectId: string, model: any): Promise { + return await this.updateOne(collection, { _id: new ObjectID(objectId) }, { $set: model }) } public async deleteOne(collection: string, where: any): Promise { diff --git a/packages/cc-server-db-mongo/src/connection.ts b/packages/cc-server-db-mongo/src/connection.ts index 94e8894..3958b2f 100644 --- a/packages/cc-server-db-mongo/src/connection.ts +++ b/packages/cc-server-db-mongo/src/connection.ts @@ -1,7 +1,7 @@ import { Db, MongoClient } from 'mongodb'; -const connStr = process.env.MONGO_URL || 'mongodb://192.168.0.2:27017'; -const dbName = process.env.MONGO_DB || "frppool"; +const connStr = process.env.FAAS_MONGO_URL || 'mongodb://192.168.0.2:27017'; +const dbName = process.env.FAAS_MONGO_DB || "frppool"; export class MongoDBConnection { private static isConnected: boolean = false; diff --git a/packages/cc-server-db/.gitignore b/packages/cc-server-db/.gitignore new file mode 100644 index 0000000..d856d44 --- /dev/null +++ b/packages/cc-server-db/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/dist +/package-lock.json +/yarn.lock diff --git a/packages/cc-server-db/README.md b/packages/cc-server-db/README.md new file mode 100644 index 0000000..83c0af0 --- /dev/null +++ b/packages/cc-server-db/README.md @@ -0,0 +1,11 @@ +# `cc-server-db` + +> TODO: description + +## Usage + +``` +const ccServerDb = require('cc-server-db'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/cc-server-db/package.json b/packages/cc-server-db/package.json new file mode 100644 index 0000000..6643f82 --- /dev/null +++ b/packages/cc-server-db/package.json @@ -0,0 +1,27 @@ +{ + "name": "cc-server-db", + "version": "0.0.2", + "description": "Now I’m the model of a modern major general / The venerated Virginian veteran whose men are all / Lining up, to put me up on a pedestal / Writin’ letters to relatives / Embellishin’ my elegance and eloquence / But the elephant is in the room / The truth is in ya face when ya hear the British cannons go / BOOM", + "keywords": [], + "author": "MiaoWoo ", + "license": "ISC", + "main": "dist/index.js", + "publishConfig": { + "registry": "https://repo.yumc.pw/repository/npm-hosted/" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/502647092/cc-server-parent.git" + }, + "scripts": { + "build": "npx tsc", + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/502647092/cc-server-parent/issues" + }, + "homepage": "https://github.com/502647092/cc-server-parent#readme", + "dependencies": { + "typescript": "^3.5.1" + } +} \ No newline at end of file diff --git a/packages/cc-server-db/src/index.ts b/packages/cc-server-db/src/index.ts new file mode 100644 index 0000000..2c1e10a --- /dev/null +++ b/packages/cc-server-db/src/index.ts @@ -0,0 +1,11 @@ +export const DBClient = Symbol.for('DBClient') +export interface DBClient { + find(collection: string, filter: object): Promise; + findOne(collection: string, filter: Object): Promise; + findOneById(collection: string, objectId: string): Promise; + insertOne(collection: string, model: T): Promise; + updateOne(collection: string, where: any, model: any): Promise; + updateById(collection: string, objectId: string, model: any): Promise; + deleteOne(collection: string, where: any): Promise; + deleteById(collection: string, objectId: string): Promise; +} \ No newline at end of file diff --git a/packages/cc-server-db/tsconfig.json b/packages/cc-server-db/tsconfig.json new file mode 100644 index 0000000..7aae5d2 --- /dev/null +++ b/packages/cc-server-db/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": "src", + "outDir": "dist" + } +} \ No newline at end of file diff --git a/packages/cc-server-ioc/package.json b/packages/cc-server-ioc/package.json index 74e73fa..63f164b 100644 --- a/packages/cc-server-ioc/package.json +++ b/packages/cc-server-ioc/package.json @@ -10,10 +10,14 @@ "registry": "https://repo.yumc.pw/repository/npm-hosted/" }, "scripts": { + "build": "npx tsc", "test": "echo \"Error: run tests from root\" && exit 1" }, "dependencies": { "inversify": "^5.0.1", - "reflect-metadata": "^0.1.13" - } -} + "inversify-binding-decorators": "^4.0.0", + "reflect-metadata": "^0.1.13", + "typescript": "^3.5.1" + }, + "gitHead": "7d84393a3cb6be6be9ed51d71f12677d2d7d0728" +} \ No newline at end of file diff --git a/packages/cc-server-ioc/src/constant/types.ts b/packages/cc-server-ioc/src/constant/types.ts deleted file mode 100644 index 522d60b..0000000 --- a/packages/cc-server-ioc/src/constant/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const METADATA_KEY = { - container: "cc-server-core:container", - service: "cc-server-core:service" -}; \ No newline at end of file diff --git a/packages/cc-server-ioc/src/decorators.ts b/packages/cc-server-ioc/src/decorators.ts deleted file mode 100644 index 2cfedec..0000000 --- a/packages/cc-server-ioc/src/decorators.ts +++ /dev/null @@ -1,16 +0,0 @@ -import 'reflect-metadata' -import { Container } from 'inversify'; -import { METADATA_KEY } from './constant/types'; - -function service(name: string | symbol) { - return function(target: any) { - let services = Reflect.getMetadata(METADATA_KEY.service, Reflect) || [] - services = [() => { - let container: Container = Reflect.getMetadata(METADATA_KEY.container, Reflect) - container.bind(name || target).to(target); - }, ...services] - Reflect.defineMetadata(METADATA_KEY.service, services, Reflect) - } -} - -export { service } diff --git a/packages/cc-server-ioc/src/index.ts b/packages/cc-server-ioc/src/index.ts index 196ac11..f325c09 100644 --- a/packages/cc-server-ioc/src/index.ts +++ b/packages/cc-server-ioc/src/index.ts @@ -1,2 +1,22 @@ -export * from './constant/types' -export * from './decorators' \ No newline at end of file +import "reflect-metadata"; +import { Container, inject } from 'inversify'; +import { autoProvide, provide, fluentProvide, buildProviderModule } from 'inversify-binding-decorators'; + +let container = new Container(); +// Reflects all decorators provided by this package and packages them into +// a module to be loaded by the container +// container.load(buildProviderModule()); + +const provideNamed = (identifier, name) => { + return fluentProvide(identifier) + .whenTargetNamed(name) + .done(); +}; + +const provideSingleton = (identifier: any) => { + return fluentProvide(identifier) + .inSingletonScope() + .done(); +}; + +export { container, autoProvide, provide, provideNamed, provideSingleton, inject, buildProviderModule }; diff --git a/tsconfig.json b/tsconfig.json index 7d7d212..de0e965 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,11 @@ { "compilerOptions": { + "baseUrl": "src", + "outDir": "dist", "target": "es6", "module": "commonjs", "sourceMap": true, + "declaration": true, "allowUnreachableCode": true, "experimentalDecorators": true, "emitDecoratorMetadata": true