123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 'use strict';
- 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.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.rssService.create(obj);
- return data;
- }
- /**
- * 修改前的执行函数,检查该用户是否已经有绑定的学员信息.
- * 且传来要修改的内容是否有user_id且这两个不相等
- * @param {Object} filter 查询条件
- * @param {Object} update 修改内容
- */
- async beforeUpdate(filter, update) {
- const user_id = _.get(update, 'user_id');
- // 要修改的数据没有user_id,不更改绑定信息,不需要处理
- if (!user_id) return { filter, update };
- const { id } = filter;
- const data = await this.model.findOne({ _id: { $ne: ObjectId(id) }, user_id });
- if (!data) return { filter, update };
- // 不允许操作,因为目前设计的是:一个学员信息对应一个学生.而不是一个学校.
- // 所以学员信息只允许1个用户有1个数据
- // 且还需要 更新关系 并 删除掉这条数据,因为这条数据属于重复的数据,之前已经存在了绑定的学员数据
- await this.model.updateOne({ student_id: id }, { student_id: data._id });
- await this.model.deleteOne({ _id: ObjectId(id) });
- throw new BusinessError(ErrorCode.DATA_EXISTED, '该用户已存在学员数据,不可以重复绑定');
- }
- }
- module.exports = StudentService;
|