## 概要 [Task2785: API実装(ワークフロー削除API)](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2785) - ワークフロー削除APIとテストを実装しました。 ## レビューポイント - リポジトリの削除ロジックは適切か - テストケースは適切か ## UIの変更 - なし ## 動作確認状況 - ローカルで確認
219 lines
6.0 KiB
TypeScript
219 lines
6.0 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Get,
|
|
HttpStatus,
|
|
Param,
|
|
Post,
|
|
Req,
|
|
UseGuards,
|
|
} from '@nestjs/common';
|
|
import {
|
|
ApiBearerAuth,
|
|
ApiOperation,
|
|
ApiResponse,
|
|
ApiTags,
|
|
} from '@nestjs/swagger';
|
|
import jwt from 'jsonwebtoken';
|
|
import { AccessToken } from '../../common/token';
|
|
import { ErrorResponse } from '../../common/error/types/types';
|
|
import {
|
|
GetWorkflowsResponse,
|
|
CreateWorkflowsRequest,
|
|
CreateWorkflowsResponse,
|
|
UpdateWorkflowResponse,
|
|
UpdateWorkflowRequest,
|
|
UpdateWorkflowRequestParam,
|
|
DeleteWorkflowRequestParam,
|
|
DeleteWorkflowResponse,
|
|
} from './types/types';
|
|
import { AuthGuard } from '../../common/guards/auth/authguards';
|
|
import { RoleGuard } from '../../common/guards/role/roleguards';
|
|
import { ADMIN_ROLES } from '../../constants';
|
|
import { retrieveAuthorizationToken } from '../../common/http/helper';
|
|
import { Request } from 'express';
|
|
import { makeContext } from '../../common/log';
|
|
import { WorkflowsService } from './workflows.service';
|
|
|
|
@ApiTags('workflows')
|
|
@Controller('workflows')
|
|
export class WorkflowsController {
|
|
constructor(private readonly workflowsService: WorkflowsService) {}
|
|
|
|
@ApiResponse({
|
|
status: HttpStatus.OK,
|
|
type: GetWorkflowsResponse,
|
|
description: '成功時のレスポンス',
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.UNAUTHORIZED,
|
|
description: '認証エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
description: '想定外のサーバーエラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiOperation({
|
|
operationId: 'getWorkflows',
|
|
description: 'アカウント内のワークフローの一覧を取得します',
|
|
})
|
|
@ApiBearerAuth()
|
|
@UseGuards(AuthGuard)
|
|
@UseGuards(RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN] }))
|
|
@Get()
|
|
async getWorkflows(@Req() req: Request): Promise<GetWorkflowsResponse> {
|
|
const token = retrieveAuthorizationToken(req);
|
|
const { userId } = jwt.decode(token, { json: true }) as AccessToken;
|
|
|
|
const context = makeContext(userId);
|
|
|
|
const workflows = await this.workflowsService.getWorkflows(context, userId);
|
|
|
|
return { workflows };
|
|
}
|
|
|
|
@ApiResponse({
|
|
status: HttpStatus.OK,
|
|
type: CreateWorkflowsResponse,
|
|
description: '成功時のレスポンス',
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.BAD_REQUEST,
|
|
description: 'パラメータ不正エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.UNAUTHORIZED,
|
|
description: '認証エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
description: '想定外のサーバーエラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiOperation({
|
|
operationId: 'createWorkflows',
|
|
description: 'アカウント内にワークフローを新規作成します',
|
|
})
|
|
@ApiBearerAuth()
|
|
@UseGuards(AuthGuard)
|
|
@UseGuards(RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN] }))
|
|
@Post()
|
|
async createWorkflows(
|
|
@Req() req: Request,
|
|
@Body() body: CreateWorkflowsRequest,
|
|
): Promise<CreateWorkflowsResponse> {
|
|
const { authorId, worktypeId, templateId, typists } = body;
|
|
const token = retrieveAuthorizationToken(req);
|
|
const { userId } = jwt.decode(token, { json: true }) as AccessToken;
|
|
|
|
const context = makeContext(userId);
|
|
await this.workflowsService.createWorkflow(
|
|
context,
|
|
userId,
|
|
authorId,
|
|
worktypeId,
|
|
templateId,
|
|
typists,
|
|
);
|
|
|
|
return {};
|
|
}
|
|
|
|
@ApiResponse({
|
|
status: HttpStatus.OK,
|
|
type: UpdateWorkflowResponse,
|
|
description: '成功時のレスポンス',
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.BAD_REQUEST,
|
|
description: 'パラメータ不正エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.UNAUTHORIZED,
|
|
description: '認証エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
description: '想定外のサーバーエラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiOperation({
|
|
operationId: 'updateWorkflow',
|
|
description: 'アカウント内のワークフローを編集します',
|
|
})
|
|
@ApiBearerAuth()
|
|
@UseGuards(AuthGuard)
|
|
@UseGuards(RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN] }))
|
|
@Post('/:workflowId')
|
|
async updateWorkflow(
|
|
@Req() req: Request,
|
|
@Param() param: UpdateWorkflowRequestParam,
|
|
@Body() body: UpdateWorkflowRequest,
|
|
): Promise<UpdateWorkflowResponse> {
|
|
const { authorId, worktypeId, templateId, typists } = body;
|
|
const { workflowId } = param;
|
|
const token = retrieveAuthorizationToken(req);
|
|
const { userId } = jwt.decode(token, { json: true }) as AccessToken;
|
|
|
|
const context = makeContext(userId);
|
|
await this.workflowsService.updateWorkflow(
|
|
context,
|
|
userId,
|
|
workflowId,
|
|
authorId,
|
|
worktypeId,
|
|
templateId,
|
|
typists,
|
|
);
|
|
|
|
return {};
|
|
}
|
|
|
|
@ApiResponse({
|
|
status: HttpStatus.OK,
|
|
type: DeleteWorkflowResponse,
|
|
description: '成功時のレスポンス',
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.BAD_REQUEST,
|
|
description: 'パラメータ不正エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.UNAUTHORIZED,
|
|
description: '認証エラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiResponse({
|
|
status: HttpStatus.INTERNAL_SERVER_ERROR,
|
|
description: '想定外のサーバーエラー',
|
|
type: ErrorResponse,
|
|
})
|
|
@ApiOperation({
|
|
operationId: 'deleteWorkflow',
|
|
description: 'アカウント内のワークフローを削除します',
|
|
})
|
|
@ApiBearerAuth()
|
|
@UseGuards(AuthGuard)
|
|
@UseGuards(RoleGuard.requireds({ roles: [ADMIN_ROLES.ADMIN] }))
|
|
@Post('/:workflowId/delete')
|
|
async deleteWorkflow(
|
|
@Req() req: Request,
|
|
@Param() param: DeleteWorkflowRequestParam,
|
|
): Promise<DeleteWorkflowResponse> {
|
|
const { workflowId } = param;
|
|
const token = retrieveAuthorizationToken(req);
|
|
const { userId } = jwt.decode(token, { json: true }) as AccessToken;
|
|
|
|
const context = makeContext(userId);
|
|
await this.workflowsService.deleteWorkflow(context, userId, workflowId);
|
|
return {};
|
|
}
|
|
}
|