Merged PR 90: 全体見直しをかけ、レビュー依頼する

## 概要
[Task1677: 全体見直しをかけ、レビュー依頼する](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/1677)

- 外部連携API IFについて見直し、各APIに説明を追加しました。
  - ユーザー情報取得API
  - 認証情報再生成API
  - 音声ファイルアップロード完了API(タスク追加API)
  - ステータス変更API
    - チェックアウト
    - チェックイン
    - キャンセル
    - 中断
    - 差し戻し
    - バックアップ
  - テンプレートファイルダウンロード先取得API
  - 次ファイル情報取得API
  - 音声ファイル、タスク情報取得API
  - 認証情報生成API

## レビューポイント
- 外部連携API IFの実装としても漏れはないか
- 各APIの説明は適切か
- 各APIのパス、パラメータは適切か
- API間で文言の統一はできているか

## UIの変更
無し

## 動作確認状況
- ローカルで確認
This commit is contained in:
makabe.t 2023-05-08 08:26:24 +00:00
parent 085f41134a
commit b3ab401cbc
8 changed files with 273 additions and 185 deletions

View File

@ -17,6 +17,7 @@
"post": {
"operationId": "token",
"summary": "",
"description": "AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します",
"parameters": [],
"requestBody": {
"required": true,
@ -67,6 +68,7 @@
"post": {
"operationId": "accessToken",
"summary": "",
"description": "リフレッシュトークンを元にアクセストークンを再生成します",
"parameters": [],
"responses": {
"200": {
@ -368,10 +370,11 @@
]
}
},
"/users/user-info": {
"/users/relations": {
"get": {
"operationId": "getUserInfo",
"operationId": "getRelations",
"summary": "",
"description": "ログインしているユーザーに関連する各種情報を取得します",
"parameters": [],
"responses": {
"200": {
@ -379,7 +382,7 @@
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GetUserInfoResponse"
"$ref": "#/components/schemas/GetRelationsResponse"
}
}
}
@ -415,8 +418,9 @@
},
"/files/audio/upload-finished": {
"post": {
"operationId": "createTask",
"operationId": "uploadFinished",
"summary": "",
"description": "アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します",
"parameters": [],
"requestBody": {
"required": true,
@ -467,6 +471,7 @@
"get": {
"operationId": "uploadLocation",
"summary": "",
"description": "ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します",
"parameters": [],
"responses": {
"200": {
@ -512,12 +517,13 @@
"get": {
"operationId": "downloadLocation",
"summary": "",
"description": "指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します",
"parameters": [
{
"name": "audioFileId",
"required": true,
"in": "query",
"description": "音声ファイル情報をDBから取得するためのID",
"description": "ODMSCloud上で管理する音声ファイルのID",
"schema": {
"type": "number"
}
@ -567,6 +573,7 @@
"get": {
"operationId": "downloadTemplateLocation",
"summary": "",
"description": "指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します",
"parameters": [
{
"name": "audioFileId",
@ -618,83 +625,29 @@
]
}
},
"/files/audio/next": {
"get": {
"operationId": "getNextAudioFile",
"summary": "",
"parameters": [
{
"name": "endedFileId",
"required": true,
"in": "query",
"description": "文字起こし完了したタスクの音声ファイルID",
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "成功時のレスポンス",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AudioNextResponse"
}
}
}
},
"401": {
"description": "認証エラー",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "想定外のサーバーエラー",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"tags": ["files"],
"security": [
{
"bearer": []
}
]
}
},
"/tasks": {
"get": {
"operationId": "getTasks",
"summary": "",
"description": "音声ファイル・文字起こしタスク情報をページ指定して取得します。",
"parameters": [
{
"name": "pageNumber",
"required": true,
"name": "limit",
"required": false,
"in": "query",
"description": "ページ番号(ページサイズごとに区切った何ページ目を取得するか",
"description": "タスクの取得件数(指定しない場合はデフォルト値)",
"schema": {
"minimum": 1,
"default": 200,
"type": "number"
}
},
{
"name": "pageSize",
"required": true,
"name": "offset",
"required": false,
"in": "query",
"description": "ページサイズ(一度に何件のタスクを取得するか",
"description": "オフセット(何件目から取得するか 設定しない場合はデフォルト値)",
"schema": {
"minimum": 1,
"default": 0,
"type": "number"
}
}
@ -739,10 +692,67 @@
]
}
},
"/tasks/next": {
"get": {
"operationId": "getNextAudioFile",
"summary": "",
"description": "指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します",
"parameters": [
{
"name": "endedFileId",
"required": true,
"in": "query",
"description": "文字起こし完了したタスクの音声ファイルID",
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "成功時のレスポンス",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AudioNextResponse"
}
}
}
},
"401": {
"description": "認証エラー",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "想定外のサーバーエラー",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"tags": ["tasks"],
"security": [
{
"bearer": []
}
]
}
},
"/tasks/{audioFileId}/checkout": {
"post": {
"operationId": "checkout",
"summary": "",
"description": "指定した文字起こしタスクをチェックアウトしますステータスをInprogressにします",
"parameters": [
{
"name": "audioFileId",
@ -808,6 +818,7 @@
"post": {
"operationId": "checkin",
"summary": "",
"description": "指定した文字起こしタスクをチェックインしますステータスをFinishedにします",
"parameters": [
{
"name": "audioFileId",
@ -873,6 +884,7 @@
"post": {
"operationId": "cancel",
"summary": "",
"description": "指定した文字起こしタスクをキャンセルしますステータスをUploadedにします",
"parameters": [
{
"name": "audioFileId",
@ -938,6 +950,7 @@
"post": {
"operationId": "suspend",
"summary": "",
"description": "指定した文字起こしタスクを一時中断しますステータスをPendingにします",
"parameters": [
{
"name": "audioFileId",
@ -1003,6 +1016,7 @@
"post": {
"operationId": "sendBack",
"summary": "",
"description": "指定した文字起こしタスクを差し戻しますステータスをPendingにします",
"parameters": [
{
"name": "audioFileId",
@ -1068,6 +1082,7 @@
"post": {
"operationId": "backup",
"summary": "",
"description": "指定した文字起こしタスクをバックアップしますステータスをBackupにします",
"parameters": [
{
"name": "audioFileId",
@ -1460,12 +1475,12 @@
},
"required": ["workTypeId", "optionItemList"]
},
"GetUserInfoResponse": {
"GetRelationsResponse": {
"type": "object",
"properties": {
"authorId": {
"type": "string",
"description": "自分自身(ログイン認証)したAuthorID"
"description": "ログインしたユーザーのAuthorIDAuthorでない場合は空文字"
},
"authorIdList": {
"description": "属しているアカウントのAuthorID List(全て)",
@ -1476,7 +1491,7 @@
},
"workTypeList": {
"maxItems": 20,
"description": "Authorに設定されているWorktypeIDのリスト最大20個",
"description": "アカウントに設定されているWorktypeIDのリスト最大20個",
"type": "array",
"items": {
"$ref": "#/components/schemas/OptionItemList"
@ -1484,16 +1499,16 @@
},
"isEncrypted": {
"type": "boolean",
"description": "音声ファイルを暗号化するかどうか"
"description": "ユーザーが音声ファイルを暗号化するかどうか"
},
"encryptionPassword": {
"type": "string",
"description": "Encryptionで暗号化を掛ける場合のパスワード",
"description": "ユーザーが暗号化を掛ける場合のパスワード",
"nullable": true
},
"activeWorktype": {
"type": "string",
"description": "デフォルトで利用するWorkTypeIDアカウントに紐づくWorkTypeIDから一つ指定"
"description": "アカウントがデフォルトで利用するWorkTypeIDアカウントに紐づくWorkTypeIDから一つ指定"
},
"audioFormat": {
"type": "string",
@ -1501,7 +1516,7 @@
},
"prompt": {
"type": "boolean",
"description": "デバイス上で、Option Itemを表示するかどうか"
"description": "デバイス上で自動的にWorkTypeの選択画面を表示するかどうかのユーザーごとの設定Authorでない場合はfalse"
}
},
"required": [
@ -1538,7 +1553,7 @@
"type": "string",
"description": "音声ファイルの録音作成日時(開始日時)yyyy-mm-ddThh:mm:ss.sss"
},
"completedDate": {
"finishedDate": {
"type": "string",
"description": "音声ファイルの録音作成終了日時yyyy-mm-ddThh:mm:ss.sss"
},
@ -1583,7 +1598,7 @@
"fileName",
"duration",
"createdDate",
"completedDate",
"finishedDate",
"uploadedDate",
"fileSize",
"priority",
@ -1609,7 +1624,8 @@
"type": "object",
"properties": {
"url": {
"type": "string"
"type": "string",
"description": "Blob StorageにアクセスするためのSASトークン入りのアクセスURL"
}
},
"required": ["url"]
@ -1618,7 +1634,8 @@
"type": "object",
"properties": {
"url": {
"type": "string"
"type": "string",
"description": "Blob StorageにアクセスするためのSASトークン入りのアクセスURL"
}
},
"required": ["url"]
@ -1632,16 +1649,6 @@
},
"required": ["url"]
},
"AudioNextResponse": {
"type": "object",
"properties": {
"nextFileId": {
"type": "number",
"description": "ODMS Cloud上の次の音声ファイルID存在しなければ空文字"
}
},
"required": ["nextFileId"]
},
"Typist": {
"type": "object",
"properties": {
@ -1686,7 +1693,7 @@
},
"url": {
"type": "string",
"description": "アップロード先Blob Storage(ファイル名含む)"
"description": "音声ファイルのBlob Storage上での保存場所(ファイル名含む)のURL"
},
"fileName": {
"type": "string",
@ -1747,8 +1754,8 @@
}
},
"status": {
"type": "number",
"description": "音声ファイルのファイルステータス 1:Uploaded(Cancel) / 2:Pending / 3:InProgress / 4:Finished / 5:Backup"
"type": "string",
"description": "音声ファイルのファイルステータス Uploaded / Pending / InProgress / Finished / Backup"
},
"transcriptionStartedDate": {
"type": "string",
@ -1786,13 +1793,13 @@
"TasksResponse": {
"type": "object",
"properties": {
"pageNumber": {
"limit": {
"type": "number",
"description": "ページ番号(ページサイズごとに区切った何ページ目か。 ページ番号が存在しない場合は末尾のページ"
"description": "タスクの取得件数(指定しない場合はデフォルト値"
},
"pageSize": {
"offset": {
"type": "number",
"description": "ページサイズ(一度に何件のタスクを取得するか"
"description": "オフセット(何件目から取得するか 設定しない場合はデフォルト値"
},
"total": {
"type": "number",
@ -1806,7 +1813,16 @@
}
}
},
"required": ["pageNumber", "pageSize", "total", "tasks"]
"required": ["limit", "offset", "total", "tasks"]
},
"AudioNextResponse": {
"type": "object",
"properties": {
"nextFileId": {
"type": "number",
"description": "ODMS Cloud上の次の音声ファイルID存在しなければundefind"
}
}
},
"ChangeStatusResponse": {
"type": "object",

View File

@ -42,7 +42,11 @@ export class AuthController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'token' })
@ApiOperation({
description:
'AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します',
operationId: 'token',
})
async token(@Body() body: TokenRequest): Promise<TokenResponse> {
console.log(body);
const idToken = await this.authService.getVerifiedIdToken(body.idToken);
@ -86,7 +90,10 @@ export class AuthController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'accessToken' })
@ApiOperation({
operationId: 'accessToken',
description: 'リフレッシュトークンを元にアクセストークンを再生成します',
})
async accessToken(@Headers() headers): Promise<AccessTokenResponse> {
console.log(headers['authorization']);
const header = headers['authorization'];

View File

@ -18,8 +18,6 @@ import { FilesService } from './files.service';
import {
AudioDownloadLocationRequest,
AudioDownloadLocationResponse,
AudioNextRequest,
AudioNextResponse,
AudioUploadFinishedRequest,
AudioUploadFinishedResponse,
AudioUploadLocationRequest,
@ -48,7 +46,11 @@ export class FilesController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'createTask' })
@ApiOperation({
operationId: 'uploadFinished',
description:
'アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します',
})
@Post('audio/upload-finished')
async uploadFinished(
@Body() body: AudioUploadFinishedRequest,
@ -73,7 +75,11 @@ export class FilesController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'uploadLocation' })
@ApiOperation({
operationId: 'uploadLocation',
description:
'ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します',
})
@ApiBearerAuth()
async uploadLocation(
@Headers() headers,
@ -102,7 +108,11 @@ export class FilesController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'downloadLocation' })
@ApiOperation({
operationId: 'downloadLocation',
description:
'指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します',
})
@ApiBearerAuth()
async downloadLocation(
@Headers() headers,
@ -132,7 +142,11 @@ export class FilesController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'downloadTemplateLocation' })
@ApiOperation({
operationId: 'downloadTemplateLocation',
description:
'指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します',
})
@ApiBearerAuth()
async downloadTemplateLocation(
@Headers() headers,
@ -144,32 +158,4 @@ export class FilesController {
return { url: '' };
}
@Get('audio/next')
@ApiResponse({
status: HttpStatus.OK,
type: AudioNextResponse,
description: '成功時のレスポンス',
})
@ApiResponse({
status: HttpStatus.UNAUTHORIZED,
description: '認証エラー',
type: ErrorResponse,
})
@ApiResponse({
status: HttpStatus.INTERNAL_SERVER_ERROR,
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'getNextAudioFile' })
@ApiBearerAuth()
async getNextAudioFile(
@Headers() headers,
@Query() body: AudioNextRequest,
): Promise<AudioNextResponse> {
const { endedFileId } = body;
console.log(endedFileId);
return { nextFileId: 1234 };
}
}

View File

@ -1,31 +1,23 @@
import { ApiProperty } from '@nestjs/swagger';
export class AudioNextRequest {
@ApiProperty({ description: '文字起こし完了したタスクの音声ファイルID' })
endedFileId: number;
}
export class AudioNextResponse {
@ApiProperty({
description: 'ODMS Cloud上の次の音声ファイルID存在しなければ空文字',
})
nextFileId: number;
}
export class AudioUploadLocationRequest {}
export class AudioUploadLocationResponse {
@ApiProperty()
@ApiProperty({
description: 'Blob StorageにアクセスするためのSASトークン入りのアクセスURL',
})
url: string;
}
export class AudioDownloadLocationRequest {
@ApiProperty({ description: '音声ファイル情報をDBから取得するためのID' })
@ApiProperty({ description: 'ODMSCloud上で管理する音声ファイルのID' })
audioFileId: number;
}
export class AudioDownloadLocationResponse {
@ApiProperty()
@ApiProperty({
description: 'Blob StorageにアクセスするためのSASトークン入りのアクセスURL',
})
url: string;
}
@ -58,7 +50,7 @@ export class AudioUploadFinishedRequest {
@ApiProperty({
description: '音声ファイルの録音作成終了日時yyyy-mm-ddThh:mm:ss.sss',
})
completedDate: string;
finishedDate: string;
@ApiProperty({
description: '音声ファイルのアップロード日時yyyy-mm-ddThh:mm:ss.sss',
})

View File

@ -16,6 +16,8 @@ import {
import { ErrorResponse } from '../../common/error/types/types';
import { TasksService } from './tasks.service';
import {
AudioNextRequest,
AudioNextResponse,
ChangeStatusRequest,
ChangeStatusResponse,
TasksRequest,
@ -42,7 +44,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'getTasks' })
@ApiOperation({
operationId: 'getTasks',
description:
'音声ファイル・文字起こしタスク情報をページ指定して取得します。',
})
@ApiBearerAuth()
@Get()
async getTasks(
@ -52,13 +58,45 @@ export class TasksController {
console.log(headers);
console.log(body);
return {
pageNumber: 1,
pageSize: 1,
limit: 200,
offset: 0,
total: 0,
tasks: [],
};
}
@Get('next')
@ApiResponse({
status: HttpStatus.OK,
type: AudioNextResponse,
description: '成功時のレスポンス',
})
@ApiResponse({
status: HttpStatus.UNAUTHORIZED,
description: '認証エラー',
type: ErrorResponse,
})
@ApiResponse({
status: HttpStatus.INTERNAL_SERVER_ERROR,
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({
operationId: 'getNextAudioFile',
description:
'指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します',
})
@ApiBearerAuth()
async getNextAudioFile(
@Headers() headers,
@Query() body: AudioNextRequest,
): Promise<AudioNextResponse> {
const { endedFileId } = body;
console.log(endedFileId);
return { nextFileId: 1234 };
}
@Post(':audioFileId/checkout')
@ApiResponse({
status: HttpStatus.OK,
@ -80,7 +118,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'checkout' })
@ApiOperation({
operationId: 'checkout',
description:
'指定した文字起こしタスクをチェックアウトしますステータスをInprogressにします',
})
@ApiBearerAuth()
async checkout(
@Headers() headers,
@ -113,7 +155,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'checkin' })
@ApiOperation({
operationId: 'checkin',
description:
'指定した文字起こしタスクをチェックインしますステータスをFinishedにします',
})
@ApiBearerAuth()
async checkin(
@Headers() headers,
@ -146,7 +192,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'cancel' })
@ApiOperation({
operationId: 'cancel',
description:
'指定した文字起こしタスクをキャンセルしますステータスをUploadedにします',
})
@ApiBearerAuth()
async cancel(
@Headers() headers,
@ -179,7 +229,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'suspend' })
@ApiOperation({
operationId: 'suspend',
description:
'指定した文字起こしタスクを一時中断しますステータスをPendingにします',
})
@ApiBearerAuth()
async suspend(
@Headers() headers,
@ -212,7 +266,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'sendBack' })
@ApiOperation({
operationId: 'sendBack',
description:
'指定した文字起こしタスクを差し戻しますステータスをPendingにします',
})
@ApiBearerAuth()
async sendBack(
@Headers() headers,
@ -245,7 +303,11 @@ export class TasksController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'backup' })
@ApiOperation({
operationId: 'backup',
description:
'指定した文字起こしタスクをバックアップしますステータスをBackupにします',
})
@ApiBearerAuth()
async backup(
@Headers() headers,

View File

@ -2,16 +2,18 @@ import { ApiProperty } from '@nestjs/swagger';
export class TasksRequest {
@ApiProperty({
minimum: 1,
description:
'ページ番号(ページサイズごとに区切った何ページ目を取得するか',
required: false,
default: 200,
description: 'タスクの取得件数(指定しない場合はデフォルト値',
})
pageNumber: number;
limit: number;
@ApiProperty({
minimum: 1,
description: 'ページサイズ(一度に何件のタスクを取得するか)',
required: false,
default: 0,
description:
'オフセット(何件目から取得するか 設定しない場合はデフォルト値)',
})
pageSize: number;
offset: number;
}
export class Typist {
@ -40,7 +42,10 @@ export class Task {
optionItemLabel: string;
@ApiProperty({ minLength: 1, maxLength: 20 })
optionItemValue: string;
@ApiProperty({ description: 'アップロード先Blob Storage(ファイル名含む)' })
@ApiProperty({
description:
'音声ファイルのBlob Storage上での保存場所(ファイル名含む)のURL',
})
url: string;
@ApiProperty({ description: '音声ファイル名' })
fileName: string;
@ -85,9 +90,9 @@ export class Task {
assignees: Typist[];
@ApiProperty({
description:
'音声ファイルのファイルステータス 1:Uploaded(Cancel) / 2:Pending / 3:InProgress / 4:Finished / 5:Backup',
'音声ファイルのファイルステータス Uploaded / Pending / InProgress / Finished / Backup',
})
status: number;
status: string;
@ApiProperty({ description: '文字起こし開始日時yyyy-mm-ddThh:mm:ss.sss' })
transcriptionStartedDate: string;
@ApiProperty({ description: '文字起こし終了日時yyyy-mm-ddThh:mm:ss.sss' })
@ -96,14 +101,14 @@ export class Task {
export class TasksResponse {
@ApiProperty({
description:
'ページ番号(ページサイズごとに区切った何ページ目か。 ページ番号が存在しない場合は末尾のページ)',
description: 'タスクの取得件数(指定しない場合はデフォルト値)',
})
pageNumber: number;
limit: number;
@ApiProperty({
description: 'ページサイズ(一度に何件のタスクを取得するか)',
description:
'オフセット(何件目から取得するか 設定しない場合はデフォルト値)',
})
pageSize: number;
offset: number;
@ApiProperty({
description: 'タスクの総件数',
})
@ -115,6 +120,18 @@ export class TasksResponse {
})
tasks: Task[];
}
export class AudioNextRequest {
@ApiProperty({ description: '文字起こし完了したタスクの音声ファイルID' })
endedFileId: number;
}
export class AudioNextResponse {
@ApiProperty({
required: false,
description: 'ODMS Cloud上の次の音声ファイルID存在しなければundefind',
})
nextFileId?: number | undefined;
}
export class ChangeStatusRequest {
@ApiProperty({ description: 'ODMS Cloud上の音声ファイルID' })

View File

@ -96,31 +96,36 @@ export class OptionItemList {
optionItemList: OptionItem[];
}
export class GetUserInfoResponse {
@ApiProperty({ description: '自分自身(ログイン認証)したAuthorID' })
export class GetRelationsResponse {
@ApiProperty({
description: 'ログインしたユーザーのAuthorIDAuthorでない場合は空文字',
})
authorId: string;
@ApiProperty({ description: '属しているアカウントのAuthorID List(全て)' })
authorIdList: string[];
@ApiProperty({
type: [OptionItemList],
maxItems: 20,
description: 'Authorに設定されているWorktypeIDのリスト最大20個',
description: 'アカウントに設定されているWorktypeIDのリスト最大20個',
})
workTypeList: OptionItemList[];
@ApiProperty({ description: '音声ファイルを暗号化するかどうか' })
@ApiProperty({ description: 'ユーザーが音声ファイルを暗号化するかどうか' })
isEncrypted: boolean;
@ApiProperty({
description: 'Encryptionで暗号化を掛ける場合のパスワード',
description: 'ユーザーが暗号化を掛ける場合のパスワード',
nullable: true,
})
encryptionPassword?: string | undefined;
@ApiProperty({
description:
'デフォルトで利用するWorkTypeIDアカウントに紐づくWorkTypeIDから一つ指定',
'アカウントがデフォルトで利用するWorkTypeIDアカウントに紐づくWorkTypeIDから一つ指定',
})
activeWorktype: string;
@ApiProperty({ description: '録音形式: DSS/DS2(SP)/DS2(QP) DS2固定' })
audioFormat: string;
@ApiProperty({ description: 'デバイス上で、Option Itemを表示するかどうか' })
@ApiProperty({
description:
'デバイス上で自動的にWorkTypeの選択画面を表示するかどうかのユーザーごとの設定Authorでない場合はfalse',
})
prompt: boolean;
}

View File

@ -9,7 +9,7 @@ import { ErrorResponse } from '../../common/error/types/types';
import {
ConfirmRequest,
ConfirmResponse,
GetUserInfoResponse,
GetRelationsResponse,
GetUsersResponse,
SignupRequest,
SignupResponse,
@ -125,7 +125,7 @@ export class UsersController {
@ApiResponse({
status: HttpStatus.OK,
type: GetUserInfoResponse,
type: GetRelationsResponse,
description: '成功時のレスポンス',
})
@ApiResponse({
@ -138,10 +138,13 @@ export class UsersController {
description: '想定外のサーバーエラー',
type: ErrorResponse,
})
@ApiOperation({ operationId: 'getUserInfo' })
@ApiOperation({
operationId: 'getRelations',
description: 'ログインしているユーザーに関連する各種情報を取得します',
})
@ApiBearerAuth()
@Get('user-info')
async getUserInfo(@Req() req: Request): Promise<GetUserInfoResponse> {
@Get('relations')
async getRelations(@Req() req: Request): Promise<GetRelationsResponse> {
console.log(req.header('Authorization'));
return {
authorId: 'AUTHOR',