zs пре 1 година
родитељ
комит
38baf9c9a3

+ 14 - 15
src/controller/core/course.controller.ts

@@ -1,7 +1,7 @@
 import { Body, Controller, Del, Get, Inject, Param, Post, Query } from '@midwayjs/decorator';
 import { BaseController } from 'free-midway-component';
 import { CourseService } from '../../service/core/course.service';
-import { CDTO_course, CVO_course, FVO_course, QDTO_course, QVO_course, UDTO_course, UVAO_course } from '../../interface/core/course.interface';
+import { CDTO_course, CVO_course, FVO_course,QDTO_course, QVO_course, UDTO_course, UVAO_course } from '../../interface/core/course.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
 @ApiTags(['课程'])
@@ -10,18 +10,15 @@ export class CourseController extends BaseController {
   @Inject()
   service: CourseService;
 
-  @Post('/')
-  @Validate()
-  @ApiResponse({ type: CVO_course })
+
+@Post('/') @Validate() @ApiResponse({ type: CVO_course })
   async create(@Body() data: CDTO_course) {
     const dbData = await this.service.create(data);
     const result = new CVO_course(dbData);
     return result;
   }
-  @Get('/')
-  @ApiQuery({ name: 'query' })
-  @ApiResponse({ type: QVO_course })
-  async query(@Query() filter: QDTO_course, @Query('skip') skip: number, @Query('limit') limit: number) {
+@Get('/')@ApiQuery({name:'query'})@ApiResponse({ type: QVO_course })
+  async query(@Query() filter:QDTO_course, @Query('skip') skip: number,@Query('limit') limit: number){
     const list = await this.service.query(filter, { skip, limit });
     const data = [];
     for (const i of list) {
@@ -32,24 +29,23 @@ export class CourseController extends BaseController {
     return { data, total };
   }
 
-  @Get('/:id')
-  @ApiResponse({ type: FVO_course })
+
+@Get('/:id')@ApiResponse({ type: FVO_course })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
     const result = new FVO_course(data);
     return result;
   }
 
-  @Post('/:id')
-  @Validate()
-  @ApiResponse({ type: UVAO_course })
+
+@Post('/:id')@Validate()@ApiResponse({ type: UVAO_course })
   async update(@Param('id') id: string, @Body() body: UDTO_course) {
     const result = await this.service.updateOne(id, body);
     return result;
   }
 
-  @Del('/:id')
-  @Validate()
+
+@Del('/:id')@Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);
     return 'ok';
@@ -58,11 +54,14 @@ export class CourseController extends BaseController {
     throw new Error('Method not implemented.');
   }
 
+
   async updateMany(...args: any[]) {
     throw new Error('Method not implemented.');
   }
 
+
   async deleteMany(...args: any[]) {
     throw new Error('Method not implemented.');
   }
 }
+

+ 1 - 0
src/controller/core/student.controller.ts

@@ -18,6 +18,7 @@ export class StudentController extends BaseController {
   @Validate()
   @ApiResponse({ type: CVO_student })
   async create(@Body() data: CDTO_student) {
+    await this.utilService.createUserBefor(data, 'Student');
     const dbData = await this.service.create(data);
     const result = new CVO_student(dbData);
     return result;

+ 1 - 0
src/controller/core/teacher.controller.ts

@@ -18,6 +18,7 @@ export class TeacherController extends BaseController {
   @Validate()
   @ApiResponse({ type: CVO_teacher })
   async create(@Body() data: CDTO_teacher) {
+    await this.utilService.createUserBefor(data, 'Teacher');
     const dbData = await this.service.create(data);
     const result = new CVO_teacher(dbData);
     return result;

+ 12 - 6
src/controller/token.controller.ts

@@ -1,7 +1,7 @@
-import { Controller, Get, Inject } from '@midwayjs/decorator';
+import { Body, Controller, Post, Get, Inject } from '@midwayjs/decorator';
 import { Context } from '@midwayjs/koa';
 import { ApiResponse, ApiTags } from '@midwayjs/swagger';
-// import { TokenService } from '../service/token.service';
+import { TokenService } from '../service/token.service';
 const assert = require('assert');
 import { JwtService } from '@midwayjs/jwt';
 import get = require('lodash/get');
@@ -9,8 +9,8 @@ import { RoleService } from '../service/system/role.service';
 @ApiTags(['工具'])
 @Controller('/token')
 export class TokenController {
-  // @Inject()
-  // service: TokenService;
+  @Inject()
+  service: TokenService;
 
   @Inject()
   jwtService: JwtService;
@@ -28,7 +28,7 @@ export class TokenController {
     assert(token, '缺少token信息');
     const result: any = await this.jwtService.decode(token);
     const userMenusResult = await this.roleService.getUserMenus();
-    const menus = get(userMenusResult,'menus')
+    const menus = get(userMenusResult, 'menus');
     const role_code = get(userMenusResult, 'role_code');
     result.menus = menus;
     result.role_code = role_code;
@@ -40,7 +40,13 @@ export class TokenController {
   async tokenJwt() {
     const token = get(this.ctx, 'request.header.token');
     assert(token, '缺少token信息');
-    const result: any = await this.jwtService.decode(token);
+    const result = await this.jwtService.decode(token);
+    return result;
+  }
+
+  @Post('/openid')
+  async openid(@Body() data) {
+    const result = await this.service.opneid(data);
     return result;
   }
 

+ 0 - 9
src/controller/tool.controller.ts

@@ -1,9 +0,0 @@
-import { Controller, Get, Inject, Query } from '@midwayjs/decorator';
-import { ApiResponse, ApiTags } from '@midwayjs/swagger';
-import { ToolService } from '../service/tool.service';
-@ApiTags(['工具'])
-@Controller('/tool')
-export class ToolController {
-  @Inject()
-  service: ToolService;
-}

+ 6 - 0
src/entity/core/course.entity.ts

@@ -6,6 +6,12 @@ import { BaseModel } from 'free-midway-component';
 export class Course extends BaseModel {
   @prop({ required: false, index: true, zh: '老师id' })
   teacher: string;
+  @prop({ required: false, index: false, zh: '名称' })
+  name: string;
+  @prop({ required: false, index: true, zh: '学科' })
+  subject: string;
+  @prop({ required: false, index: true, zh: '类型' })
+  type: string;
   @prop({ required: false, index: false, zh: '金额' })
   money: number;
   @prop({ required: false, index: false, zh: '开始时间' })

+ 2 - 0
src/entity/core/teacher.entity.ts

@@ -36,4 +36,6 @@ export class Teacher extends BaseModel {
   brief: string;
   @prop({ required: false, index: true, zh: '状态' })
   status: string;
+  @prop({ required: false, index: true, zh: '是否公开' })
+  is_show: string;
 }

+ 4 - 0
src/entity/system/config.entity.ts

@@ -10,10 +10,14 @@ export class Config extends BaseModel {
   logo: Array<any>;
   @prop({ required: false, index: false, zh: '联系电话' })
   phone: string;
+  @prop({ required: false, index: false, zh: '用户默认头像' })
+  icon: Array<any>;
   @prop({ required: false, index: false, zh: '首页轮播图' })
   file: Array<any>;
   @prop({ required: false, index: false, zh: '底部提示语' })
   bottom_title: string;
+  @prop({ required: false, index: false, zh: '通知' })
+  notice: string;
   @prop({ required: false, index: false, zh: '用户协议' })
   agreement: string;
   @prop({ required: false, index: false, zh: '简介' })

+ 20 - 1
src/interface/core/course.interface.ts

@@ -16,6 +16,12 @@ export class FVO_course {
   _id: string = undefined;
   @ApiProperty({ description: '老师id' })
   'teacher': string = undefined;
+  @ApiProperty({ description: '名称' })
+  'name': string = undefined;
+  @ApiProperty({ description: '学科' })
+  'subject': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
   @ApiProperty({ description: '金额' })
   'money': number = undefined;
   @ApiProperty({ description: '开始时间' })
@@ -31,12 +37,16 @@ export class FVO_course {
 export class QDTO_course extends SearchBase {
   constructor() {
     const like_prop = [];
-    const props = ['teacher'];
+    const props = ['teacher', 'subject', 'type'];
     const mapping = [];
     super({ like_prop, props, mapping });
   }
   @ApiProperty({ description: '老师id' })
   'teacher': string = undefined;
+  @ApiProperty({ description: '学科' })
+  'subject': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
 }
 
 export class QVO_course extends FVO_course {
@@ -50,6 +60,15 @@ export class CDTO_course {
   @ApiProperty({ description: '老师id' })
   @Rule(RuleType['string']().empty(''))
   'teacher': string = undefined;
+  @ApiProperty({ description: '名称' })
+  @Rule(RuleType['string']().empty(''))
+  'name': string = undefined;
+  @ApiProperty({ description: '学科' })
+  @Rule(RuleType['string']().empty(''))
+  'subject': string = undefined;
+  @ApiProperty({ description: '类型' })
+  @Rule(RuleType['string']().empty(''))
+  'type': string = undefined;
   @ApiProperty({ description: '金额' })
   @Rule(RuleType['number']().empty(''))
   'money': number = undefined;

+ 5 - 0
src/interface/core/teacher.interface.ts

@@ -79,6 +79,8 @@ export class QDTO_teacher extends SearchBase {
   'brief': string = undefined;
   @ApiProperty({ description: '状态' })
   'status': string = undefined;
+  @ApiProperty({ description: '是否公开' })
+  'is_show': string = undefined;
 }
 
 export class QVO_teacher extends FVO_teacher {
@@ -137,6 +139,9 @@ export class CDTO_teacher {
   @ApiProperty({ description: '状态' })
   @Rule(RuleType['string']().empty(''))
   'status': string = undefined;
+  @ApiProperty({ description: '是否公开' })
+  @Rule(RuleType['string']().empty(''))
+  'is_show': string = undefined;
 }
 
 export class CVO_teacher extends FVO_teacher {

+ 10 - 0
src/interface/system/config.interface.ts

@@ -16,6 +16,8 @@ export class FVO_config {
   _id: string = undefined;
   @ApiProperty({ description: '标题' })
   'title': string = undefined;
+  @ApiProperty({ description: '用户默认头像' })
+  'icon': Array<any> = undefined;
   @ApiProperty({ description: 'logo' })
   'logo': Array<any> = undefined;
   @ApiProperty({ description: '联系电话' })
@@ -24,6 +26,8 @@ export class FVO_config {
   'file': Array<any> = undefined;
   @ApiProperty({ description: '底部提示语' })
   'bottom_title': string = undefined;
+  @ApiProperty({ description: '通知' })
+  'notice': string = undefined;
   @ApiProperty({ description: '用户协议' })
   'agreement': string = undefined;
   @ApiProperty({ description: '简介' })
@@ -50,6 +54,9 @@ export class CDTO_config {
   @ApiProperty({ description: '标题' })
   @Rule(RuleType['string']().empty(''))
   'title': string = undefined;
+  @ApiProperty({ description: '用户默认头像' })
+  @Rule(RuleType['array']().empty(''))
+  'icon': Array<any> = undefined;
   @ApiProperty({ description: 'logo' })
   @Rule(RuleType['array']().empty(''))
   'logo': Array<any> = undefined;
@@ -62,6 +69,9 @@ export class CDTO_config {
   @ApiProperty({ description: '底部提示语' })
   @Rule(RuleType['string']().empty(''))
   'bottom_title': string = undefined;
+  @ApiProperty({ description: '通知' })
+  @Rule(RuleType['string']().empty(''))
+  'notice': string = undefined;
   @ApiProperty({ description: '用户协议' })
   @Rule(RuleType['string']().empty(''))
   'agreement': string = undefined;

+ 1 - 1
src/locales/zh_cn/errors.ts

@@ -23,7 +23,7 @@ const codes = {
   '401-5': '本账号已在其他地方登录,请重新登录!',
   '401-6': '该用户已被禁用',
   '401-7': '当前角色下的用户无法使用',
-  '401-8': '该比赛已报名请勿重复报名!',
+  '401-8': '该用户已有账号请勿注册!',
 };
 const errCodes = {};
 const prefix = 'FRAMEERROR_';

+ 28 - 0
src/service/token.service.ts

@@ -0,0 +1,28 @@
+import { Provide, Inject } from '@midwayjs/decorator';
+import { I18nService } from './i18n.service';
+import { InjectEntityModel } from '@midwayjs/typegoose';
+import { ReturnModelType } from '@typegoose/typegoose';
+import { Teacher } from '../entity/core/teacher.entity';
+import { Student } from '../entity/core/student.entity';
+@Provide()
+export class TokenService {
+  @Inject()
+  i18n: I18nService;
+
+  @InjectEntityModel(Teacher)
+  tModel: ReturnModelType<typeof Teacher>;
+
+  @InjectEntityModel(Student)
+  sModel: ReturnModelType<typeof Student>;
+
+  //用openid查询用户信息
+  async opneid(data) {
+    const { openid } = data;
+    let info = {};
+    const teacher = await this.tModel.findOne({ openid }).lean();
+    if (teacher && teacher._id) info = { ...teacher, role_type: 'Teacher' };
+    const student = await this.sModel.findOne({ openid }).lean();
+    if (student && student._id) info = { ...student, role_type: 'Student' };
+    return info;
+  }
+}

+ 0 - 7
src/service/tool.service.ts

@@ -1,7 +0,0 @@
-import { Inject, Provide } from '@midwayjs/core';
-import { Context } from '@midwayjs/koa';
-@Provide()
-export class ToolService {
-  @Inject()
-  ctx: Context;
-}

+ 15 - 2
src/service/util.service.ts

@@ -1,12 +1,25 @@
-import { Provide } from '@midwayjs/decorator';
-import { GetModel } from 'free-midway-component';
+import { Provide, Inject } from '@midwayjs/decorator';
+import { GetModel, ServiceError } from 'free-midway-component';
 import { upperFirst } from 'lodash';
+import { I18nService } from './i18n.service';
+import { FrameErrorEnum } from '../error/frame.error';
 @Provide()
 export class UtilService {
+  @Inject()
+  i18n: I18nService;
+
   randomStr(len = 6) {
     return Math.random().toString(36).slice(-len);
   }
 
+  // 检查创建用户前的openid是否唯一
+  async createUserBefor(data, role_type) {
+    const { openid } = data;
+    const model = GetModel(upperFirst(role_type));
+    const result = await model.findOne({ openid }).lean();
+    if (result) throw new ServiceError(this.i18n.translateError(FrameErrorEnum.SERVICE_REPEAT), FrameErrorEnum.SERVICE_REPEAT);
+  }
+
   // 修改后信息后用户重新审核
   async updateUserAfter(id, body, role_type) {
     const { status } = body;