UNPKG

7.1 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3/**
4 * エラーハンドラー
5 * 外部サービスと連携している場合に、サービス(API)のエラーを本ドメインのエラーに変換する責任を担います。
6 */
7const http_status_1 = require("http-status");
8const factory_1 = require("./factory");
9/**
10 * COA仮予約エラーハンドリング
11 */
12function handleCOAReserveTemporarilyError(error) {
13 let handledError = error;
14 // if (error.message === '座席取得失敗') {
15 // }
16 // メッセージ「既に予約済みです」の場合は、座席の重複とみなす
17 if (error.message === '既に予約済みです') {
18 handledError = new factory_1.errors.AlreadyInUse('offer', ['seatNumber'], 'Seat not available');
19 }
20 // Chevreが500未満であればクライアントエラーとみなす
21 const reserveServiceHttpStatusCode = error.code;
22 if (Number.isInteger(reserveServiceHttpStatusCode)) {
23 if (reserveServiceHttpStatusCode < http_status_1.INTERNAL_SERVER_ERROR) {
24 handledError = new factory_1.errors.Argument('Event', error.message);
25 }
26 else {
27 handledError = new factory_1.errors.ServiceUnavailable('Reserve service temporarily unavailable');
28 }
29 }
30 return handledError;
31}
32exports.handleCOAReserveTemporarilyError = handleCOAReserveTemporarilyError;
33/**
34 * Chevreサービスエラーをハンドリングする
35 * 可能であればCinerinoエラーへ変換します
36 */
37function handleChevreError(error) {
38 let handledError = error;
39 if (error.name === 'ChevreRequestError') {
40 // Chevre APIのステータスコード4xxをハンドリング
41 // ChevreAPIのレスポンスステータスコードが4xxであればクライアントエラー
42 const message = `${error.name}:${error.message}`;
43 switch (error.code) {
44 case http_status_1.BAD_REQUEST: // 400
45 handledError = new factory_1.errors.Argument('ChevreArgument', message);
46 break;
47 case http_status_1.UNAUTHORIZED: // 401
48 handledError = new factory_1.errors.Unauthorized(message);
49 break;
50 case http_status_1.FORBIDDEN: // 403
51 handledError = new factory_1.errors.Forbidden(message);
52 break;
53 case http_status_1.NOT_FOUND: // 404
54 handledError = new factory_1.errors.NotFound(message);
55 break;
56 case http_status_1.TOO_MANY_REQUESTS: // 429
57 handledError = new factory_1.errors.RateLimitExceeded(message);
58 break;
59 default:
60 handledError = new factory_1.errors.ServiceUnavailable(message);
61 }
62 }
63 return handledError;
64}
65exports.handleChevreError = handleChevreError;
66/**
67 * Pecorinoサービスエラーをハンドリングする
68 * 可能であればCinerinoエラーへ変換します
69 */
70function handlePecorinoError(error) {
71 let handledError = error;
72 if (error.name === 'PecorinoRequestError') {
73 // Pecorino APIのステータスコード4xxをハンドリング
74 // PecorinoAPIのレスポンスステータスコードが4xxであればクライアントエラー
75 const message = `${error.name}:${error.message}`;
76 switch (error.code) {
77 case http_status_1.BAD_REQUEST: // 400
78 handledError = new factory_1.errors.Argument('PecorinoArgument', message);
79 break;
80 case http_status_1.UNAUTHORIZED: // 401
81 handledError = new factory_1.errors.Unauthorized(message);
82 break;
83 case http_status_1.FORBIDDEN: // 403
84 handledError = new factory_1.errors.Forbidden(message);
85 break;
86 case http_status_1.NOT_FOUND: // 404
87 handledError = new factory_1.errors.NotFound(message);
88 break;
89 case http_status_1.TOO_MANY_REQUESTS: // 429
90 handledError = new factory_1.errors.RateLimitExceeded(message);
91 break;
92 default:
93 handledError = new factory_1.errors.ServiceUnavailable(message);
94 }
95 }
96 return handledError;
97}
98exports.handlePecorinoError = handlePecorinoError;
99/**
100 * ムビチケ着券サービスエラーをハンドリングする
101 * 可能であればCinerinoエラーへ変換します
102 */
103function handleMvtkReserveError(error) {
104 let handledError = error;
105 if (error.name === 'MovieticketReserveRequestError') {
106 // ムビチケAPIのステータスコード4xxをハンドリング
107 // ムビチケAPIのレスポンスステータスコードが4xxであればクライアントエラー
108 const message = `${error.name}:${error.message}`;
109 switch (error.code) {
110 case http_status_1.BAD_REQUEST: // 400
111 handledError = new factory_1.errors.Argument('MovieticketReserveArgument', message);
112 break;
113 case http_status_1.UNAUTHORIZED: // 401
114 handledError = new factory_1.errors.Unauthorized(message);
115 break;
116 case http_status_1.FORBIDDEN: // 403
117 handledError = new factory_1.errors.Forbidden(message);
118 break;
119 case http_status_1.NOT_FOUND: // 404
120 handledError = new factory_1.errors.NotFound(message);
121 break;
122 case http_status_1.TOO_MANY_REQUESTS: // 429
123 handledError = new factory_1.errors.RateLimitExceeded(message);
124 break;
125 default:
126 handledError = new factory_1.errors.ServiceUnavailable(message);
127 }
128 }
129 return handledError;
130}
131exports.handleMvtkReserveError = handleMvtkReserveError;
132/**
133 * AWSエラーハンドリング
134 */
135function handleAWSError(error) {
136 let handledError = error;
137 const message = `${error.name}:${error.message}`;
138 switch (error.name) {
139 case 'InternalErrorException':
140 handledError = new factory_1.errors.ServiceUnavailable(message);
141 break;
142 case 'MissingRequiredParameter':
143 handledError = new factory_1.errors.ArgumentNull('AWSArgument', message);
144 break;
145 case 'InvalidParameterException':
146 handledError = new factory_1.errors.Argument('AWSArgument', message);
147 break;
148 case 'NotAuthorizedException':
149 handledError = new factory_1.errors.Forbidden(message);
150 break;
151 case 'TooManyRequestsException':
152 handledError = new factory_1.errors.RateLimitExceeded(message);
153 break;
154 case 'ResourceNotFoundException':
155 handledError = new factory_1.errors.NotFound('Resource', message);
156 break;
157 case 'UserNotFoundException':
158 handledError = new factory_1.errors.NotFound('User', message);
159 break;
160 default:
161 }
162 return handledError;
163}
164exports.handleAWSError = handleAWSError;