|
@@ -3,21 +3,51 @@ const { CrudService } = require('naf-framework-mongoose-free/lib/service');
|
|
|
const { BusinessError, ErrorCode } = require('naf-core').Error;
|
|
|
const _ = require('lodash');
|
|
|
const assert = require('assert');
|
|
|
+const { ObjectId } = require('mongoose').Types;
|
|
|
|
|
|
|
|
|
class StudentService extends CrudService {
|
|
|
constructor(ctx) {
|
|
|
super(ctx, 'student');
|
|
|
this.model = this.ctx.model.User.Student;
|
|
|
- this.rssModel = this.ctx.model.Relation.RelationStudentSchool;
|
|
|
+ this.rssService = this.ctx.service.relation.relationStudentSchool;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ * 邀请方式创建学员信息时, 无法区分,创建的学员信息是否已经存在.所以只能创建.
|
|
|
+ * 但是在绑定时,可以先查询 user_id 是否已经挂在了 某学员身上,如果已经挂在某学员身上
|
|
|
+ * 则
|
|
|
+ * 1.将该 学员信息 与 学校的关系 删除;
|
|
|
+ * 2.将该 学员信息 删除;
|
|
|
+ */
|
|
|
+
|
|
|
async afterCreate(body, data) {
|
|
|
if (!_.get(body, 'school_id')) return data;
|
|
|
const { _id: student_id } = data;
|
|
|
const obj = { school_id: _.get(body, 'school_id'), student_id };
|
|
|
- await this.rssModel.create(obj);
|
|
|
+ await this.rssService.create(obj);
|
|
|
return data;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ * 修改前的执行函数,检查该用户是否已经有绑定的学员信息.
|
|
|
+ * 且传来要修改的内容是否有user_id且这两个不相等
|
|
|
+ * @param {Object} filter 查询条件
|
|
|
+ * @param {Object} body 修改内容
|
|
|
+ */
|
|
|
+ async beforeUpdate(filter, body) {
|
|
|
+ const user_id = _.get(body, 'user_id');
|
|
|
+
|
|
|
+ if (!user_id) return { filter, body };
|
|
|
+ const { id } = filter;
|
|
|
+ const data = await this.model.findOne({ _id: { $ne: ObjectId(id) }, user_id });
|
|
|
+ if (!data) return { filter, body };
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ await this.model.deleteOne({ _id: ObjectId(id) });
|
|
|
+ throw new BusinessError(ErrorCode.DATA_EXISTED, '该用户已存在学员数据,不可以重复绑定');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
module.exports = StudentService;
|