zs пре 1 година
родитељ
комит
96545d8d91

+ 11 - 1
src/controller/core/record.controller.ts

@@ -14,7 +14,7 @@ export class RecordController extends BaseController {
   @Validate()
   @Validate()
   @ApiResponse({ type: CVO_record })
   @ApiResponse({ type: CVO_record })
   async create(@Body() data: CDTO_record) {
   async create(@Body() data: CDTO_record) {
-    const dbData = await this.service.create(data);
+    const dbData = await this.service.createBefore(data);
     const result = new CVO_record(dbData);
     const result = new CVO_record(dbData);
     return result;
     return result;
   }
   }
@@ -32,6 +32,16 @@ export class RecordController extends BaseController {
     return { data, total };
     return { data, total };
   }
   }
 
 
+  @Get('/special')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_record })
+  async special() {
+    const list = await this.service.special(this.ctx.filter);
+    const data = list.data;
+    const total = list.total;
+    return { data, total };
+  }
+
   @Get('/:id')
   @Get('/:id')
   @ApiResponse({ type: FVO_record })
   @ApiResponse({ type: FVO_record })
   async fetch(@Param('id') id: string) {
   async fetch(@Param('id') id: string) {

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

@@ -35,6 +35,15 @@ export class TokenController {
     return result;
     return result;
   }
   }
 
 
+  @Get('/tokenJwt')
+  @ApiResponse({})
+  async tokenJwt() {
+    const token = get(this.ctx, 'request.header.token');
+    assert(token, '缺少token信息');
+    const result: any = await this.jwtService.decode(token);
+    return result;
+  }
+
   // @Get('/app')
   // @Get('/app')
   // async appLogin(fiiter) {
   // async appLogin(fiiter) {
   //   const { config, js_code } = fiiter.query;
   //   const { config, js_code } = fiiter.query;

+ 50 - 0
src/service/core/record.service.ts

@@ -3,9 +3,59 @@ import { InjectEntityModel } from '@midwayjs/typegoose';
 import { ReturnModelType } from '@typegoose/typegoose';
 import { ReturnModelType } from '@typegoose/typegoose';
 import { BaseService } from 'free-midway-component';
 import { BaseService } from 'free-midway-component';
 import { Record } from '../../entity/core/record.entity';
 import { Record } from '../../entity/core/record.entity';
+import { get } from 'lodash';
+import { Video } from '../../entity/core/video.entity';
+import { User } from '../../entity/system/user.entity';
 type modelType = ReturnModelType<typeof Record>;
 type modelType = ReturnModelType<typeof Record>;
 @Provide()
 @Provide()
 export class RecordService extends BaseService<modelType> {
 export class RecordService extends BaseService<modelType> {
   @InjectEntityModel(Record)
   @InjectEntityModel(Record)
   model: modelType;
   model: modelType;
+  @InjectEntityModel(Video)
+  vModel: ReturnModelType<typeof Video>;
+  @InjectEntityModel(User)
+  uModel: ReturnModelType<typeof User>;
+
+  // 特殊查询
+  async special(filter) {
+    const { skip = 0, limit = 0, user_name, video_name, ...info } = filter;
+    if (user_name) {
+      const userData = await this.uModel.findOne({ nick_name: user_name }).lean();
+      if (userData) info.user_id = get(userData, '_id');
+    }
+    if (video_name) {
+      const videoData = await this.vModel.findOne({ title: { $regex: video_name } }).lean();
+      if (videoData) info.video_id = get(videoData, '_id');
+    }
+    const data = await this.model.find(info).skip(skip).limit(limit).lean();
+    for (const val of data) {
+      if (get(val, 'user_id')) {
+        // 查询用户信息
+        const userData = await this.uModel.findById(val.user_id).lean();
+        if (userData) Object.assign(val, { user_name: userData.nick_name });
+      }
+      if (get(val, 'video_id')) {
+        // 查询视频信息
+        const videoData = await this.vModel.findById(val.video_id).lean();
+        if (videoData) Object.assign(val, { video_name: videoData.title });
+      }
+    }
+    const total = await this.model.count(info);
+    return { data, total };
+  }
+  // 特殊创建
+  async createBefore(data) {
+    const { user_id, video_id, ...info } = data;
+    let result;
+    const record = await this.model.findOne({ user_id, video_id }).lean();
+    if (record) {
+      if (get(record, 'time') < get(info, 'time')) {
+        await this.model.updateOne({ _id: get(record, '_id') }, info);
+        result = await this.model.findById(get(record, '_id'));
+      }
+    } else {
+      result = await this.model.create(data);
+    }
+    return result;
+  }
 }
 }