student.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. 'use strict';
  2. const { CrudService } = require('naf-framework-mongoose-free/lib/service');
  3. const { BusinessError, ErrorCode } = require('naf-core').Error;
  4. const _ = require('lodash');
  5. const assert = require('assert');
  6. const { ObjectId } = require('mongoose').Types;
  7. // 学员
  8. class StudentService extends CrudService {
  9. constructor(ctx) {
  10. super(ctx, 'student');
  11. this.model = this.ctx.model.User.Student;
  12. this.rssService = this.ctx.service.relation.relationStudentSchool;
  13. }
  14. /**
  15. * 邀请方式创建学员信息时, 无法区分,创建的学员信息是否已经存在.所以只能创建.
  16. * 但是在绑定时,可以先查询 user_id 是否已经挂在了 某学员身上,如果已经挂在某学员身上
  17. * 则
  18. * 1.将该 学员信息 与 学校的关系 删除;
  19. * 2.将该 学员信息 删除;
  20. */
  21. async afterCreate(body, data) {
  22. if (!_.get(body, 'school_id')) return data;
  23. const { _id: student_id } = data;
  24. const obj = { school_id: _.get(body, 'school_id'), student_id };
  25. await this.rssService.create(obj);
  26. return data;
  27. }
  28. /**
  29. * 修改前的执行函数,检查该用户是否已经有绑定的学员信息.
  30. * 且传来要修改的内容是否有user_id且这两个不相等
  31. * @param {Object} filter 查询条件
  32. * @param {Object} update 修改内容
  33. */
  34. async beforeUpdate(filter, update) {
  35. const user_id = _.get(update, 'user_id');
  36. // 要修改的数据没有user_id,不更改绑定信息,不需要处理
  37. if (!user_id) return { filter, update };
  38. const { id } = filter;
  39. const data = await this.model.findOne({ _id: { $ne: ObjectId(id) }, user_id });
  40. if (!data) return { filter, update };
  41. // 不允许操作,因为目前设计的是:一个学员信息对应一个学生.而不是一个学校.
  42. // 所以学员信息只允许1个用户有1个数据
  43. // 且还需要 更新关系 并 删除掉这条数据,因为这条数据属于重复的数据,之前已经存在了绑定的学员数据
  44. await this.model.updateOne({ student_id: id }, { student_id: data._id });
  45. await this.model.deleteOne({ _id: ObjectId(id) });
  46. throw new BusinessError(ErrorCode.DATA_EXISTED, '该用户已存在学员数据,不可以重复绑定');
  47. }
  48. }
  49. module.exports = StudentService;