zs 1 年之前
父节点
当前提交
71929fb95c

+ 68 - 0
src/controller/core/record.controller.ts

@@ -0,0 +1,68 @@
+import { Body, Controller, Del, Get, Inject, Param, Post, Query } from '@midwayjs/decorator';
+import { BaseController } from 'free-midway-component';
+import { RecordService } from '../../service/core/record.service';
+import { CDTO_record, CVO_record, FVO_record, QDTO_record, QVO_record, UDTO_record, UVAO_record } from '../../interface/core/record.interface';
+import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
+import { Validate } from '@midwayjs/validate';
+@ApiTags(['用户观看记录'])
+@Controller('/record')
+export class RecordController extends BaseController {
+  @Inject()
+  service: RecordService;
+
+  @Post('/')
+  @Validate()
+  @ApiResponse({ type: CVO_record })
+  async create(@Body() data: CDTO_record) {
+    const dbData = await this.service.create(data);
+    const result = new CVO_record(dbData);
+    return result;
+  }
+  @Get('/')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_record })
+  async query(@Query() filter: QDTO_record, @Query('skip') skip: number, @Query('limit') limit: number) {
+    const list = await this.service.query(filter, { skip, limit });
+    const data = [];
+    for (const i of list) {
+      const newData = new QVO_record(i);
+      data.push(newData);
+    }
+    const total = await this.service.count(filter);
+    return { data, total };
+  }
+
+  @Get('/:id')
+  @ApiResponse({ type: FVO_record })
+  async fetch(@Param('id') id: string) {
+    const data = await this.service.fetch(id);
+    const result = new FVO_record(data);
+    return result;
+  }
+
+  @Post('/:id')
+  @Validate()
+  @ApiResponse({ type: UVAO_record })
+  async update(@Param('id') id: string, @Body() body: UDTO_record) {
+    const result = await this.service.updateOne(id, body);
+    return result;
+  }
+
+  @Del('/:id')
+  @Validate()
+  async delete(@Param('id') id: string) {
+    await this.service.delete(id);
+    return 'ok';
+  }
+  async createMany(...args: any[]) {
+    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.');
+  }
+}

+ 68 - 0
src/controller/core/video.controller.ts

@@ -0,0 +1,68 @@
+import { Body, Controller, Del, Get, Inject, Param, Post, Query } from '@midwayjs/decorator';
+import { BaseController } from 'free-midway-component';
+import { VideoService } from '../../service/core/video.service';
+import { CDTO_video, CVO_video, FVO_video, QDTO_video, QVO_video, UDTO_video, UVAO_video } from '../../interface/core/video.interface';
+import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
+import { Validate } from '@midwayjs/validate';
+@ApiTags(['视频'])
+@Controller('/video')
+export class VideoController extends BaseController {
+  @Inject()
+  service: VideoService;
+
+  @Post('/')
+  @Validate()
+  @ApiResponse({ type: CVO_video })
+  async create(@Body() data: CDTO_video) {
+    const dbData = await this.service.create(data);
+    const result = new CVO_video(dbData);
+    return result;
+  }
+  @Get('/')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_video })
+  async query(@Query() filter: QDTO_video, @Query('skip') skip: number, @Query('limit') limit: number) {
+    const list = await this.service.query(filter, { skip, limit });
+    const data = [];
+    for (const i of list) {
+      const newData = new QVO_video(i);
+      data.push(newData);
+    }
+    const total = await this.service.count(filter);
+    return { data, total };
+  }
+
+  @Get('/:id')
+  @ApiResponse({ type: FVO_video })
+  async fetch(@Param('id') id: string) {
+    const data = await this.service.fetch(id);
+    const result = new FVO_video(data);
+    return result;
+  }
+
+  @Post('/:id')
+  @Validate()
+  @ApiResponse({ type: UVAO_video })
+  async update(@Param('id') id: string, @Body() body: UDTO_video) {
+    const result = await this.service.updateOne(id, body);
+    return result;
+  }
+
+  @Del('/:id')
+  @Validate()
+  async delete(@Param('id') id: string) {
+    await this.service.delete(id);
+    return 'ok';
+  }
+  async createMany(...args: any[]) {
+    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.');
+  }
+}

+ 21 - 21
src/controller/system/config.controller.ts

@@ -1,43 +1,43 @@
-import { Body, Controller, Del, Get, Inject, Param, Post } from '@midwayjs/decorator';
-import { BaseController, FrameworkErrorEnum, ServiceError } from 'free-midway-component';
+import { Body, Controller, Del, Get, Inject, Param, Post, Query } from '@midwayjs/decorator';
+import { BaseController } from 'free-midway-component';
 import { ConfigService } from '../../service/system/config.service';
 import { ConfigService } from '../../service/system/config.service';
-import { CDTO_config, CVO_config, FVO_config, UDTO_config, UVAO_config } from '../../interface/system/config.interface';
+import { CDTO_config, CVO_config, FVO_config, QDTO_config, QVO_config, UDTO_config, UVAO_config } from '../../interface/system/config.interface';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
 import { Validate } from '@midwayjs/validate';
 import { Validate } from '@midwayjs/validate';
-import { FrameErrorEnum } from '../../error/frame.error';
-import { I18nService } from '../../service/i18n.service';
-@ApiTags(['设置表'])
+@ApiTags(['基本设置'])
 @Controller('/config')
 @Controller('/config')
 export class ConfigController extends BaseController {
 export class ConfigController extends BaseController {
   @Inject()
   @Inject()
   service: ConfigService;
   service: ConfigService;
-  @Inject()
-  i18n: I18nService;
+
   @Post('/')
   @Post('/')
   @Validate()
   @Validate()
   @ApiResponse({ type: CVO_config })
   @ApiResponse({ type: CVO_config })
   async create(@Body() data: CDTO_config) {
   async create(@Body() data: CDTO_config) {
-    throw new ServiceError(this.i18n.translateError(FrameErrorEnum.SERVICE_CANT_USE), FrameErrorEnum.SERVICE_CANT_USE);
-    // const dbData = await this.service.create(data);
-    // const result = new CVO_config(dbData);
-    // return result;
+    const dbData = await this.service.create(data);
+    const result = new CVO_config(dbData);
+    return result;
   }
   }
   @Get('/')
   @Get('/')
   @ApiQuery({ name: 'query' })
   @ApiQuery({ name: 'query' })
-  @ApiResponse({ type: FVO_config })
-  async query() {
-    const data = await this.service.getConfig();
-    const result = new FVO_config(data);
-    return result;
+  @ApiResponse({ type: QVO_config })
+  async query(@Query() filter: QDTO_config, @Query('skip') skip: number, @Query('limit') limit: number) {
+    const list = await this.service.query(filter, { skip, limit });
+    const data = [];
+    for (const i of list) {
+      const newData = new QVO_config(i);
+      data.push(newData);
+    }
+    const total = await this.service.count(filter);
+    return { data, total };
   }
   }
 
 
   @Get('/:id')
   @Get('/:id')
   @ApiResponse({ type: FVO_config })
   @ApiResponse({ type: FVO_config })
   async fetch(@Param('id') id: string) {
   async fetch(@Param('id') id: string) {
-    throw new ServiceError(this.i18n.translateError(FrameErrorEnum.SERVICE_CANT_USE), FrameErrorEnum.SERVICE_CANT_USE);
-    // const data = await this.service.fetch(id);
-    // const result = new FVO_config(data);
-    // return result;
+    const data = await this.service.fetch(id);
+    const result = new FVO_config(data);
+    return result;
   }
   }
 
 
   @Post('/:id')
   @Post('/:id')

+ 17 - 0
src/entity/core/record.entity.ts

@@ -0,0 +1,17 @@
+import { modelOptions, prop } from '@typegoose/typegoose';
+import { BaseModel } from 'free-midway-component';
+@modelOptions({
+  schemaOptions: { collection: 'record' },
+})
+export class Record extends BaseModel {
+  @prop({ required: false, index: true, zh: '用户id' })
+  user_id: string;
+  @prop({ required: false, index: true, zh: '视频id' })
+  video_id: string;
+  @prop({ required: false, index: true, zh: '观看时长' })
+  time: string;
+  @prop({ required: false, index: false, zh: '开始时间' })
+  start_time: string;
+  @prop({ required: false, index: false, zh: '结束时间' })
+  end_time: string;
+}

+ 23 - 0
src/entity/core/video.entity.ts

@@ -0,0 +1,23 @@
+import { modelOptions, prop } from '@typegoose/typegoose';
+import { BaseModel } from 'free-midway-component';
+@modelOptions({
+  schemaOptions: { collection: 'video' },
+})
+export class Video extends BaseModel {
+  @prop({ required: false, index: true, zh: '标题' })
+  title: string;
+  @prop({ required: false, index: false, zh: '简介' })
+  brief: string;
+  @prop({ required: false, index: false, zh: '视频来源' })
+  sourse: string;
+  @prop({ required: false, index: false, zh: '类型' })
+  type: string;
+  @prop({ required: false, index: false, zh: '封面' })
+  file: Array<any>;
+  @prop({ required: false, index: true, zh: '播放次数' })
+  number: number;
+  @prop({ required: false, index: false, zh: '概述' })
+  summary: string;
+  @prop({ required: false, index: true, zh: '是否公开' })
+  is_show: string;
+}

+ 9 - 7
src/entity/system/config.entity.ts

@@ -4,12 +4,14 @@ import { BaseModel } from 'free-midway-component';
   schemaOptions: { collection: 'config' },
   schemaOptions: { collection: 'config' },
 })
 })
 export class Config extends BaseModel {
 export class Config extends BaseModel {
-  @prop({ required: false, index: false, zh: 'logo' })
+  @prop({ required: false, index: false, zh: '名称' })
+  name: string;
+  @prop({ required: false, index: false, zh: '网址logo' })
   logo: Array<any>;
   logo: Array<any>;
-  @prop({ required: false, index: false, zh: '早餐时间', remark: '' })
-  b_time: Array<any>;
-  @prop({ required: false, index: false, zh: '午餐时间' })
-  l_time: Array<any>;
-  @prop({ required: false, index: false, zh: '晚餐时间' })
-  d_time: Array<any>;
+  @prop({ required: false, index: false, zh: '联系电话' })
+  phone: string;
+  @prop({ required: false, index: false, zh: '首页轮播图' })
+  file: Array<any>;
+  @prop({ required: false, index: false, zh: '是否公开', default: '0' })
+  is_show: string;
 }
 }

+ 87 - 0
src/interface/core/record.interface.ts

@@ -0,0 +1,87 @@
+import { Rule, RuleType } from '@midwayjs/validate';
+import { ApiProperty } from '@midwayjs/swagger';
+import { SearchBase } from 'free-midway-component';
+import get = require('lodash/get');
+const dealVO = (cla, data) => {
+  for (const key in cla) {
+    const val = get(data, key);
+    if (val || val === 0) cla[key] = val;
+  }
+};
+export class FVO_record {
+  constructor(data: object) {
+    dealVO(this, data);
+  }
+  @ApiProperty({ description: '数据id' })
+  _id: string = undefined;
+  @ApiProperty({ description: '用户id' })
+  'user_id': string = undefined;
+  @ApiProperty({ description: '视频id' })
+  'video_id': string = undefined;
+  @ApiProperty({ description: '观看时长' })
+  'time': string = undefined;
+  @ApiProperty({ description: '开始时间' })
+  'start_time': string = undefined;
+  @ApiProperty({ description: '结束时间' })
+  'end_time': string = undefined;
+}
+
+export class QDTO_record extends SearchBase {
+  constructor() {
+    const like_prop = [];
+    const props = ['user_id', 'video_id', 'time'];
+    const mapping = [];
+    super({ like_prop, props, mapping });
+  }
+  @ApiProperty({ description: '用户id' })
+  'user_id': string = undefined;
+  @ApiProperty({ description: '视频id' })
+  'video_id': string = undefined;
+  @ApiProperty({ description: '观看时长' })
+  'time': string = undefined;
+}
+
+export class QVO_record extends FVO_record {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class CDTO_record {
+  @ApiProperty({ description: '用户id' })
+  @Rule(RuleType['string']().empty(''))
+  'user_id': string = undefined;
+  @ApiProperty({ description: '视频id' })
+  @Rule(RuleType['string']().empty(''))
+  'video_id': string = undefined;
+  @ApiProperty({ description: '观看时长' })
+  @Rule(RuleType['string']().empty(''))
+  'time': string = undefined;
+  @ApiProperty({ description: '开始时间' })
+  @Rule(RuleType['string']().empty(''))
+  'start_time': string = undefined;
+  @ApiProperty({ description: '结束时间' })
+  @Rule(RuleType['string']().empty(''))
+  'end_time': string = undefined;
+}
+
+export class CVO_record extends FVO_record {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class UDTO_record extends CDTO_record {
+  @ApiProperty({ description: '数据id' })
+  @Rule(RuleType['string']().empty(''))
+  _id: string = undefined;
+}
+
+export class UVAO_record extends FVO_record {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}

+ 102 - 0
src/interface/core/video.interface.ts

@@ -0,0 +1,102 @@
+import { Rule, RuleType } from '@midwayjs/validate';
+import { ApiProperty } from '@midwayjs/swagger';
+import { SearchBase } from 'free-midway-component';
+import get = require('lodash/get');
+const dealVO = (cla, data) => {
+  for (const key in cla) {
+    const val = get(data, key);
+    if (val || val === 0) cla[key] = val;
+  }
+};
+export class FVO_video {
+  constructor(data: object) {
+    dealVO(this, data);
+  }
+  @ApiProperty({ description: '数据id' })
+  _id: string = undefined;
+  @ApiProperty({ description: '标题' })
+  'title': string = undefined;
+  @ApiProperty({ description: '简介' })
+  'brief ': string = undefined;
+  @ApiProperty({ description: '视频来源' })
+  'sourse': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
+  @ApiProperty({ description: '封面' })
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '播放次数' })
+  'number': number = undefined;
+  @ApiProperty({ description: '概述' })
+  'summary': string = undefined;
+  @ApiProperty({ description: '是否公开' })
+  'is_show': string = undefined;
+}
+
+export class QDTO_video extends SearchBase {
+  constructor() {
+    const like_prop = [];
+    const props = ['title', 'number', 'is_show'];
+    const mapping = [];
+    super({ like_prop, props, mapping });
+  }
+  @ApiProperty({ description: '标题' })
+  'title': string = undefined;
+  @ApiProperty({ description: '播放次数' })
+  'number': number = undefined;
+  @ApiProperty({ description: '是否公开' })
+  'is_show': string = undefined;
+}
+
+export class QVO_video extends FVO_video {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class CDTO_video {
+  @ApiProperty({ description: '标题' })
+  @Rule(RuleType['string']().empty(''))
+  'title': string = undefined;
+  @ApiProperty({ description: '简介' })
+  @Rule(RuleType['string']().empty(''))
+  'brief ': string = undefined;
+  @ApiProperty({ description: '视频来源' })
+  @Rule(RuleType['string']().empty(''))
+  'sourse': string = undefined;
+  @ApiProperty({ description: '类型' })
+  @Rule(RuleType['string']().empty(''))
+  'type': string = undefined;
+  @ApiProperty({ description: '封面' })
+  @Rule(RuleType['array']().empty(''))
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '播放次数' })
+  @Rule(RuleType['number']().empty(''))
+  'number': number = undefined;
+  @ApiProperty({ description: '概述' })
+  @Rule(RuleType['string']().empty(''))
+  'summary': string = undefined;
+  @ApiProperty({ description: '是否公开' })
+  @Rule(RuleType['string']().empty(''))
+  'is_show': string = undefined;
+}
+
+export class CVO_video extends FVO_video {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class UDTO_video extends CDTO_video {
+  @ApiProperty({ description: '数据id' })
+  @Rule(RuleType['string']().empty(''))
+  _id: string = undefined;
+}
+
+export class UVAO_video extends FVO_video {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}

+ 21 - 16
src/interface/system/config.interface.ts

@@ -14,14 +14,16 @@ export class FVO_config {
   }
   }
   @ApiProperty({ description: '数据id' })
   @ApiProperty({ description: '数据id' })
   _id: string = undefined;
   _id: string = undefined;
-  @ApiProperty({ description: 'logo' })
+  @ApiProperty({ description: '名称' })
+  'name': string = undefined;
+  @ApiProperty({ description: '网址logo' })
   'logo': Array<any> = undefined;
   'logo': Array<any> = undefined;
-  @ApiProperty({ description: '早餐时间' })
-  'b_time': Array<any> = undefined;
-  @ApiProperty({ description: '午餐时间' })
-  'l_time': Array<any> = undefined;
-  @ApiProperty({ description: '晚餐时间' })
-  'd_time': Array<any> = undefined;
+  @ApiProperty({ description: '联系电话' })
+  'phone': string = undefined;
+  @ApiProperty({ description: '首页轮播图' })
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '是否公开' })
+  'is_show': string = undefined;
 }
 }
 
 
 
 
@@ -44,18 +46,21 @@ export class QVO_config extends FVO_config {
 
 
 
 
 export class CDTO_config {
 export class CDTO_config {
-  @ApiProperty({ description: 'logo' })
+  @ApiProperty({ description: '名称' })
+@Rule(RuleType['string']().empty(''))
+  'name': string = undefined;
+  @ApiProperty({ description: '网址logo' })
 @Rule(RuleType['array']().empty(''))
 @Rule(RuleType['array']().empty(''))
   'logo': Array<any> = undefined;
   'logo': Array<any> = undefined;
-  @ApiProperty({ description: '早餐时间' })
+  @ApiProperty({ description: '联系电话' })
+@Rule(RuleType['string']().empty(''))
+  'phone': string = undefined;
+  @ApiProperty({ description: '首页轮播图' })
 @Rule(RuleType['array']().empty(''))
 @Rule(RuleType['array']().empty(''))
-  'b_time': Array<any> = undefined;
-  @ApiProperty({ description: '午餐时间' })
-@Rule(RuleType['array']().empty(''))
-  'l_time': Array<any> = undefined;
-  @ApiProperty({ description: '晚餐时间' })
-@Rule(RuleType['array']().empty(''))
-  'd_time': Array<any> = undefined;
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '是否公开' })
+@Rule(RuleType['string']().empty(''))
+  'is_show': string = undefined;
 }
 }
 
 
 
 

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

@@ -0,0 +1,11 @@
+import { Provide } from '@midwayjs/decorator';
+import { InjectEntityModel } from '@midwayjs/typegoose';
+import { ReturnModelType } from '@typegoose/typegoose';
+import { BaseService } from 'free-midway-component';
+import { Record } from '../../entity/core/record.entity';
+type modelType = ReturnModelType<typeof Record>;
+@Provide()
+export class RecordService extends BaseService<modelType> {
+  @InjectEntityModel(Record)
+  model: modelType;
+}

+ 11 - 0
src/service/core/video.service.ts

@@ -0,0 +1,11 @@
+import { Provide } from '@midwayjs/decorator';
+import { InjectEntityModel } from '@midwayjs/typegoose';
+import { ReturnModelType } from '@typegoose/typegoose';
+import { BaseService } from 'free-midway-component';
+import { Video } from '../../entity/core/video.entity';
+type modelType = ReturnModelType<typeof Video>;
+@Provide()
+export class VideoService extends BaseService<modelType> {
+  @InjectEntityModel(Video)
+  model: modelType;
+}

+ 0 - 6
src/service/system/config.service.ts

@@ -8,10 +8,4 @@ type modelType = ReturnModelType<typeof Config>;
 export class ConfigService extends BaseService<modelType> {
 export class ConfigService extends BaseService<modelType> {
   @InjectEntityModel(Config)
   @InjectEntityModel(Config)
   model: modelType;
   model: modelType;
-  // 只允许有一个config
-  async getConfig() {
-    let data = await this.model.findOne({}).lean();
-    if (!data) data = await this.model.create({ b_time: ['06:30', '08:00'], l_time: ['11:30', '13:00'], d_time: ['17:30', '18:30'] });
-    return data;
-  }
 }
 }