lrf 4 miesięcy temu
rodzic
commit
3f261d4798

+ 100 - 0
src/controller/match/matchRegistration.controller.ts

@@ -0,0 +1,100 @@
+import { MatchService } from '../../service/platform/match.service';
+import { CVO_match, FVO_match, QVO_match, UVAO_match } from '../../interface/platform/match.interface';
+import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
+import { Validate } from '@midwayjs/validate';
+import { Controller, Inject, Get, Param, Post, Body, Del, Query } from '@midwayjs/core';
+import { get, omit, pick } from 'lodash';
+import { ServiceError, ErrorCode } from '../../error/service.error';
+import { BaseController } from '../../frame/BaseController';
+import { MatchRegistrationService } from '../../service/match/matchRegistration.service';
+import { UserService } from '../../service/system/user.service';
+import * as bcrypt from 'bcryptjs';
+const namePrefix = '创新大赛-赛事报名';
+@ApiTags(['创新大赛-赛事报名'])
+@Controller('/matchReg', { tagName: namePrefix })
+export class MatchRegistrationController implements BaseController {
+  @Inject()
+  service: MatchRegistrationService;
+  @Inject()
+  userService: UserService;
+  @Get('/')
+  @ApiTags('列表查询')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_match })
+  async index(@Query() query: object) {
+    const qobj = omit(query, ['skip', 'limit']);
+    const others: any = pick(query, ['skip', 'limit']);
+    others.order = { order_num: 'ASC' };
+    const result = await this.service.query(qobj, others);
+    return result;
+  }
+
+  @Get('/:id')
+  @ApiTags('单查询')
+  @ApiResponse({ type: FVO_match })
+  async fetch(@Param('id') id: number) {
+    const data = await this.service.fetch({ id });
+    const result = new FVO_match(data);
+    return result;
+  }
+
+  @Post('/', { routerName: `创建${namePrefix}` })
+  @ApiTags('创建数据')
+  @Validate()
+  @ApiResponse({ type: CVO_match })
+  async create(@Body() data: object) {
+    const userColumns = ['user', 'user_id']
+    let regData = omit(data, userColumns)
+    if (get(data, 'user_id')) {
+      regData = { user_id: get(data, 'user_id'), ...regData }
+    } else {
+      const user = get(data, 'user')
+      if (!user) throw new ServiceError(ErrorCode.MATCH_NEED_USER_INFO)
+      // 注册用户
+      await this.userService.createExamine(user);
+      await this.userService.checkPhone(user);
+      await this.userService.checkEmail(user);
+      // 处理密码, TODO:可能会要自动生成
+      const passowrd = get(user, 'password');
+      if (passowrd) {
+        const salt = bcrypt.genSaltSync(10);
+        const hash = bcrypt.hashSync(passowrd, salt);
+        Object.assign(user, { password: hash });
+      }
+      const dbData = await this.userService.create(user);
+      regData = { user_id: dbData.id, ...regData }
+    }
+    // 制作项目编号
+    const query = { match_id: get(data, 'match_id') }
+    const { total } = await this.service.query(query)
+    if (total > 0) throw new ServiceError(ErrorCode.MATCH_USER_HAS_REGISTED)
+    const result = await this.service.create(regData);
+    return false;
+  }
+
+  @Post('/:id', { routerName: `修改${namePrefix}` })
+  @ApiTags('修改数据')
+  @Validate()
+  @ApiResponse({ type: UVAO_match })
+  async update(@Param('id') id: number, @Body() data: object) {
+    if (!id) throw new ServiceError(ErrorCode.ID_NOT_FOUND);
+    const result = await this.service.update({ id }, data);
+    return result;
+  }
+
+  @Del('/:id', { routerName: `删除${namePrefix}` })
+  @ApiTags('删除数据')
+  @Validate()
+  async delete(@Param('id') id: number) {
+    if (!id) throw new ServiceError(ErrorCode.ID_NOT_FOUND);
+    const result = await this.service.delete({ id });
+    return result;
+  }
+
+  @Get('/detail/:id')
+  @ApiResponse({ type: FVO_match })
+  async detail(@Param('id') id: string) {
+    let data = await this.service.fetch({ id });
+    return data;
+  }
+}

+ 16 - 0
src/entity/match/matchRegistration.entity.ts

@@ -0,0 +1,16 @@
+import { Entity, Column } from 'typeorm';
+import { BaseModel } from '../../frame/BaseModel';
+//赛事
+@Entity('matchRegistration', { comment: '赛事报名' })
+export class MatchRegistration extends BaseModel {
+  @Column({ type: 'integer', comment: '赛事id' })
+  match_id: number;
+  @Column({ type: 'integer', comment: '用户id' })
+  user_id: number;
+  @Column({ type: 'jsonb', nullable: true, comment: '报名信息' })
+  info: Array<any>;
+  @Column({ type: 'character varying', nullable: true, comment: '审核状态:默认:0--符合要求:-1--已退回', default: '0' })
+  status: string;
+  @Column({ type: 'character varying', nullable: true, comment: '项目编号: ${match_id}-${user_id}-${该赛事第x位}' })
+  no: string;
+}

+ 4 - 0
src/error/service.error.ts

@@ -54,6 +54,10 @@ export enum ErrorCode {
   CONTACTAPPLY_ADMIN_NO_PERMISSION = 'CONTACTAPPLY_ADMIN_NO_PERMISSION',
   SERVICE_APPLY = 'SERVICE_APPLY',
 
+  //match
+  MATCH_NEED_USER_INFO = 'MATCH_NEED_USER_INFO',
+  MATCH_USER_HAS_REGISTED = 'MATCH_USER_HAS_REGISTED',
+
   DATA_NOT_FOUND = 'DATA_NOT_FOUND',
 
   // export

+ 11 - 0
src/service/match/matchRegistration.service.ts

@@ -0,0 +1,11 @@
+import { Provide } from '@midwayjs/core';
+import { InjectEntityModel } from '@midwayjs/typeorm';
+import { Repository } from 'typeorm';
+import { BaseServiceV2 } from '../../frame/BaseServiceV2';
+import { MatchRegistration } from '../../entity/match/matchRegistration.entity';
+@Provide()
+export class MatchRegistrationService extends BaseServiceV2 {
+  @InjectEntityModel(MatchRegistration)
+  model: Repository<MatchRegistration>;
+
+}