|
@@ -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;
|
|
|
+ }
|
|
|
+}
|