dn-react-router-toolkit 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/create_api_handler.d.mts +2 -2
- package/dist/api/create_api_handler.d.ts +2 -2
- package/dist/api/create_api_handler.js +55 -52
- package/dist/api/create_api_handler.mjs +61 -59
- package/dist/api/create_handler.d.mts +5 -5
- package/dist/api/create_handler.d.ts +5 -5
- package/dist/api/create_handler.js +41 -44
- package/dist/api/create_handler.mjs +41 -44
- package/dist/api/index.d.mts +4 -3
- package/dist/api/index.d.ts +4 -3
- package/dist/api/index.js +118 -102
- package/dist/api/index.mjs +130 -109
- package/dist/api/item_api_handler.d.mts +4 -3
- package/dist/api/item_api_handler.d.ts +4 -3
- package/dist/api/item_api_handler.js +22 -6
- package/dist/api/item_api_handler.mjs +28 -6
- package/dist/auth/cookie_manager.d.mts +1 -1
- package/dist/auth/cookie_manager.d.ts +1 -1
- package/dist/auth/index.d.mts +2 -2
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/index.js +18 -18
- package/dist/auth/index.mjs +18 -18
- package/dist/auth/with_auth.d.mts +2 -2
- package/dist/auth/with_auth.d.ts +2 -2
- package/dist/auth/with_auth.js +18 -18
- package/dist/auth/with_auth.mjs +18 -18
- package/dist/client/editor.d.mts +2 -2
- package/dist/client/editor.d.ts +2 -2
- package/dist/client/editor.js +9 -3
- package/dist/client/editor.mjs +9 -3
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +9 -3
- package/dist/client/index.mjs +9 -3
- package/dist/crud/crud_form.js +22 -4
- package/dist/crud/crud_form.mjs +11 -3
- package/dist/crud/crud_form_provider.js +16 -3
- package/dist/crud/crud_form_provider.mjs +14 -1
- package/dist/crud/index.js +22 -4
- package/dist/crud/index.mjs +11 -3
- package/dist/db/backup/index.d.mts +1 -1
- package/dist/db/backup/index.d.ts +1 -1
- package/dist/form/create_form_component.js +21 -2
- package/dist/form/create_form_component.mjs +10 -1
- package/dist/form/form_components.js +21 -2
- package/dist/form/form_components.mjs +10 -1
- package/dist/form/index.js +21 -2
- package/dist/form/index.mjs +10 -1
- package/dist/post/editor_toolbar.js +20 -3
- package/dist/post/editor_toolbar.mjs +9 -2
- package/dist/post/index.js +31 -11
- package/dist/post/index.mjs +19 -9
- package/dist/post/post_form_page.js +29 -11
- package/dist/post/post_form_page.mjs +17 -9
- package/dist/post/thumbnail_picker.js +21 -2
- package/dist/post/thumbnail_picker.mjs +10 -1
- package/dist/table/buttons.js +11 -14
- package/dist/table/buttons.mjs +10 -13
- package/dist/table/index.js +14 -18
- package/dist/table/index.mjs +13 -17
- package/dist/table/table.js +10 -4
- package/dist/table/table.mjs +5 -1
- package/dist/table/table_form.js +12 -18
- package/dist/table/table_form.mjs +9 -15
- package/dist/utils/cn.d.mts +3 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.js +32 -0
- package/dist/utils/cn.mjs +7 -0
- package/dist/utils/date.d.mts +5 -0
- package/dist/utils/date.d.ts +5 -0
- package/dist/utils/date.js +65 -0
- package/dist/utils/date.mjs +29 -0
- package/dist/utils/index.d.mts +7 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.js +116 -0
- package/dist/utils/index.mjs +73 -0
- package/dist/utils/korean.d.mts +6 -0
- package/dist/utils/korean.d.ts +6 -0
- package/dist/utils/korean.js +41 -0
- package/dist/utils/korean.mjs +16 -0
- package/dist/utils/singleton.d.mts +3 -0
- package/dist/utils/singleton.d.ts +3 -0
- package/dist/utils/singleton.js +37 -0
- package/dist/utils/singleton.mjs +12 -0
- package/dist/utils/sleep.d.mts +3 -0
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.js +32 -0
- package/dist/utils/sleep.mjs +7 -0
- package/dist/utils/slug.d.mts +3 -0
- package/dist/utils/slug.d.ts +3 -0
- package/dist/utils/slug.js +32 -0
- package/dist/utils/slug.mjs +7 -0
- package/package.json +6 -2
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// src/api/create_handler.ts
|
|
2
|
-
import { NOT_FOUND } from "dn-react-toolkit/http";
|
|
3
2
|
import {
|
|
4
3
|
findAuthHandler,
|
|
5
4
|
loginHandler,
|
|
@@ -11,7 +10,7 @@ import {
|
|
|
11
10
|
signupHandler,
|
|
12
11
|
signUpWithThirdpartyHandler,
|
|
13
12
|
thirdpartyAuthCallbackHandler
|
|
14
|
-
} from "
|
|
13
|
+
} from "gw-auth/server";
|
|
15
14
|
|
|
16
15
|
// src/auth/with_auth.ts
|
|
17
16
|
var toResponse = (result) => {
|
|
@@ -37,31 +36,31 @@ function createWithStrictAuthHandler({ authService }) {
|
|
|
37
36
|
arg.request
|
|
38
37
|
);
|
|
39
38
|
if (accessToken) {
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
|
|
39
|
+
const verifyResult = await authService.accessTokenManager.verify(accessToken);
|
|
40
|
+
if (verifyResult.isOk) {
|
|
41
|
+
const payload = verifyResult.value;
|
|
42
|
+
if (payload) {
|
|
43
|
+
return respond(payload);
|
|
44
|
+
}
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
const refreshToken = await authService.getRefreshTokenFromCookies(
|
|
46
48
|
arg.request
|
|
47
49
|
);
|
|
48
50
|
if (refreshToken) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
headers.append("Set-Cookie", setCookieHeader);
|
|
56
|
-
const payload = authService.accessTokenManager.decode(newAccessToken);
|
|
57
|
-
return respond(payload, headers);
|
|
58
|
-
} catch (e) {
|
|
59
|
-
console.log(e);
|
|
60
|
-
const setCookieHeader = await authService.getRefreshTokenSetCookie(void 0);
|
|
61
|
-
const headers = new Headers();
|
|
62
|
-
headers.append("Set-Cookie", setCookieHeader);
|
|
63
|
-
return respond(void 0, headers);
|
|
51
|
+
const refreshResult = await authService.refreshAccessToken(refreshToken);
|
|
52
|
+
if (refreshResult.isErr) {
|
|
53
|
+
const setCookieHeader2 = await authService.getRefreshTokenSetCookie(void 0);
|
|
54
|
+
const headers2 = new Headers();
|
|
55
|
+
headers2.append("Set-Cookie", setCookieHeader2);
|
|
56
|
+
return respond(void 0, headers2);
|
|
64
57
|
}
|
|
58
|
+
const newAccessToken = refreshResult.value;
|
|
59
|
+
const setCookieHeader = await authService.getAccessTokenSetCookie(newAccessToken);
|
|
60
|
+
const headers = new Headers();
|
|
61
|
+
headers.append("Set-Cookie", setCookieHeader);
|
|
62
|
+
const payload = authService.accessTokenManager.decode(newAccessToken);
|
|
63
|
+
return respond(payload, headers);
|
|
65
64
|
}
|
|
66
65
|
return respond(void 0);
|
|
67
66
|
};
|
|
@@ -76,12 +75,13 @@ import { createCookie } from "react-router";
|
|
|
76
75
|
import {
|
|
77
76
|
deleteFileHandler,
|
|
78
77
|
uploadFileHandler
|
|
79
|
-
} from "
|
|
78
|
+
} from "gw-file/server";
|
|
79
|
+
import { httpNotFound } from "gw-response";
|
|
80
80
|
var createAPIHandler = ({
|
|
81
81
|
authService,
|
|
82
82
|
fileService,
|
|
83
83
|
passwordRecoveryService,
|
|
84
|
-
|
|
84
|
+
authProviders,
|
|
85
85
|
signupTokenManager
|
|
86
86
|
}) => {
|
|
87
87
|
const handler = async (args) => {
|
|
@@ -96,7 +96,7 @@ var createAPIHandler = ({
|
|
|
96
96
|
switch (method) {
|
|
97
97
|
case "GET": {
|
|
98
98
|
return withAuth(
|
|
99
|
-
(auth) => ({ request: request2 }) => findAuthHandler(auth)(
|
|
99
|
+
(auth) => ({ request: request2 }) => findAuthHandler(auth)()
|
|
100
100
|
);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -116,13 +116,10 @@ var createAPIHandler = ({
|
|
|
116
116
|
const provider = slug[2];
|
|
117
117
|
switch (method) {
|
|
118
118
|
case "POST": {
|
|
119
|
-
return loginWithThirdPartyHandler(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
getThirdPartyAuth
|
|
124
|
-
}
|
|
125
|
-
);
|
|
119
|
+
return loginWithThirdPartyHandler(request, {
|
|
120
|
+
provider,
|
|
121
|
+
authProviders
|
|
122
|
+
});
|
|
126
123
|
}
|
|
127
124
|
}
|
|
128
125
|
}
|
|
@@ -161,14 +158,11 @@ var createAPIHandler = ({
|
|
|
161
158
|
default: {
|
|
162
159
|
switch (method) {
|
|
163
160
|
case "POST": {
|
|
164
|
-
return signUpWithThirdpartyHandler(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
signupTokenManager
|
|
170
|
-
}
|
|
171
|
-
);
|
|
161
|
+
return signUpWithThirdpartyHandler(request, {
|
|
162
|
+
authService,
|
|
163
|
+
fileService,
|
|
164
|
+
signupTokenManager
|
|
165
|
+
});
|
|
172
166
|
}
|
|
173
167
|
}
|
|
174
168
|
}
|
|
@@ -181,7 +175,7 @@ var createAPIHandler = ({
|
|
|
181
175
|
return thirdpartyAuthCallbackHandler(request, {
|
|
182
176
|
provider,
|
|
183
177
|
authService,
|
|
184
|
-
|
|
178
|
+
authProviders
|
|
185
179
|
});
|
|
186
180
|
}
|
|
187
181
|
}
|
|
@@ -204,9 +198,9 @@ var createAPIHandler = ({
|
|
|
204
198
|
switch (method) {
|
|
205
199
|
case "POST": {
|
|
206
200
|
return withAuth(
|
|
207
|
-
(auth) => ({ request: request2 }) => uploadFileHandler({ fileService })(
|
|
208
|
-
auth
|
|
209
|
-
)
|
|
201
|
+
(auth) => ({ request: request2 }) => uploadFileHandler({ fileService })(request2, {
|
|
202
|
+
userId: auth?.userId
|
|
203
|
+
})
|
|
210
204
|
)(args);
|
|
211
205
|
}
|
|
212
206
|
}
|
|
@@ -218,7 +212,7 @@ var createAPIHandler = ({
|
|
|
218
212
|
return withAuth(
|
|
219
213
|
(auth) => () => deleteFileHandler({
|
|
220
214
|
fileRepository: fileService.fileRepository
|
|
221
|
-
})({ fileId })(
|
|
215
|
+
})({ fileId, userId: auth?.userId })()
|
|
222
216
|
);
|
|
223
217
|
}
|
|
224
218
|
}
|
|
@@ -226,7 +220,10 @@ var createAPIHandler = ({
|
|
|
226
220
|
}
|
|
227
221
|
}
|
|
228
222
|
default: {
|
|
229
|
-
return
|
|
223
|
+
return httpNotFound({
|
|
224
|
+
code: "RESOURCE_NOT_FOUND",
|
|
225
|
+
message: "\uB9AC\uC18C\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
226
|
+
});
|
|
230
227
|
}
|
|
231
228
|
}
|
|
232
229
|
};
|
package/dist/api/index.d.mts
CHANGED
|
@@ -2,11 +2,12 @@ export { createAPIHandler } from './create_handler.mjs';
|
|
|
2
2
|
export { APIHandlerOptions, apiHandler } from './create_api_handler.mjs';
|
|
3
3
|
export { ItemAPIHandlerOptions, itemApiHandler } from './item_api_handler.mjs';
|
|
4
4
|
import 'react-router';
|
|
5
|
-
import '
|
|
6
|
-
import '
|
|
5
|
+
import 'gw-auth/server';
|
|
6
|
+
import 'gw-file/server';
|
|
7
7
|
import 'drizzle-orm';
|
|
8
8
|
import '../table/repository.mjs';
|
|
9
9
|
import 'drizzle-orm/node-postgres';
|
|
10
10
|
import 'drizzle-orm/pg-core';
|
|
11
11
|
import '../auth/with_auth.mjs';
|
|
12
|
-
import '
|
|
12
|
+
import 'gw-auth';
|
|
13
|
+
import 'gw-result';
|
package/dist/api/index.d.ts
CHANGED
|
@@ -2,11 +2,12 @@ export { createAPIHandler } from './create_handler.js';
|
|
|
2
2
|
export { APIHandlerOptions, apiHandler } from './create_api_handler.js';
|
|
3
3
|
export { ItemAPIHandlerOptions, itemApiHandler } from './item_api_handler.js';
|
|
4
4
|
import 'react-router';
|
|
5
|
-
import '
|
|
6
|
-
import '
|
|
5
|
+
import 'gw-auth/server';
|
|
6
|
+
import 'gw-file/server';
|
|
7
7
|
import 'drizzle-orm';
|
|
8
8
|
import '../table/repository.js';
|
|
9
9
|
import 'drizzle-orm/node-postgres';
|
|
10
10
|
import 'drizzle-orm/pg-core';
|
|
11
11
|
import '../auth/with_auth.js';
|
|
12
|
-
import '
|
|
12
|
+
import 'gw-auth';
|
|
13
|
+
import 'gw-result';
|
package/dist/api/index.js
CHANGED
|
@@ -27,8 +27,7 @@ __export(api_exports, {
|
|
|
27
27
|
module.exports = __toCommonJS(api_exports);
|
|
28
28
|
|
|
29
29
|
// src/api/create_handler.ts
|
|
30
|
-
var
|
|
31
|
-
var import_server = require("dn-react-toolkit/auth/server");
|
|
30
|
+
var import_server = require("gw-auth/server");
|
|
32
31
|
|
|
33
32
|
// src/auth/with_auth.ts
|
|
34
33
|
var toResponse = (result) => {
|
|
@@ -54,31 +53,31 @@ function createWithStrictAuthHandler({ authService }) {
|
|
|
54
53
|
arg.request
|
|
55
54
|
);
|
|
56
55
|
if (accessToken) {
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
-
|
|
56
|
+
const verifyResult = await authService.accessTokenManager.verify(accessToken);
|
|
57
|
+
if (verifyResult.isOk) {
|
|
58
|
+
const payload = verifyResult.value;
|
|
59
|
+
if (payload) {
|
|
60
|
+
return respond(payload);
|
|
61
|
+
}
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
const refreshToken = await authService.getRefreshTokenFromCookies(
|
|
63
65
|
arg.request
|
|
64
66
|
);
|
|
65
67
|
if (refreshToken) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
headers.append("Set-Cookie", setCookieHeader);
|
|
73
|
-
const payload = authService.accessTokenManager.decode(newAccessToken);
|
|
74
|
-
return respond(payload, headers);
|
|
75
|
-
} catch (e) {
|
|
76
|
-
console.log(e);
|
|
77
|
-
const setCookieHeader = await authService.getRefreshTokenSetCookie(void 0);
|
|
78
|
-
const headers = new Headers();
|
|
79
|
-
headers.append("Set-Cookie", setCookieHeader);
|
|
80
|
-
return respond(void 0, headers);
|
|
68
|
+
const refreshResult = await authService.refreshAccessToken(refreshToken);
|
|
69
|
+
if (refreshResult.isErr) {
|
|
70
|
+
const setCookieHeader2 = await authService.getRefreshTokenSetCookie(void 0);
|
|
71
|
+
const headers2 = new Headers();
|
|
72
|
+
headers2.append("Set-Cookie", setCookieHeader2);
|
|
73
|
+
return respond(void 0, headers2);
|
|
81
74
|
}
|
|
75
|
+
const newAccessToken = refreshResult.value;
|
|
76
|
+
const setCookieHeader = await authService.getAccessTokenSetCookie(newAccessToken);
|
|
77
|
+
const headers = new Headers();
|
|
78
|
+
headers.append("Set-Cookie", setCookieHeader);
|
|
79
|
+
const payload = authService.accessTokenManager.decode(newAccessToken);
|
|
80
|
+
return respond(payload, headers);
|
|
82
81
|
}
|
|
83
82
|
return respond(void 0);
|
|
84
83
|
};
|
|
@@ -90,12 +89,13 @@ function createWithStrictAuthHandler({ authService }) {
|
|
|
90
89
|
var import_react_router = require("react-router");
|
|
91
90
|
|
|
92
91
|
// src/api/create_handler.ts
|
|
93
|
-
var import_server2 = require("
|
|
92
|
+
var import_server2 = require("gw-file/server");
|
|
93
|
+
var import_gw_response = require("gw-response");
|
|
94
94
|
var createAPIHandler = ({
|
|
95
95
|
authService,
|
|
96
96
|
fileService,
|
|
97
97
|
passwordRecoveryService,
|
|
98
|
-
|
|
98
|
+
authProviders,
|
|
99
99
|
signupTokenManager
|
|
100
100
|
}) => {
|
|
101
101
|
const handler = async (args) => {
|
|
@@ -110,7 +110,7 @@ var createAPIHandler = ({
|
|
|
110
110
|
switch (method) {
|
|
111
111
|
case "GET": {
|
|
112
112
|
return withAuth(
|
|
113
|
-
(auth) => ({ request: request2 }) => (0, import_server.findAuthHandler)(auth)(
|
|
113
|
+
(auth) => ({ request: request2 }) => (0, import_server.findAuthHandler)(auth)()
|
|
114
114
|
);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -130,13 +130,10 @@ var createAPIHandler = ({
|
|
|
130
130
|
const provider = slug[2];
|
|
131
131
|
switch (method) {
|
|
132
132
|
case "POST": {
|
|
133
|
-
return (0, import_server.loginWithThirdPartyHandler)(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
getThirdPartyAuth
|
|
138
|
-
}
|
|
139
|
-
);
|
|
133
|
+
return (0, import_server.loginWithThirdPartyHandler)(request, {
|
|
134
|
+
provider,
|
|
135
|
+
authProviders
|
|
136
|
+
});
|
|
140
137
|
}
|
|
141
138
|
}
|
|
142
139
|
}
|
|
@@ -175,14 +172,11 @@ var createAPIHandler = ({
|
|
|
175
172
|
default: {
|
|
176
173
|
switch (method) {
|
|
177
174
|
case "POST": {
|
|
178
|
-
return (0, import_server.signUpWithThirdpartyHandler)(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
signupTokenManager
|
|
184
|
-
}
|
|
185
|
-
);
|
|
175
|
+
return (0, import_server.signUpWithThirdpartyHandler)(request, {
|
|
176
|
+
authService,
|
|
177
|
+
fileService,
|
|
178
|
+
signupTokenManager
|
|
179
|
+
});
|
|
186
180
|
}
|
|
187
181
|
}
|
|
188
182
|
}
|
|
@@ -195,7 +189,7 @@ var createAPIHandler = ({
|
|
|
195
189
|
return (0, import_server.thirdpartyAuthCallbackHandler)(request, {
|
|
196
190
|
provider,
|
|
197
191
|
authService,
|
|
198
|
-
|
|
192
|
+
authProviders
|
|
199
193
|
});
|
|
200
194
|
}
|
|
201
195
|
}
|
|
@@ -218,9 +212,9 @@ var createAPIHandler = ({
|
|
|
218
212
|
switch (method) {
|
|
219
213
|
case "POST": {
|
|
220
214
|
return withAuth(
|
|
221
|
-
(auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(
|
|
222
|
-
auth
|
|
223
|
-
)
|
|
215
|
+
(auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(request2, {
|
|
216
|
+
userId: auth?.userId
|
|
217
|
+
})
|
|
224
218
|
)(args);
|
|
225
219
|
}
|
|
226
220
|
}
|
|
@@ -232,7 +226,7 @@ var createAPIHandler = ({
|
|
|
232
226
|
return withAuth(
|
|
233
227
|
(auth) => () => (0, import_server2.deleteFileHandler)({
|
|
234
228
|
fileRepository: fileService.fileRepository
|
|
235
|
-
})({ fileId })(
|
|
229
|
+
})({ fileId, userId: auth?.userId })()
|
|
236
230
|
);
|
|
237
231
|
}
|
|
238
232
|
}
|
|
@@ -240,7 +234,10 @@ var createAPIHandler = ({
|
|
|
240
234
|
}
|
|
241
235
|
}
|
|
242
236
|
default: {
|
|
243
|
-
return (0,
|
|
237
|
+
return (0, import_gw_response.httpNotFound)({
|
|
238
|
+
code: "RESOURCE_NOT_FOUND",
|
|
239
|
+
message: "\uB9AC\uC18C\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
240
|
+
});
|
|
244
241
|
}
|
|
245
242
|
}
|
|
246
243
|
};
|
|
@@ -248,7 +245,6 @@ var createAPIHandler = ({
|
|
|
248
245
|
};
|
|
249
246
|
|
|
250
247
|
// src/api/create_api_handler.ts
|
|
251
|
-
var import_http2 = require("dn-react-toolkit/http");
|
|
252
248
|
var import_drizzle_orm = require("drizzle-orm");
|
|
253
249
|
var import_uuid = require("uuid");
|
|
254
250
|
|
|
@@ -290,6 +286,7 @@ function deserialize(data) {
|
|
|
290
286
|
}
|
|
291
287
|
|
|
292
288
|
// src/api/create_api_handler.ts
|
|
289
|
+
var import_gw_response2 = require("gw-response");
|
|
293
290
|
function apiHandler({
|
|
294
291
|
withAuthAction,
|
|
295
292
|
repository,
|
|
@@ -303,70 +300,73 @@ function apiHandler({
|
|
|
303
300
|
};
|
|
304
301
|
const action = withAuthAction((auth) => async ({ request }) => {
|
|
305
302
|
if (roles && roles.length > 0 && (!auth || !roles.includes(auth.role))) {
|
|
306
|
-
throw (0,
|
|
303
|
+
throw (0, import_gw_response2.httpUnauthorized)({
|
|
304
|
+
code: "UNAUTHORIZED",
|
|
305
|
+
message: "\uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."
|
|
306
|
+
});
|
|
307
307
|
}
|
|
308
308
|
switch (request.method) {
|
|
309
309
|
case "POST":
|
|
310
310
|
case "PUT": {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
311
|
+
const serilaizedParams = await request.json();
|
|
312
|
+
const params = deserialize(serilaizedParams);
|
|
313
|
+
if (validators) {
|
|
314
|
+
const paramsForValidation = Object.keys(validators).filter(
|
|
315
|
+
(key) => Object.prototype.hasOwnProperty.call(validators, key)
|
|
316
|
+
);
|
|
317
|
+
for (const paramKey of paramsForValidation) {
|
|
318
|
+
const value = params[paramKey];
|
|
319
|
+
const validator = validators[paramKey];
|
|
320
|
+
if (validator?.validate && !validator.validate(value)) {
|
|
321
|
+
throw (0, import_gw_response2.httpBadRequest)({
|
|
322
|
+
code: "BAD_REQUEST",
|
|
323
|
+
message: validator.message ? validator.message(value) : "\uC798\uBABB\uB41C \uC694\uCCAD\uC785\uB2C8\uB2E4."
|
|
324
|
+
});
|
|
326
325
|
}
|
|
327
326
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
327
|
+
}
|
|
328
|
+
const itemId = params.id || (0, import_uuid.v4)();
|
|
329
|
+
if (!params.id && existingConditions) {
|
|
330
|
+
const paramsForExistenceCheck = Object.keys(
|
|
331
|
+
existingConditions
|
|
332
|
+
).filter(
|
|
333
|
+
(key) => Object.prototype.hasOwnProperty.call(params, key)
|
|
334
|
+
);
|
|
335
|
+
if (paramsForExistenceCheck.length > 0) {
|
|
336
|
+
const where = (0, import_drizzle_orm.and)(
|
|
337
|
+
...paramsForExistenceCheck.reduce((acc, key) => {
|
|
338
|
+
const condition = existingConditions[key];
|
|
339
|
+
if (condition) {
|
|
340
|
+
acc.push(condition(params[key]));
|
|
341
|
+
}
|
|
342
|
+
return acc;
|
|
343
|
+
}, [])
|
|
334
344
|
);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}, [])
|
|
344
|
-
);
|
|
345
|
-
const existing = await repository.findAll({
|
|
346
|
-
limit: 1,
|
|
347
|
-
where
|
|
345
|
+
const existing = await repository.findAll({
|
|
346
|
+
limit: 1,
|
|
347
|
+
where
|
|
348
|
+
});
|
|
349
|
+
if (existing.length > 0) {
|
|
350
|
+
return (0, import_gw_response2.httpConflict)({
|
|
351
|
+
code: "CONFLICT",
|
|
352
|
+
message: "\uC790\uB8CC\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4."
|
|
348
353
|
});
|
|
349
|
-
if (existing.length > 0) {
|
|
350
|
-
throw (0, import_http2.CONFLICT)("\uC790\uB8CC\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.");
|
|
351
|
-
}
|
|
352
354
|
}
|
|
353
355
|
}
|
|
354
|
-
const values = {
|
|
355
|
-
id: itemId,
|
|
356
|
-
userId: injectUserId ? auth?.userId : void 0,
|
|
357
|
-
...params
|
|
358
|
-
};
|
|
359
|
-
const item = await repository.save(values);
|
|
360
|
-
return (0, import_http2.CREATED)(item);
|
|
361
|
-
} catch (error) {
|
|
362
|
-
if (error instanceof Error) {
|
|
363
|
-
throw (0, import_http2.INTERNAL_SERVER_ERROR)(error.message);
|
|
364
|
-
}
|
|
365
|
-
throw error;
|
|
366
356
|
}
|
|
357
|
+
const values = {
|
|
358
|
+
id: itemId,
|
|
359
|
+
userId: injectUserId ? auth?.userId : void 0,
|
|
360
|
+
...params
|
|
361
|
+
};
|
|
362
|
+
const item = await repository.save(values);
|
|
363
|
+
return (0, import_gw_response2.httpCreated)(item);
|
|
367
364
|
}
|
|
368
365
|
default:
|
|
369
|
-
throw (0,
|
|
366
|
+
throw (0, import_gw_response2.httpMethodNotAllowed)({
|
|
367
|
+
code: "METHOD_NOT_ALLOWED",
|
|
368
|
+
message: "\uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC740 \uBA54\uC11C\uB4DC\uC785\uB2C8\uB2E4."
|
|
369
|
+
});
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
372
|
return {
|
|
@@ -376,7 +376,8 @@ function apiHandler({
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
// src/api/item_api_handler.ts
|
|
379
|
-
var
|
|
379
|
+
var import_gw_response3 = require("gw-response");
|
|
380
|
+
var import_gw_result = require("gw-result");
|
|
380
381
|
function itemApiHandler({
|
|
381
382
|
withAuthAction,
|
|
382
383
|
repository,
|
|
@@ -384,24 +385,39 @@ function itemApiHandler({
|
|
|
384
385
|
roles
|
|
385
386
|
}) {
|
|
386
387
|
const loader = async ({ request }) => {
|
|
387
|
-
return {};
|
|
388
|
+
return (0, import_gw_result.ok)({});
|
|
388
389
|
};
|
|
389
390
|
const action = withAuthAction((auth) => async ({ params, request }) => {
|
|
390
391
|
if (roles && roles.length > 0 && (!auth || !roles.includes(auth.role))) {
|
|
391
|
-
|
|
392
|
+
return (0, import_gw_response3.httpUnauthorized)({
|
|
393
|
+
code: "UNAUTHORIZED",
|
|
394
|
+
message: "\uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4."
|
|
395
|
+
});
|
|
392
396
|
}
|
|
393
397
|
const itemId = params.itemId;
|
|
394
398
|
const existing = await repository.find(itemId);
|
|
395
399
|
if (!existing) {
|
|
396
|
-
|
|
400
|
+
return (0, import_gw_response3.httpNotFound)({
|
|
401
|
+
code: "RESOURCE_NOT_FOUND",
|
|
402
|
+
message: "\uC790\uB8CC\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
403
|
+
});
|
|
397
404
|
}
|
|
398
405
|
if (isOwnedBy && !isOwnedBy(existing, auth)) {
|
|
399
|
-
|
|
406
|
+
return (0, import_gw_response3.httpForbidden)({
|
|
407
|
+
code: "FORBIDDEN",
|
|
408
|
+
message: "\uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
409
|
+
});
|
|
400
410
|
}
|
|
401
411
|
switch (request.method) {
|
|
402
412
|
case "DELETE": {
|
|
403
413
|
await repository.delete(itemId);
|
|
404
|
-
return
|
|
414
|
+
return (0, import_gw_response3.httpNoContent)();
|
|
415
|
+
}
|
|
416
|
+
default: {
|
|
417
|
+
return (0, import_gw_response3.httpMethodNotAllowed)({
|
|
418
|
+
code: "METHOD_NOT_ALLOWED",
|
|
419
|
+
message: "\uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC740 \uBA54\uC11C\uB4DC\uC785\uB2C8\uB2E4."
|
|
420
|
+
});
|
|
405
421
|
}
|
|
406
422
|
}
|
|
407
423
|
});
|