|
@@ -4,6 +4,8 @@ import { Application, Context } from '@midwayjs/koa';
|
|
|
import { App, Inject } from '@midwayjs/decorator';
|
|
|
import _ = require('lodash');
|
|
|
import { FrameworkErrorEnum, ServiceError } from '../error/service.error';
|
|
|
+import { GetModel } from '../util/getModel';
|
|
|
+import { SearchBase } from '../../dist';
|
|
|
/**
|
|
|
* Service基类,实现了一些基础的crud
|
|
|
*/
|
|
@@ -18,28 +20,25 @@ export abstract class BaseService<T extends AnyParamConstructor<any>> {
|
|
|
|
|
|
/**
|
|
|
* 列表查询
|
|
|
- * @param {object} filter 查询条件
|
|
|
+ * @param {SearchBase} filter 查询条件
|
|
|
* @param {object} pageOptions 分页条件
|
|
|
* @param {Boolean} lean 是否使用JavaScript形式数据;false为mongoose的模型实例数据
|
|
|
+ * @param {Boolean} populate 是否进行ref关联数据
|
|
|
* @returns {Promise<object>} 返回列表
|
|
|
*/
|
|
|
- async query(
|
|
|
- filter: object = {},
|
|
|
- pageOptions: object = {},
|
|
|
- lean = true
|
|
|
- ): Promise<object> {
|
|
|
- const dup = _.cloneDeep(filter);
|
|
|
+ async query(filter: SearchBase, pageOptions: object = {}, lean = true, populate = true): Promise<object> {
|
|
|
+ const dup = _.cloneDeep(filter.getFilter());
|
|
|
const data = await this.model.find(dup, {}, { ...pageOptions }).lean(lean);
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 数据总数查询
|
|
|
- * @param {object} filter 查询条件
|
|
|
+ * @param {SearchBase} filter 查询条件
|
|
|
* @returns {number} 数据总数
|
|
|
*/
|
|
|
- async count(filter: object = {}): Promise<number> {
|
|
|
- const dup = _.cloneDeep(filter);
|
|
|
+ async count(filter: SearchBase): Promise<number> {
|
|
|
+ const dup = _.cloneDeep(filter.getFilter());
|
|
|
const total = await this.model.count(dup);
|
|
|
return total;
|
|
|
}
|
|
@@ -62,28 +61,23 @@ export abstract class BaseService<T extends AnyParamConstructor<any>> {
|
|
|
* @returns {object}
|
|
|
*/
|
|
|
async updateOne(id: string, body: object): Promise<string> {
|
|
|
- if (!id)
|
|
|
- throw new ServiceError('缺少查询信息', FrameworkErrorEnum.NEED_PARAMS);
|
|
|
+ if (!id) throw new ServiceError('缺少查询信息', FrameworkErrorEnum.NEED_PARAMS);
|
|
|
const num = await this.model.count({ _id: id });
|
|
|
- if (num <= 0)
|
|
|
- throw new ServiceError(
|
|
|
- '未找到要修改的数据',
|
|
|
- FrameworkErrorEnum.NOT_FOUND_DATA
|
|
|
- );
|
|
|
+ if (num <= 0) throw new ServiceError('未找到要修改的数据', FrameworkErrorEnum.NOT_FOUND_DATA);
|
|
|
await this.model.updateOne({ _id: id }, body);
|
|
|
return 'ok';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 多修改
|
|
|
- * @param {object} filter 要修改的对象查询条件
|
|
|
+ * @param {SearchBase} filter 要修改的对象查询条件
|
|
|
* @param {object} body 要修改的内容
|
|
|
* @returns {object}
|
|
|
*/
|
|
|
- async updateMany(filter: object = {}, body: object): Promise<string> {
|
|
|
- if (!body)
|
|
|
- throw new ServiceError('缺少修改信息', FrameworkErrorEnum.NEED_BODY);
|
|
|
- await this.model.updateMany(filter, body);
|
|
|
+ async updateMany(filter: SearchBase, body: object): Promise<string> {
|
|
|
+ if (!body) throw new ServiceError('缺少修改信息', FrameworkErrorEnum.NEED_BODY);
|
|
|
+ const dup = _.cloneDeep(filter.getFilter());
|
|
|
+ await this.model.updateMany(dup, body);
|
|
|
return 'ok';
|
|
|
}
|
|
|
|
|
@@ -93,25 +87,21 @@ export abstract class BaseService<T extends AnyParamConstructor<any>> {
|
|
|
* @returns {object}
|
|
|
*/
|
|
|
async delete(id: string): Promise<string> {
|
|
|
- if (!id)
|
|
|
- throw new ServiceError('缺少数据信息', FrameworkErrorEnum.NEED_PARAMS);
|
|
|
+ if (!id) throw new ServiceError('缺少数据信息', FrameworkErrorEnum.NEED_PARAMS);
|
|
|
await this.model.deleteOne({ _id: id });
|
|
|
return 'ok';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 多删除
|
|
|
- * @param filter 要删除的数据查询条件
|
|
|
+ * @param {SearchBase} filter 要删除的数据查询条件
|
|
|
* @returns {object}
|
|
|
*/
|
|
|
- async deleteMany(filter: object = {}): Promise<string> {
|
|
|
+ async deleteMany(filter: SearchBase): Promise<string> {
|
|
|
const keys = Object.keys(filter);
|
|
|
- if (keys.length <= 0)
|
|
|
- throw new ServiceError(
|
|
|
- '暂不提供清库服务',
|
|
|
- FrameworkErrorEnum.SERVICE_FAULT
|
|
|
- );
|
|
|
- await this.model.deleteMany(filter);
|
|
|
+ if (keys.length <= 0) throw new ServiceError('暂不提供清库服务', FrameworkErrorEnum.SERVICE_FAULT);
|
|
|
+ const dup = _.cloneDeep(filter.getFilter());
|
|
|
+ await this.model.deleteMany(dup);
|
|
|
return 'ok';
|
|
|
}
|
|
|
|
|
@@ -134,4 +124,20 @@ export abstract class BaseService<T extends AnyParamConstructor<any>> {
|
|
|
const data = await this.model.insertMany(body);
|
|
|
return data;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 获取本服务默认表的ref关系
|
|
|
+ */
|
|
|
+ async getRefs() {
|
|
|
+ const schema = _.get(this.model, 'schema.tree');
|
|
|
+ const refs = [];
|
|
|
+ for (const key in schema) {
|
|
|
+ const f = schema[key];
|
|
|
+ if (_.isObject(f) && _.get(f, 'ref')) {
|
|
|
+ const model = GetModel(key);
|
|
|
+ const path = key;
|
|
|
+ refs.push({ path, model });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return refs;
|
|
|
+ }
|
|
|
}
|