Bläddra i källkod

Merge branch 'main' of http://git.cc-lotus.info/follow-up/follow_server into main

zs 1 år sedan
förälder
incheckning
1863bcc29c

+ 6 - 2
src/configuration.ts

@@ -1,4 +1,4 @@
-import { Configuration, App } from '@midwayjs/core';
+import { Configuration, App, Inject, MidwayDecoratorService } from '@midwayjs/core';
 import * as koa from '@midwayjs/koa';
 import * as validate from '@midwayjs/validate';
 import * as info from '@midwayjs/info';
@@ -8,6 +8,7 @@ import * as FreeFrame from 'free-midway-component';
 import * as redis from '@midwayjs/redis';
 import * as swagger from '@midwayjs/swagger';
 import * as jwt from '@midwayjs/jwt';
+import { VerifyTokenInit } from './decorator/verifyToken.decorator';
 // 控制器执行前函数
 import { CheckTokenMiddleware } from './middleware/checkToken.middleware';
 @Configuration({
@@ -31,12 +32,15 @@ import { CheckTokenMiddleware } from './middleware/checkToken.middleware';
 export class MainConfiguration {
   @App('koa')
   app: koa.Application;
-
+  @Inject()
+  decoratorService: MidwayDecoratorService;
   async onReady() {
     // add middleware
     this.app.useMiddleware([ReportMiddleware]);
     this.app.getMiddleware().insertFirst(CheckTokenMiddleware);
     // add filter
     // this.app.useFilter([NotFoundFilter, DefaultErrorFilter]);
+    // this.initVerifyTokenDecorator();
+    VerifyTokenInit(this.decoratorService);
   }
 }

+ 5 - 0
src/controller/admin.controller.ts

@@ -4,6 +4,7 @@ import { AdminService } from '../service/admin.service';
 import { CDTO_admin, CVO_admin, FVO_admin, QDTO_admin, QVO_admin, UDTO_admin, UVAO_admin } from '../interface/admin.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['管理员表'])
 @Controller('/admin')
 export class AdminController extends BaseController {
@@ -20,6 +21,7 @@ export class AdminController extends BaseController {
     throw new ServiceError('不提供此服务', FrameworkErrorEnum.SERVICE_FAULT);
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_admin })
   async query(@Query() filter: QDTO_admin, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -34,6 +36,7 @@ export class AdminController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_admin })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -42,6 +45,7 @@ export class AdminController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_admin })
   async update(@Param('id') id: string, @Body() body: UDTO_admin) {
@@ -50,6 +54,7 @@ export class AdminController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     // 禁用

+ 7 - 0
src/controller/chat.controller.ts

@@ -4,6 +4,7 @@ import { ChatService } from '../service/chat.service';
 import { CDTO_chat, CVO_chat, FVO_chat, QDTO_chat, QVO_chat, UDTO_chat, UVAO_chat } from '../interface/chat.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['聊天记录'])
 @Controller('/chat')
 export class ChatController extends BaseController {
@@ -11,12 +12,14 @@ export class ChatController extends BaseController {
   service: ChatService;
 
   @Get('/lcl')
+  @verifyToken()
   async getLastChatRecordList(@Query('doctor') doctor: string, @Query('name') name: string, @Query('skip') skip: number, @Query('limit') limit: number) {
     const result = await this.service.getLastChatRecordList(doctor, skip, limit, name);
     return result;
   }
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_chat })
   async create(@Body() data: CDTO_chat) {
@@ -25,6 +28,7 @@ export class ChatController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_chat })
   async query(@Query() filter: QDTO_chat, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -39,6 +43,7 @@ export class ChatController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_chat })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -47,6 +52,7 @@ export class ChatController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_chat })
   async update(@Param('id') id: string, @Body() body: UDTO_chat) {
@@ -55,6 +61,7 @@ export class ChatController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 6 - 0
src/controller/config.controller.ts

@@ -4,6 +4,7 @@ import { ConfigService } from '../service/config.service';
 import { CDTO_config, CVO_config, FVO_config, QVO_config, UDTO_config, UVAO_config } from '../interface/config.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['基础设置'])
 @Controller('/config')
 export class ConfigController extends BaseController {
@@ -11,6 +12,7 @@ export class ConfigController extends BaseController {
   service: ConfigService;
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_config })
   async create(@Body() data: CDTO_config) {
@@ -19,6 +21,7 @@ export class ConfigController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_config })
   async query() {
@@ -28,6 +31,7 @@ export class ConfigController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_config })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -36,6 +40,7 @@ export class ConfigController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_config })
   async update(@Param('id') id: string, @Body() body: UDTO_config) {
@@ -44,6 +49,7 @@ export class ConfigController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 6 - 0
src/controller/doctor.controller.ts

@@ -6,6 +6,7 @@ import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
 import { UtilService } from '../service/util.service';
 import { LoginType } from '../interface/login.interface';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['医生'])
 @Controller('/doctor')
 export class DoctorController extends BaseController {
@@ -15,6 +16,7 @@ export class DoctorController extends BaseController {
   utilService: UtilService;
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_doctor })
   async create(@Body() data: CDTO_doctor) {
@@ -26,6 +28,7 @@ export class DoctorController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_doctor })
   async query(@Query() filter: QDTO_doctor, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -40,6 +43,7 @@ export class DoctorController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_doctor })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -48,6 +52,7 @@ export class DoctorController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_doctor })
   async update(@Param('id') id: string, @Body() body: UDTO_doctor) {
@@ -56,6 +61,7 @@ export class DoctorController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 8 - 0
src/controller/group.controller.ts

@@ -4,6 +4,7 @@ import { GroupService } from '../service/group.service';
 import { CDTO_group, CVO_group, FVO_group, QDTO_group, QVO_group, UDTO_group, UVAO_group } from '../interface/group.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['群组'])
 @Controller('/group')
 export class GroupController extends BaseController {
@@ -17,18 +18,21 @@ export class GroupController extends BaseController {
    * @param limit 分页显示数量
    */
   @Get('/getPaitentList')
+  @verifyToken()
   async getPaitentList(@Query('groupId') groupId: string, @Query('skip') skip: number, @Query('limit') limit: number) {
     const result = await this.service.findPaitentByGroupId(groupId, skip, limit);
     return result;
   }
 
   @Get('/getDoctorList')
+  @verifyToken()
   async getDoctorList(@Query('patientId') patientId: string, @Query('skip') skip: number, @Query('limit') limit: number) {
     const result = await this.service.findDoctorByPatientId(patientId, skip, limit);
     return result;
   }
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_group })
   async create(@Body() data: CDTO_group) {
@@ -37,6 +41,7 @@ export class GroupController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_group })
   async query(@Query() filter: QDTO_group, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -51,6 +56,7 @@ export class GroupController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_group })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -59,6 +65,7 @@ export class GroupController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_group })
   async update(@Param('id') id: string, @Body() body: UDTO_group) {
@@ -67,6 +74,7 @@ export class GroupController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 6 - 0
src/controller/menus.controller.ts

@@ -4,6 +4,7 @@ import { MenusService } from '../service/menus.service';
 import { CDTO_menus, CVO_menus, FVO_menus, QDTO_menus, QVO_menus, UDTO_menus, UVAO_menus } from '../interface/menus.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['菜单'])
 @Controller('/menus')
 export class MenusController extends BaseController {
@@ -11,6 +12,7 @@ export class MenusController extends BaseController {
   service: MenusService;
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_menus })
   async create(@Body() data: CDTO_menus) {
@@ -20,6 +22,7 @@ export class MenusController extends BaseController {
   }
 
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_menus })
   async query() {
@@ -28,6 +31,7 @@ export class MenusController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_menus })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -36,6 +40,7 @@ export class MenusController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_menus })
   async update(@Param('id') id: string, @Body() body: UDTO_menus) {
@@ -44,6 +49,7 @@ export class MenusController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 6 - 0
src/controller/nurse.controller.ts

@@ -6,6 +6,7 @@ import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
 import { UtilService } from '../service/util.service';
 import { LoginType } from '../interface/login.interface';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['护士'])
 @Controller('/nurse')
 export class NurseController extends BaseController {
@@ -15,6 +16,7 @@ export class NurseController extends BaseController {
   utilService: UtilService;
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_nurse })
   async create(@Body() data: CDTO_nurse) {
@@ -26,6 +28,7 @@ export class NurseController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_nurse })
   async query(@Query() filter: QDTO_nurse, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -40,6 +43,7 @@ export class NurseController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_nurse })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -48,6 +52,7 @@ export class NurseController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_nurse })
   async update(@Param('id') id: string, @Body() body: UDTO_nurse) {
@@ -56,6 +61,7 @@ export class NurseController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 7 - 0
src/controller/patient.controller.ts

@@ -5,6 +5,7 @@ import { CDTO_patient, CVO_patient, FVO_patient, QDTO_patient, QVO_patient, UDTO
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
 import { get } from 'lodash';
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['病人'])
 @Controller('/patient')
 export class PatientController extends BaseController {
@@ -17,6 +18,7 @@ export class PatientController extends BaseController {
    * @param groupId 群组id
    */
   @Post('/inviteCreate/:groupId')
+  @verifyToken()
   async inviteCreate(@Body() data: CDTO_patient, @Param('groupId') groupId: string) {
     if (!data.openid) throw new ServiceError('缺少微信关联', FrameworkErrorEnum.BAD_BODY);
     const dbData = await this.service.create(data);
@@ -30,6 +32,7 @@ export class PatientController extends BaseController {
   }
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_patient })
   async create(@Body() data: CDTO_patient) {
@@ -38,6 +41,7 @@ export class PatientController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_patient })
   async query(@Query() filter: QDTO_patient, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -52,6 +56,7 @@ export class PatientController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_patient })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -61,6 +66,7 @@ export class PatientController extends BaseController {
 
   @Post('/:id')
   @Validate()
+  @verifyToken()
   @ApiResponse({ type: UVAO_patient })
   async update(@Param('id') id: string, @Body() body: UDTO_patient) {
     const result = await this.service.updateOne(id, body);
@@ -68,6 +74,7 @@ export class PatientController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 8 - 0
src/controller/role.controller.ts

@@ -6,6 +6,7 @@ import { ApiOperation, ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger'
 import { Validate } from '@midwayjs/validate';
 import { MenusService } from '../service/menus.service';
 import get = require('lodash/get');
+import { verifyToken } from '../decorator/verifyToken.decorator';
 @ApiTags(['角色'])
 @Controller('/role')
 export class RoleController extends BaseController {
@@ -16,6 +17,7 @@ export class RoleController extends BaseController {
   menusService: MenusService;
 
   @Get('/um')
+  @verifyToken()
   @ApiOperation({ description: '获取用户的菜单' })
   async userMenu() {
     const user = this.ctx.user;
@@ -25,6 +27,7 @@ export class RoleController extends BaseController {
     return menus;
   }
   @Get('/am')
+  @verifyToken()
   @ApiOperation({ description: '获取所有菜单提供选择' })
   async roleAllMenu() {
     const menusList = await this.menusService.queryMenu();
@@ -32,6 +35,7 @@ export class RoleController extends BaseController {
   }
 
   @Post('/')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: CVO_role })
   async create(@Body() data: CDTO_role) {
@@ -40,6 +44,7 @@ export class RoleController extends BaseController {
     return result;
   }
   @Get('/')
+  @verifyToken()
   @ApiQuery({ name: 'query' })
   @ApiResponse({ type: QVO_role })
   async query(@Query() filter: QDTO_role, @Query('skip') skip: number, @Query('limit') limit: number) {
@@ -54,6 +59,7 @@ export class RoleController extends BaseController {
   }
 
   @Get('/:id')
+  @verifyToken()
   @ApiResponse({ type: FVO_role })
   async fetch(@Param('id') id: string) {
     const data = await this.service.fetch(id);
@@ -62,6 +68,7 @@ export class RoleController extends BaseController {
   }
 
   @Post('/:id')
+  @verifyToken()
   @Validate()
   @ApiResponse({ type: UVAO_role })
   async update(@Param('id') id: string, @Body() body: UDTO_role) {
@@ -70,6 +77,7 @@ export class RoleController extends BaseController {
   }
 
   @Del('/:id')
+  @verifyToken()
   @Validate()
   async delete(@Param('id') id: string) {
     await this.service.delete(id);

+ 28 - 0
src/decorator/verifyToken.decorator.ts

@@ -0,0 +1,28 @@
+import { JoinPoint, MidwayDecoratorService, REQUEST_OBJ_CTX_KEY, createCustomMethodDecorator } from '@midwayjs/core';
+import { FrameworkErrorEnum, ServiceError } from 'free-midway-component';
+export const VERIFYTOKEN_KEY = 'decorator:verify_token';
+/**
+ *
+ * 只检测是否有token,此装饰器不做具体用token处理什么.
+ */
+export function verifyToken() {
+  return createCustomMethodDecorator(VERIFYTOKEN_KEY, {});
+}
+/**
+ * 验证token装饰器实现
+ * @param decoratorService 装饰器服务
+ */
+export function VerifyTokenInit(decoratorService: MidwayDecoratorService) {
+  decoratorService.registerMethodHandler(VERIFYTOKEN_KEY, options => {
+    return {
+      around: async (joinPoint: JoinPoint) => {
+        const instance = joinPoint.target;
+        const ctx = instance[REQUEST_OBJ_CTX_KEY];
+        const user = ctx.user;
+        if (!user) throw new ServiceError('未检测到登录信息,无法访问接口!', FrameworkErrorEnum.NOT_LOGIN);
+        const result = await joinPoint.proceed(...joinPoint.args);
+        return result;
+      },
+    };
+  });
+}

+ 1 - 3
src/middleware/checkToken.middleware.ts

@@ -5,9 +5,7 @@ import get = require('lodash/get');
 import { JwtService } from '@midwayjs/jwt';
 
 @Middleware()
-export class CheckTokenMiddleware
-  implements IMiddleware<Context, NextFunction>
-{
+export class CheckTokenMiddleware implements IMiddleware<Context, NextFunction> {
   @Inject()
   jwtService: JwtService;
   resolve() {

+ 6 - 3
src/service/chat.service.ts

@@ -3,7 +3,7 @@ import { InjectEntityModel } from '@midwayjs/typegoose';
 import { ReturnModelType } from '@typegoose/typegoose';
 import { BaseService, PageOptions, SearchBase } from 'free-midway-component';
 import { Chat } from '../entity/chat.entity';
-import { cloneDeep } from 'lodash';
+import { cloneDeep, get, head } from 'lodash';
 type modelType = ReturnModelType<typeof Chat>;
 @Provide()
 export class ChatService extends BaseService<modelType> {
@@ -50,6 +50,8 @@ export class ChatService extends BaseService<modelType> {
     // 将notRead结果放到l里,之后替换根变量
     pipes.push({ $addFields: { 'l.gid': { $toObjectId: '$l.group' }, 'l.pid': { $toObjectId: '$l.patient' }, 'l.did': { $toObjectId: '$l.doctor' }, 'l.notRead': '$notRead' } });
     pipes.push({ $replaceRoot: { newRoot: '$l' } });
+    // 查询总数
+
     pipes.push({
       $lookup: {
         from: 'group',
@@ -78,12 +80,13 @@ export class ChatService extends BaseService<modelType> {
     });
     pipes.push({ $unwind: '$dInfo' });
     if (name) {
-      pipes.push({ $match: { 'pInfo.name': name } });
+      pipes.push({ $match: { 'pInfo.name': new RegExp(name) } });
     }
     pipes.push({ $project: this.lastChatRecordListItem });
+    const totalResult = await this.model.aggregate([...pipes, { $count: 'total' }]);
     if (skip && skip >= 0) pipes.push({ $skip: skip });
     if (limit && limit > 0) pipes.push({ $limit: limit });
     const result = await this.model.aggregate(pipes);
-    return result;
+    return { data: result, total: get(head(totalResult), 'total') };
   }
 }