lrf vor 2 Jahren
Ursprung
Commit
532be77b50
2 geänderte Dateien mit 56 neuen und 4 gelöschten Zeilen
  1. 24 2
      app/service/user/coach.js
  2. 32 2
      app/service/user/student.js

+ 24 - 2
app/service/user/coach.js

@@ -3,22 +3,44 @@ 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 CoachService extends CrudService {
   constructor(ctx) {
     super(ctx, 'coach');
     this.model = this.ctx.model.User.Coach;
-    this.rcsModel = this.ctx.model.Relation.RelationCoachSchool;
+    this.rcsService = this.ctx.service.relation.relationCoachSchool;
   }
 
   async afterCreate(body, data) {
     if (!_.get(body, 'school_id')) return data;
+    // 从service走创建,那边有创建前的检测
     const { _id: coach_id } = data;
     const obj = { school_id: _.get(body, 'school_id'), coach_id };
-    await this.rcsModel.create(obj);
+    await this.rcsService.create(obj);
     return data;
   }
+
+  /**
+   * 修改前的执行函数,检查该用户是否已经有绑定的教练信息.
+   * 且传来要修改的内容是否有user_id且这两个不相等
+   * @param {Object} filter 查询条件
+   * @param {Object} body 修改内容
+   */
+  async beforeUpdate(filter, body) {
+    const user_id = _.get(body, 'user_id');
+    // 要修改的数据没有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 };
+    // 不允许操作,因为目前设计的是:一个学员信息对应一个学生.而不是一个学校.
+    // 所以学员信息只允许1个用户有1个数据
+    // 且还需要删除掉这条数据,因为这条数据属于重复的数据,之前已经存在了绑定的学员数据
+    await this.model.deleteOne({ _id: ObjectId(id) });
+    throw new BusinessError(ErrorCode.DATA_EXISTED, '该用户已存在教练数据,不可以重复绑定');
+  }
 }
 
 module.exports = CoachService;

+ 32 - 2
app/service/user/student.js

@@ -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');
+    // 要修改的数据没有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 };
+    // 不允许操作,因为目前设计的是:一个学员信息对应一个学生.而不是一个学校.
+    // 所以学员信息只允许1个用户有1个数据
+    // 且还需要删除掉这条数据,因为这条数据属于重复的数据,之前已经存在了绑定的学员数据
+    await this.model.deleteOne({ _id: ObjectId(id) });
+    throw new BusinessError(ErrorCode.DATA_EXISTED, '该用户已存在学员数据,不可以重复绑定');
+  }
 }
 
 module.exports = StudentService;