dn-react-router-toolkit 0.9.0 → 0.9.2
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/default_api_handler.d.mts +13 -0
- package/dist/api/default_api_handler.d.ts +13 -0
- package/dist/api/{create_handler.js → default_api_handler.js} +49 -52
- package/dist/api/{create_handler.mjs → default_api_handler.mjs} +45 -48
- package/dist/api/index.d.mts +8 -7
- package/dist/api/index.d.ts +8 -7
- package/dist/api/index.js +233 -147
- package/dist/api/index.mjs +238 -151
- package/dist/api/put_resource_handler.d.mts +25 -0
- package/dist/api/put_resource_handler.d.ts +25 -0
- package/dist/api/put_resource_handler.js +214 -0
- package/dist/api/put_resource_handler.mjs +194 -0
- package/dist/api/resource_handler.d.mts +26 -0
- package/dist/api/resource_handler.d.ts +26 -0
- package/dist/api/resource_handler.js +280 -0
- package/dist/api/resource_handler.mjs +265 -0
- 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 +8 -4
- package/dist/api/create_api_handler.d.mts +0 -30
- package/dist/api/create_api_handler.d.ts +0 -30
- package/dist/api/create_api_handler.js +0 -155
- package/dist/api/create_api_handler.mjs +0 -139
- package/dist/api/create_handler.d.mts +0 -13
- package/dist/api/create_handler.d.ts +0 -13
- package/dist/api/item_api_handler.d.mts +0 -21
- package/dist/api/item_api_handler.d.ts +0 -21
- package/dist/api/item_api_handler.js +0 -63
- package/dist/api/item_api_handler.mjs +0 -38
package/dist/api/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,20 +17,27 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/api/index.ts
|
|
21
31
|
var api_exports = {};
|
|
22
32
|
__export(api_exports, {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
defaultAPIHandler: () => defaultAPIHandler,
|
|
34
|
+
putResourceHandler: () => putResourceHandler,
|
|
35
|
+
resourceHandler: () => resourceHandler
|
|
26
36
|
});
|
|
27
37
|
module.exports = __toCommonJS(api_exports);
|
|
28
38
|
|
|
29
|
-
// src/api/
|
|
30
|
-
var
|
|
31
|
-
var import_server = require("dn-react-toolkit/auth/server");
|
|
39
|
+
// src/api/default_api_handler.ts
|
|
40
|
+
var import_server = require("gw-auth/server");
|
|
32
41
|
|
|
33
42
|
// src/auth/with_auth.ts
|
|
34
43
|
var toResponse = (result) => {
|
|
@@ -54,31 +63,31 @@ function createWithStrictAuthHandler({ authService }) {
|
|
|
54
63
|
arg.request
|
|
55
64
|
);
|
|
56
65
|
if (accessToken) {
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
-
|
|
66
|
+
const verifyResult = await authService.accessTokenManager.verify(accessToken);
|
|
67
|
+
if (verifyResult.isOk) {
|
|
68
|
+
const payload = verifyResult.value;
|
|
69
|
+
if (payload) {
|
|
70
|
+
return respond(payload);
|
|
71
|
+
}
|
|
60
72
|
}
|
|
61
73
|
}
|
|
62
74
|
const refreshToken = await authService.getRefreshTokenFromCookies(
|
|
63
75
|
arg.request
|
|
64
76
|
);
|
|
65
77
|
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);
|
|
78
|
+
const refreshResult = await authService.refreshAccessToken(refreshToken);
|
|
79
|
+
if (refreshResult.isErr) {
|
|
80
|
+
const setCookieHeader2 = await authService.getRefreshTokenSetCookie(void 0);
|
|
81
|
+
const headers2 = new Headers();
|
|
82
|
+
headers2.append("Set-Cookie", setCookieHeader2);
|
|
83
|
+
return respond(void 0, headers2);
|
|
81
84
|
}
|
|
85
|
+
const newAccessToken = refreshResult.value;
|
|
86
|
+
const setCookieHeader = await authService.getAccessTokenSetCookie(newAccessToken);
|
|
87
|
+
const headers = new Headers();
|
|
88
|
+
headers.append("Set-Cookie", setCookieHeader);
|
|
89
|
+
const payload = authService.accessTokenManager.decode(newAccessToken);
|
|
90
|
+
return respond(payload, headers);
|
|
82
91
|
}
|
|
83
92
|
return respond(void 0);
|
|
84
93
|
};
|
|
@@ -89,13 +98,14 @@ function createWithStrictAuthHandler({ authService }) {
|
|
|
89
98
|
// src/auth/cookie_manager.ts
|
|
90
99
|
var import_react_router = require("react-router");
|
|
91
100
|
|
|
92
|
-
// src/api/
|
|
93
|
-
var import_server2 = require("
|
|
94
|
-
var
|
|
101
|
+
// src/api/default_api_handler.ts
|
|
102
|
+
var import_server2 = require("gw-file/server");
|
|
103
|
+
var import_gw_response = require("gw-response");
|
|
104
|
+
var defaultAPIHandler = ({
|
|
95
105
|
authService,
|
|
96
106
|
fileService,
|
|
97
107
|
passwordRecoveryService,
|
|
98
|
-
|
|
108
|
+
authProviders,
|
|
99
109
|
signupTokenManager
|
|
100
110
|
}) => {
|
|
101
111
|
const handler = async (args) => {
|
|
@@ -110,7 +120,7 @@ var createAPIHandler = ({
|
|
|
110
120
|
switch (method) {
|
|
111
121
|
case "GET": {
|
|
112
122
|
return withAuth(
|
|
113
|
-
(auth) => ({ request: request2 }) => (0, import_server.findAuthHandler)(auth)(
|
|
123
|
+
(auth) => ({ request: request2 }) => (0, import_server.findAuthHandler)(auth)()
|
|
114
124
|
);
|
|
115
125
|
}
|
|
116
126
|
}
|
|
@@ -130,13 +140,10 @@ var createAPIHandler = ({
|
|
|
130
140
|
const provider = slug[2];
|
|
131
141
|
switch (method) {
|
|
132
142
|
case "POST": {
|
|
133
|
-
return (0, import_server.loginWithThirdPartyHandler)(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
getThirdPartyAuth
|
|
138
|
-
}
|
|
139
|
-
);
|
|
143
|
+
return (0, import_server.loginWithThirdPartyHandler)(request, {
|
|
144
|
+
provider,
|
|
145
|
+
authProviders
|
|
146
|
+
});
|
|
140
147
|
}
|
|
141
148
|
}
|
|
142
149
|
}
|
|
@@ -175,14 +182,11 @@ var createAPIHandler = ({
|
|
|
175
182
|
default: {
|
|
176
183
|
switch (method) {
|
|
177
184
|
case "POST": {
|
|
178
|
-
return (0, import_server.signUpWithThirdpartyHandler)(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
signupTokenManager
|
|
184
|
-
}
|
|
185
|
-
);
|
|
185
|
+
return (0, import_server.signUpWithThirdpartyHandler)(request, {
|
|
186
|
+
authService,
|
|
187
|
+
fileService,
|
|
188
|
+
signupTokenManager
|
|
189
|
+
});
|
|
186
190
|
}
|
|
187
191
|
}
|
|
188
192
|
}
|
|
@@ -195,7 +199,7 @@ var createAPIHandler = ({
|
|
|
195
199
|
return (0, import_server.thirdpartyAuthCallbackHandler)(request, {
|
|
196
200
|
provider,
|
|
197
201
|
authService,
|
|
198
|
-
|
|
202
|
+
authProviders
|
|
199
203
|
});
|
|
200
204
|
}
|
|
201
205
|
}
|
|
@@ -218,9 +222,9 @@ var createAPIHandler = ({
|
|
|
218
222
|
switch (method) {
|
|
219
223
|
case "POST": {
|
|
220
224
|
return withAuth(
|
|
221
|
-
(auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(
|
|
222
|
-
auth
|
|
223
|
-
)
|
|
225
|
+
(auth) => ({ request: request2 }) => (0, import_server2.uploadFileHandler)({ fileService })(request2, {
|
|
226
|
+
userId: auth?.userId
|
|
227
|
+
})
|
|
224
228
|
)(args);
|
|
225
229
|
}
|
|
226
230
|
}
|
|
@@ -232,7 +236,7 @@ var createAPIHandler = ({
|
|
|
232
236
|
return withAuth(
|
|
233
237
|
(auth) => () => (0, import_server2.deleteFileHandler)({
|
|
234
238
|
fileRepository: fileService.fileRepository
|
|
235
|
-
})({ fileId })(
|
|
239
|
+
})({ fileId, userId: auth?.userId })()
|
|
236
240
|
);
|
|
237
241
|
}
|
|
238
242
|
}
|
|
@@ -240,17 +244,27 @@ var createAPIHandler = ({
|
|
|
240
244
|
}
|
|
241
245
|
}
|
|
242
246
|
default: {
|
|
243
|
-
return (0,
|
|
247
|
+
return (0, import_gw_response.httpNotFound)({
|
|
248
|
+
code: "RESOURCE_NOT_FOUND",
|
|
249
|
+
message: "\uB9AC\uC18C\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
250
|
+
});
|
|
244
251
|
}
|
|
245
252
|
}
|
|
246
253
|
};
|
|
247
254
|
return handler;
|
|
248
255
|
};
|
|
249
256
|
|
|
250
|
-
// src/api/
|
|
251
|
-
var
|
|
252
|
-
var
|
|
253
|
-
|
|
257
|
+
// src/api/resource_handler.ts
|
|
258
|
+
var import_gw_response3 = require("gw-response");
|
|
259
|
+
var import_gw_result = require("gw-result");
|
|
260
|
+
|
|
261
|
+
// src/api/put_resource_handler.ts
|
|
262
|
+
var import_gw_response2 = require("gw-response");
|
|
263
|
+
|
|
264
|
+
// src/crud/crud_form_provider.tsx
|
|
265
|
+
var import_react_router2 = require("react-router");
|
|
266
|
+
var import_react_store_input = require("react-store-input");
|
|
267
|
+
var import_react = require("react");
|
|
254
268
|
|
|
255
269
|
// src/crud/serialize.ts
|
|
256
270
|
function deserialize(data) {
|
|
@@ -289,119 +303,191 @@ function deserialize(data) {
|
|
|
289
303
|
return void 0;
|
|
290
304
|
}
|
|
291
305
|
|
|
292
|
-
// src/
|
|
293
|
-
|
|
294
|
-
|
|
306
|
+
// src/crud/crud_form_provider.tsx
|
|
307
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
308
|
+
var FormContext = (0, import_react.createContext)({});
|
|
309
|
+
|
|
310
|
+
// src/form/create_form_component.tsx
|
|
311
|
+
var import_react2 = require("react");
|
|
312
|
+
|
|
313
|
+
// src/utils/cn.ts
|
|
314
|
+
function cn(...classes) {
|
|
315
|
+
return classes.filter(Boolean).join(" ").trim();
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// src/utils/date.ts
|
|
319
|
+
var import_moment_timezone = __toESM(require("moment-timezone"));
|
|
320
|
+
|
|
321
|
+
// src/form/create_form_component.tsx
|
|
322
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
323
|
+
function createComponent(tag, options) {
|
|
324
|
+
return function FormComponent({ className, ...props }) {
|
|
325
|
+
const Tag = tag;
|
|
326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Tag, { ...props, className: cn(options.className, className) });
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// src/form/form_components.tsx
|
|
331
|
+
var FormEntry = createComponent("div", {
|
|
332
|
+
className: "flex-1"
|
|
333
|
+
});
|
|
334
|
+
var FormRow = createComponent("div", {
|
|
335
|
+
className: "flex-1 flex gap-4 mb-6"
|
|
336
|
+
});
|
|
337
|
+
var FormLabel = createComponent("label", {
|
|
338
|
+
className: "flex-1 font-semibold mb-2.5 block"
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// src/crud/crud_form.tsx
|
|
342
|
+
var import_react_store_input3 = require("react-store-input");
|
|
343
|
+
|
|
344
|
+
// src/client/env_loader.tsx
|
|
345
|
+
var import_react_router3 = require("react-router");
|
|
346
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
347
|
+
|
|
348
|
+
// src/client/file_input.tsx
|
|
349
|
+
var import_react3 = require("react");
|
|
350
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
351
|
+
|
|
352
|
+
// src/client/use_user_agent.tsx
|
|
353
|
+
var import_react_router4 = require("react-router");
|
|
354
|
+
|
|
355
|
+
// src/client/store_text_editor.tsx
|
|
356
|
+
var import_dn_react_text_editor = require("dn-react-text-editor");
|
|
357
|
+
var import_react_store_input2 = require("react-store-input");
|
|
358
|
+
var import_react4 = require("react");
|
|
359
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
360
|
+
|
|
361
|
+
// src/client/editor.tsx
|
|
362
|
+
var import_client = require("gw-file/client");
|
|
363
|
+
|
|
364
|
+
// src/crud/crud_form.tsx
|
|
365
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
366
|
+
|
|
367
|
+
// src/api/put_resource_handler.ts
|
|
368
|
+
var import_drizzle_orm = require("drizzle-orm");
|
|
369
|
+
var import_uuid = require("uuid");
|
|
370
|
+
function putResourceHandler({
|
|
295
371
|
repository,
|
|
296
372
|
validators,
|
|
297
373
|
existingConditions,
|
|
298
374
|
injectUserId,
|
|
299
|
-
|
|
375
|
+
isOwnedBy
|
|
300
376
|
}) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
if (
|
|
306
|
-
|
|
377
|
+
return async (auth, request) => {
|
|
378
|
+
const serilaizedParams = await request.json();
|
|
379
|
+
const params = deserialize(serilaizedParams);
|
|
380
|
+
const itemId = params.id || (0, import_uuid.v4)();
|
|
381
|
+
if (params.id) {
|
|
382
|
+
const existing = await repository.find(itemId);
|
|
383
|
+
if (!existing) {
|
|
384
|
+
return (0, import_gw_response2.httpNotFound)();
|
|
385
|
+
}
|
|
386
|
+
if (isOwnedBy && (!auth || !isOwnedBy(auth, existing))) {
|
|
387
|
+
return (0, import_gw_response2.httpForbidden)();
|
|
388
|
+
}
|
|
307
389
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
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
|
-
}, [])
|
|
344
|
-
);
|
|
345
|
-
const existing = await repository.findAll({
|
|
346
|
-
limit: 1,
|
|
347
|
-
where
|
|
348
|
-
});
|
|
349
|
-
if (existing.length > 0) {
|
|
350
|
-
throw (0, import_http2.CONFLICT)("\uC790\uB8CC\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.");
|
|
351
|
-
}
|
|
390
|
+
if (validators) {
|
|
391
|
+
const paramsForValidation = Object.keys(validators).filter(
|
|
392
|
+
(key) => Object.prototype.hasOwnProperty.call(validators, key)
|
|
393
|
+
);
|
|
394
|
+
for (const paramKey of paramsForValidation) {
|
|
395
|
+
const value = params[paramKey];
|
|
396
|
+
const validator = validators[paramKey];
|
|
397
|
+
if (validator?.validate && !validator.validate(value)) {
|
|
398
|
+
return (0, import_gw_response2.httpBadRequest)({
|
|
399
|
+
code: "BAD_REQUEST",
|
|
400
|
+
message: validator.message ? validator.message(value) : "\uC798\uBABB\uB41C \uC694\uCCAD\uC785\uB2C8\uB2E4."
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (!params.id && existingConditions) {
|
|
406
|
+
const paramsForExistenceCheck = Object.keys(existingConditions).filter(
|
|
407
|
+
(key) => Object.prototype.hasOwnProperty.call(params, key)
|
|
408
|
+
);
|
|
409
|
+
if (paramsForExistenceCheck.length > 0) {
|
|
410
|
+
const where = (0, import_drizzle_orm.and)(
|
|
411
|
+
...paramsForExistenceCheck.reduce((acc, key) => {
|
|
412
|
+
const condition = existingConditions[key];
|
|
413
|
+
if (condition) {
|
|
414
|
+
acc.push(condition(params[key]));
|
|
352
415
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
if (error instanceof Error) {
|
|
363
|
-
throw (0, import_http2.INTERNAL_SERVER_ERROR)(error.message);
|
|
364
|
-
}
|
|
365
|
-
throw error;
|
|
416
|
+
return acc;
|
|
417
|
+
}, [])
|
|
418
|
+
);
|
|
419
|
+
const existing = await repository.findAll({
|
|
420
|
+
limit: 1,
|
|
421
|
+
where
|
|
422
|
+
});
|
|
423
|
+
if (existing.length > 0) {
|
|
424
|
+
return (0, import_gw_response2.httpConflict)();
|
|
366
425
|
}
|
|
367
426
|
}
|
|
368
|
-
default:
|
|
369
|
-
throw (0, import_http2.METHOD_NOT_ALLOWED)();
|
|
370
427
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
428
|
+
const values = {
|
|
429
|
+
id: itemId,
|
|
430
|
+
userId: injectUserId ? auth?.userId : void 0,
|
|
431
|
+
...params
|
|
432
|
+
};
|
|
433
|
+
const item = await repository.save(values);
|
|
434
|
+
return (0, import_gw_response2.httpCreated)(item);
|
|
375
435
|
};
|
|
376
436
|
}
|
|
377
437
|
|
|
378
|
-
// src/api/
|
|
379
|
-
|
|
380
|
-
function itemApiHandler({
|
|
438
|
+
// src/api/resource_handler.ts
|
|
439
|
+
function resourceHandler({
|
|
381
440
|
withAuthAction,
|
|
382
441
|
repository,
|
|
383
|
-
|
|
384
|
-
|
|
442
|
+
validators,
|
|
443
|
+
existingConditions,
|
|
444
|
+
injectUserId,
|
|
445
|
+
roles,
|
|
446
|
+
isOwnedBy
|
|
385
447
|
}) {
|
|
386
448
|
const loader = async ({ request }) => {
|
|
387
|
-
return {};
|
|
449
|
+
return (0, import_gw_result.ok)({});
|
|
388
450
|
};
|
|
389
|
-
const action = withAuthAction((auth) => async ({
|
|
451
|
+
const action = withAuthAction((auth) => async ({ request, params }) => {
|
|
390
452
|
if (roles && roles.length > 0 && (!auth || !roles.includes(auth.role))) {
|
|
391
|
-
|
|
453
|
+
return (0, import_gw_response3.httpForbidden)({
|
|
454
|
+
code: "FORBIDDEN",
|
|
455
|
+
message: "\uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
456
|
+
});
|
|
392
457
|
}
|
|
393
458
|
const itemId = params.itemId;
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
459
|
+
if (itemId) {
|
|
460
|
+
const existing = await repository.find(itemId);
|
|
461
|
+
if (!existing) {
|
|
462
|
+
return (0, import_gw_response3.httpNotFound)();
|
|
463
|
+
}
|
|
464
|
+
if (isOwnedBy && (!auth || !isOwnedBy(auth, existing))) {
|
|
465
|
+
return (0, import_gw_response3.httpForbidden)();
|
|
466
|
+
}
|
|
467
|
+
switch (request.method) {
|
|
468
|
+
case "DELETE": {
|
|
469
|
+
await repository.delete(itemId);
|
|
470
|
+
return (0, import_gw_response3.httpNoContent)();
|
|
471
|
+
}
|
|
472
|
+
default: {
|
|
473
|
+
return (0, import_gw_response3.httpMethodNotAllowed)();
|
|
474
|
+
}
|
|
475
|
+
}
|
|
400
476
|
}
|
|
401
477
|
switch (request.method) {
|
|
402
|
-
case "
|
|
403
|
-
|
|
404
|
-
|
|
478
|
+
case "POST":
|
|
479
|
+
case "PUT": {
|
|
480
|
+
const handler = putResourceHandler({
|
|
481
|
+
repository,
|
|
482
|
+
validators,
|
|
483
|
+
existingConditions,
|
|
484
|
+
injectUserId,
|
|
485
|
+
isOwnedBy
|
|
486
|
+
});
|
|
487
|
+
return handler(auth, request);
|
|
488
|
+
}
|
|
489
|
+
default: {
|
|
490
|
+
return (0, import_gw_response3.httpMethodNotAllowed)();
|
|
405
491
|
}
|
|
406
492
|
}
|
|
407
493
|
});
|
|
@@ -412,7 +498,7 @@ function itemApiHandler({
|
|
|
412
498
|
}
|
|
413
499
|
// Annotate the CommonJS export names for ESM import in node:
|
|
414
500
|
0 && (module.exports = {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
501
|
+
defaultAPIHandler,
|
|
502
|
+
putResourceHandler,
|
|
503
|
+
resourceHandler
|
|
418
504
|
});
|