UNPKG

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