@lodashventure/medusa-review 0.0.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/.medusa/server/src/admin/index.js +1633 -0
- package/.medusa/server/src/admin/index.mjs +1631 -0
- package/.medusa/server/src/admin/style.css +75 -0
- package/.medusa/server/src/api/admin/reviews/route.js +35 -0
- package/.medusa/server/src/api/admin/reviews/status/route.js +21 -0
- package/.medusa/server/src/api/middlewares.js +77 -0
- package/.medusa/server/src/api/store/reviews/[productId]/route.js +20 -0
- package/.medusa/server/src/api/store/reviews/[productId]/users/route.js +28 -0
- package/.medusa/server/src/api/store/reviews/route.js +57 -0
- package/.medusa/server/src/links/review-product.js +16 -0
- package/.medusa/server/src/modules/product-review/index.js +13 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250514002111.js +16 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250514010337.js +17 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250514020039.js +14 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250516011714.js +18 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250516015055.js +16 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250516022918.js +14 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20250517112618.js +14 -0
- package/.medusa/server/src/modules/product-review/models/review-media.js +18 -0
- package/.medusa/server/src/modules/product-review/models/review.js +40 -0
- package/.medusa/server/src/modules/product-review/service.js +15 -0
- package/.medusa/server/src/workflows/review/createReviewWorkflow.js +60 -0
- package/.medusa/server/src/workflows/review/getReviewsWorkflow.js +47 -0
- package/.medusa/server/src/workflows/review/updateReviewWorkflow.js +33 -0
- package/README.md +28 -0
- package/package.json +83 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
.rc-mentions {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
position: relative;
|
|
4
|
+
white-space: pre-wrap;
|
|
5
|
+
}
|
|
6
|
+
.rc-mentions > textarea,
|
|
7
|
+
.rc-mentions-measure {
|
|
8
|
+
font-size: inherit;
|
|
9
|
+
font-size-adjust: inherit;
|
|
10
|
+
font-style: inherit;
|
|
11
|
+
font-variant: inherit;
|
|
12
|
+
font-stretch: inherit;
|
|
13
|
+
font-weight: inherit;
|
|
14
|
+
font-family: inherit;
|
|
15
|
+
padding: 0;
|
|
16
|
+
margin: 0;
|
|
17
|
+
line-height: inherit;
|
|
18
|
+
vertical-align: top;
|
|
19
|
+
overflow: inherit;
|
|
20
|
+
word-break: inherit;
|
|
21
|
+
white-space: inherit;
|
|
22
|
+
word-wrap: break-word;
|
|
23
|
+
overflow-x: initial;
|
|
24
|
+
overflow-y: auto;
|
|
25
|
+
text-align: inherit;
|
|
26
|
+
letter-spacing: inherit;
|
|
27
|
+
tab-size: inherit;
|
|
28
|
+
direction: inherit;
|
|
29
|
+
}
|
|
30
|
+
.rc-mentions > textarea {
|
|
31
|
+
border: none;
|
|
32
|
+
width: 100%;
|
|
33
|
+
}
|
|
34
|
+
.rc-mentions-measure {
|
|
35
|
+
position: absolute;
|
|
36
|
+
left: 0;
|
|
37
|
+
right: 0;
|
|
38
|
+
top: 0;
|
|
39
|
+
bottom: 0;
|
|
40
|
+
pointer-events: none;
|
|
41
|
+
color: transparent;
|
|
42
|
+
z-index: -1;
|
|
43
|
+
}
|
|
44
|
+
.rc-mentions-dropdown {
|
|
45
|
+
position: absolute;
|
|
46
|
+
color: #000;
|
|
47
|
+
}
|
|
48
|
+
.rc-mentions-dropdown-menu {
|
|
49
|
+
list-style: none;
|
|
50
|
+
margin: 0;
|
|
51
|
+
padding: 0;
|
|
52
|
+
}
|
|
53
|
+
.rc-mentions-dropdown-menu-item {
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
}
|
|
56
|
+
.rc-mentions {
|
|
57
|
+
font-size: 20px;
|
|
58
|
+
border: 1px solid #999;
|
|
59
|
+
border-radius: 3px;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
}
|
|
62
|
+
.rc-mentions-dropdown {
|
|
63
|
+
border: 1px solid #999;
|
|
64
|
+
border-radius: 3px;
|
|
65
|
+
background: #fff;
|
|
66
|
+
}
|
|
67
|
+
.rc-mentions-dropdown-menu-item {
|
|
68
|
+
padding: 4px 8px;
|
|
69
|
+
}
|
|
70
|
+
.rc-mentions-dropdown-menu-item-active {
|
|
71
|
+
background: #e6f7ff;
|
|
72
|
+
}
|
|
73
|
+
.rc-mentions-dropdown-menu-item-disabled {
|
|
74
|
+
opacity: 0.5;
|
|
75
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = exports.GET = void 0;
|
|
4
|
+
const getReviewsWorkflow_1 = require("../../../workflows/review/getReviewsWorkflow");
|
|
5
|
+
const createReviewWorkflow_1 = require("../../../workflows/review/createReviewWorkflow");
|
|
6
|
+
const GET = async (req, res) => {
|
|
7
|
+
const { result } = await (0, getReviewsWorkflow_1.getReviewsWorkflow)().run({
|
|
8
|
+
input: {
|
|
9
|
+
queryConfig: req.queryConfig,
|
|
10
|
+
filters: {
|
|
11
|
+
parent: null,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
res.json(result);
|
|
16
|
+
};
|
|
17
|
+
exports.GET = GET;
|
|
18
|
+
const POST = async (req, res) => {
|
|
19
|
+
/**
|
|
20
|
+
* user = Core user (admin)
|
|
21
|
+
* customer = Medusa customer
|
|
22
|
+
*/
|
|
23
|
+
const isAdmin = req.auth_context?.actor_type === "user";
|
|
24
|
+
const { result } = await (0, createReviewWorkflow_1.createReviewWorkflow)(req.scope).run({
|
|
25
|
+
input: {
|
|
26
|
+
...req.validatedBody,
|
|
27
|
+
is_admin: isAdmin,
|
|
28
|
+
status: "approved",
|
|
29
|
+
medias: [],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
res.json(result);
|
|
33
|
+
};
|
|
34
|
+
exports.POST = POST;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Jldmlld3Mvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscUZBQWtGO0FBQ2xGLHlGQUFzRjtBQUcvRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSx1Q0FBa0IsR0FBRSxDQUFDLEdBQUcsQ0FBQztRQUNoRCxLQUFLLEVBQUU7WUFDTCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxJQUFJO2FBQ2I7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBWFcsUUFBQSxHQUFHLE9BV2Q7QUFFSyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQW1ELEVBQ25ELEdBQW1CLEVBQ25CLEVBQUU7SUFDRjs7O09BR0c7SUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsS0FBSyxNQUFNLENBQUM7SUFFeEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwyQ0FBb0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzNELEtBQUssRUFBRTtZQUNMLEdBQUcsR0FBRyxDQUFDLGFBQWE7WUFDcEIsUUFBUSxFQUFFLE9BQU87WUFDakIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFLEVBQUU7U0FDWDtLQUNGLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBcEJXLFFBQUEsSUFBSSxRQW9CZiJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PostAdminUpdateReviewsStatusSchema = void 0;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const updateReviewWorkflow_1 = require("../../../../workflows/review/updateReviewWorkflow");
|
|
7
|
+
exports.PostAdminUpdateReviewsStatusSchema = zod_1.z.object({
|
|
8
|
+
ids: zod_1.z.array(zod_1.z.string()),
|
|
9
|
+
status: zod_1.z.enum(["pending", "approved", "rejected"]),
|
|
10
|
+
});
|
|
11
|
+
async function POST(req, res) {
|
|
12
|
+
const { ids, status } = req.validatedBody;
|
|
13
|
+
const { result } = await (0, updateReviewWorkflow_1.updateReviewWorkflow)(req.scope).run({
|
|
14
|
+
input: ids.map((id) => ({
|
|
15
|
+
id,
|
|
16
|
+
status,
|
|
17
|
+
})),
|
|
18
|
+
});
|
|
19
|
+
res.json(result);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Jldmlld3Mvc3RhdHVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLG9CQWNDO0FBdEJELDZCQUF3QjtBQUN4Qiw0RkFBeUY7QUFFNUUsUUFBQSxrQ0FBa0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELEdBQUcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDcEQsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBc0UsRUFDdEUsR0FBbUI7SUFFbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBRTFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMkNBQW9CLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMzRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QixFQUFFO1lBQ0YsTUFBTTtTQUNQLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsQ0FBQyJ9
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const http_1 = require("@medusajs/framework/http");
|
|
7
|
+
const route_1 = require("./store/reviews/route");
|
|
8
|
+
const route_2 = require("./admin/reviews/status/route");
|
|
9
|
+
const multer_1 = __importDefault(require("multer"));
|
|
10
|
+
const getReviewsWorkflow_1 = require("../workflows/review/getReviewsWorkflow");
|
|
11
|
+
const upload = (0, multer_1.default)({ storage: multer_1.default.memoryStorage() });
|
|
12
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
13
|
+
routes: [
|
|
14
|
+
{
|
|
15
|
+
method: ["POST"],
|
|
16
|
+
matcher: "/admin/reviews",
|
|
17
|
+
middlewares: [
|
|
18
|
+
(0, http_1.authenticate)("user", ["session", "bearer"]),
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
upload.array("files"),
|
|
21
|
+
(0, http_1.validateAndTransformBody)(route_1.PostStoreReviewSchema),
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
method: ["POST"],
|
|
26
|
+
matcher: "/store/reviews",
|
|
27
|
+
middlewares: [
|
|
28
|
+
(0, http_1.authenticate)("customer", ["session", "bearer"]),
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
upload.array("files"),
|
|
31
|
+
(0, http_1.validateAndTransformBody)(route_1.PostStoreReviewSchema),
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
matcher: "/admin/reviews/status",
|
|
36
|
+
method: ["POST"],
|
|
37
|
+
middlewares: [
|
|
38
|
+
(0, http_1.validateAndTransformBody)(route_2.PostAdminUpdateReviewsStatusSchema),
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
method: ["GET"],
|
|
43
|
+
matcher: "/admin/reviews",
|
|
44
|
+
middlewares: [
|
|
45
|
+
(0, http_1.validateAndTransformQuery)(getReviewsWorkflow_1.GetReviewsSchema, {
|
|
46
|
+
defaults: [
|
|
47
|
+
"*",
|
|
48
|
+
"product.title",
|
|
49
|
+
"product.id",
|
|
50
|
+
"medias.*",
|
|
51
|
+
"children.*",
|
|
52
|
+
"children.medias.*",
|
|
53
|
+
],
|
|
54
|
+
isList: true,
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
method: ["GET"],
|
|
60
|
+
matcher: "/store/reviews/:productId",
|
|
61
|
+
middlewares: [
|
|
62
|
+
(0, http_1.validateAndTransformQuery)(getReviewsWorkflow_1.GetReviewsSchema, {
|
|
63
|
+
defaults: [
|
|
64
|
+
"*",
|
|
65
|
+
"product.title",
|
|
66
|
+
"product.id",
|
|
67
|
+
"medias.*",
|
|
68
|
+
"children.*",
|
|
69
|
+
"children.medias.*",
|
|
70
|
+
],
|
|
71
|
+
isList: true,
|
|
72
|
+
}),
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBS2tDO0FBQ2xDLGlEQUE4RDtBQUM5RCx3REFBa0Y7QUFDbEYsb0RBQTRCO0FBQzVCLCtFQUEwRTtBQUUxRSxNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFM0Qsa0JBQWUsSUFBQSx3QkFBaUIsRUFBQztJQUMvQixNQUFNLEVBQUU7UUFDTjtZQUNFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxhQUFhO2dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFBLCtCQUF3QixFQUFDLDZCQUE0QixDQUFDO2FBQ3ZEO1NBQ0Y7UUFDRDtZQUNFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLG1CQUFZLEVBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxhQUFhO2dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNyQixJQUFBLCtCQUF3QixFQUFDLDZCQUE0QixDQUFDO2FBQ3ZEO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRTtnQkFDWCxJQUFBLCtCQUF3QixFQUFDLDBDQUF5QyxDQUFDO2FBQ3BFO1NBQ0Y7UUFDRDtZQUNFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsV0FBVyxFQUFFO2dCQUNYLElBQUEsZ0NBQXlCLEVBQUMscUNBQXVCLEVBQUU7b0JBQ2pELFFBQVEsRUFBRTt3QkFDUixHQUFHO3dCQUNILGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixVQUFVO3dCQUNWLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxNQUFNLEVBQUUsSUFBSTtpQkFDYixDQUFDO2FBQ0g7U0FDRjtRQUNEO1lBQ0UsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2YsT0FBTyxFQUFFLDJCQUEyQjtZQUNwQyxXQUFXLEVBQUU7Z0JBQ1gsSUFBQSxnQ0FBeUIsRUFBQyxxQ0FBdUIsRUFBRTtvQkFDakQsUUFBUSxFQUFFO3dCQUNSLEdBQUc7d0JBQ0gsZUFBZTt3QkFDZixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixtQkFBbUI7cUJBQ3BCO29CQUNELE1BQU0sRUFBRSxJQUFJO2lCQUNiLENBQUM7YUFDSDtTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const getReviewsWorkflow_1 = require("../../../../workflows/review/getReviewsWorkflow");
|
|
5
|
+
const GET = async (req, res) => {
|
|
6
|
+
const { productId } = req.params;
|
|
7
|
+
const { result } = await (0, getReviewsWorkflow_1.getReviewsWorkflow)().run({
|
|
8
|
+
input: {
|
|
9
|
+
queryConfig: req.queryConfig,
|
|
10
|
+
filters: {
|
|
11
|
+
product_id: productId,
|
|
12
|
+
status: "approved",
|
|
13
|
+
parent: null,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
res.json(result);
|
|
18
|
+
};
|
|
19
|
+
exports.GET = GET;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Jldmlld3MvW3Byb2R1Y3RJZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsd0ZBQXFGO0FBRTlFLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUVqQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVDQUFrQixHQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2hELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixNQUFNLEVBQUUsSUFBSTthQUNiO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQWZXLFFBQUEsR0FBRyxPQWVkIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const product_review_1 = require("../../../../../modules/product-review");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const GET = async (req, res) => {
|
|
8
|
+
const { productId, users } = req.params;
|
|
9
|
+
const reviewService = framework_1.container.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
10
|
+
const customerService = framework_1.container.resolve(utils_1.Modules.CUSTOMER);
|
|
11
|
+
const reviews = await reviewService.listReviews({
|
|
12
|
+
product_id: productId,
|
|
13
|
+
customer_id: {
|
|
14
|
+
$ne: null,
|
|
15
|
+
},
|
|
16
|
+
}, {
|
|
17
|
+
select: ["customer_id"],
|
|
18
|
+
});
|
|
19
|
+
const customerIds = Array.from(new Set(reviews.map((review) => review.customer_id))).filter((id) => Boolean(id));
|
|
20
|
+
const customers = await customerService.listCustomers({
|
|
21
|
+
id: customerIds,
|
|
22
|
+
}, {
|
|
23
|
+
select: ["id", "first_name", "last_name"],
|
|
24
|
+
});
|
|
25
|
+
res.json(customers);
|
|
26
|
+
};
|
|
27
|
+
exports.GET = GET;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Jldmlld3MvW3Byb2R1Y3RJZF0vdXNlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBRS9FLDBFQUE4RTtBQUM5RSxxREFBb0Q7QUFFN0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUV4QyxNQUFNLGFBQWEsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FDckMsc0NBQXFCLENBQ3RCLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUM3QztRQUNFLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFdBQVcsRUFBRTtZQUNYLEdBQUcsRUFBRSxJQUFJO1NBQ1Y7S0FDRixFQUNEO1FBQ0UsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3hCLENBQ0YsQ0FBQztJQUNGLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzVCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUNyRCxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsQ0FDbkQ7UUFDRSxFQUFFLEVBQUUsV0FBVztLQUNoQixFQUNEO1FBQ0UsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7S0FDMUMsQ0FDRixDQUFDO0lBRUYsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFsQ1csUUFBQSxHQUFHLE9Ba0NkIn0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = exports.PostStoreReviewSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const createReviewWorkflow_1 = require("../../../workflows/review/createReviewWorkflow");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
exports.PostStoreReviewSchema = zod_1.z.object({
|
|
8
|
+
parent_id: zod_1.z.string().optional(),
|
|
9
|
+
title: zod_1.z.string().optional(),
|
|
10
|
+
content: zod_1.z.string(),
|
|
11
|
+
rating: zod_1.z.preprocess((val) => {
|
|
12
|
+
if (val && typeof val === "string") {
|
|
13
|
+
return parseInt(val);
|
|
14
|
+
}
|
|
15
|
+
return val;
|
|
16
|
+
}, zod_1.z.number().min(1).max(5).optional()),
|
|
17
|
+
product_id: zod_1.z.string(),
|
|
18
|
+
});
|
|
19
|
+
const POST = async (req, res) => {
|
|
20
|
+
const input = req.body;
|
|
21
|
+
const inputFiles = req.files;
|
|
22
|
+
const { result: uploadedFiles } = await (0, core_flows_1.uploadFilesWorkflow)(req.scope).run({
|
|
23
|
+
input: {
|
|
24
|
+
files: inputFiles?.map((f) => ({
|
|
25
|
+
filename: f.originalname,
|
|
26
|
+
mimeType: f.mimetype,
|
|
27
|
+
content: f.buffer.toString("binary"),
|
|
28
|
+
access: "public",
|
|
29
|
+
})) ?? [],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const medias = uploadedFiles.map((file, index) => ({
|
|
33
|
+
fileId: file.id,
|
|
34
|
+
fileUrl: file.url,
|
|
35
|
+
mimeType: inputFiles?.at(index)?.mimetype ?? "",
|
|
36
|
+
}));
|
|
37
|
+
try {
|
|
38
|
+
const { result: review } = await (0, createReviewWorkflow_1.createReviewWorkflow)(req.scope).run({
|
|
39
|
+
input: {
|
|
40
|
+
...input,
|
|
41
|
+
customer_id: req.auth_context?.actor_id,
|
|
42
|
+
medias,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
res.json(review);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
(0, core_flows_1.deleteFilesWorkflow)(req.scope).run({
|
|
49
|
+
input: {
|
|
50
|
+
ids: uploadedFiles.map((file) => file.id),
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
exports.POST = POST;
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Jldmlld3Mvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsNkJBQXdCO0FBQ3hCLHlGQUFzRjtBQUV0Riw0REFHcUM7QUFFeEIsUUFBQSxxQkFBcUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ3ZCLENBQUMsQ0FBQztBQVFJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUU3QixNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sSUFBQSxnQ0FBbUIsRUFBQyxHQUFHLENBQUMsS0FBWSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hGLEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFlBQVk7Z0JBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtnQkFDcEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDcEMsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUNWO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO1FBQ2pCLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFO0tBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUosSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMkNBQW9CLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNuRSxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFdBQVcsRUFBRSxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVE7Z0JBQ3ZDLE1BQU07YUFDUDtTQUNGLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFBLGdDQUFtQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLEdBQUcsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBMUNXLFFBQUEsSUFBSSxRQTBDZiJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_review_1 = __importDefault(require("../modules/product-review"));
|
|
8
|
+
const product_1 = __importDefault(require("@medusajs/medusa/product"));
|
|
9
|
+
exports.default = (0, utils_1.defineLink)({
|
|
10
|
+
linkable: product_review_1.default.linkable.review,
|
|
11
|
+
field: "product_id",
|
|
12
|
+
isList: false,
|
|
13
|
+
}, product_1.default.linkable.product, {
|
|
14
|
+
readOnly: true,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LXByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3MvcmV2aWV3LXByb2R1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBc0Q7QUFDdEQsK0VBQTJEO0FBQzNELHVFQUFvRDtBQUVwRCxrQkFBZSxJQUFBLGtCQUFVLEVBQ3ZCO0lBQ0UsUUFBUSxFQUFFLHdCQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBQzdDLEtBQUssRUFBRSxZQUFZO0lBQ25CLE1BQU0sRUFBRSxLQUFLO0NBQ2QsRUFDRCxpQkFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQzlCO0lBQ0UsUUFBUSxFQUFFLElBQUk7Q0FDZixDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PRODUCT_REVIEW_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.PRODUCT_REVIEW_MODULE = "productReview";
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.PRODUCT_REVIEW_MODULE, {
|
|
11
|
+
service: service_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBbUQ7QUFDbkQsd0RBQW1EO0FBRXRDLFFBQUEscUJBQXFCLEdBQUcsZUFBZSxDQUFDO0FBRXJELGtCQUFlLElBQUEsY0FBTSxFQUFDLDZCQUFxQixFQUFFO0lBQzNDLE9BQU8sRUFBRSxpQkFBMEI7Q0FDcEMsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250514002111 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250514002111 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "review" ("id" text not null, "title" text null, "content" text not null, "rating" real not null, "first_name" text not null, "last_name" text not null, "status" text check ("status" in ('pending', 'approved', 'rejected')) not null default 'pending', "product_id" text not null, "customer_id" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_pkey" primary key ("id"), constraint rating_range check (rating >= 1 AND rating <= 5));`);
|
|
8
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_REVIEW_PRODUCT_ID" ON "review" (product_id) WHERE deleted_at IS NULL;`);
|
|
9
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_deleted_at" ON "review" (deleted_at) WHERE deleted_at IS NULL;`);
|
|
10
|
+
}
|
|
11
|
+
async down() {
|
|
12
|
+
this.addSql(`drop table if exists "review" cascade;`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20250514002111 = Migration20250514002111;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTQwMDIxMTEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE0MDAyMTExLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3akJBQXdqQixDQUFDLENBQUM7UUFDdGtCLElBQUksQ0FBQyxNQUFNLENBQUMsdUdBQXVHLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsTUFBTSxDQUFDLHVHQUF1RyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBRUY7QUFaRCwwREFZQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250514010337 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250514010337 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "review_media" ("id" text not null, "fileId" text not null, "mimeType" text not null, "review_id" text not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "review_media_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_media_review_id" ON "review_media" (review_id) WHERE deleted_at IS NULL;`);
|
|
9
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_media_deleted_at" ON "review_media" (deleted_at) WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`alter table if exists "review_media" add constraint "review_media_review_id_foreign" foreign key ("review_id") references "review" ("id") on update cascade on delete cascade;`);
|
|
11
|
+
}
|
|
12
|
+
async down() {
|
|
13
|
+
this.addSql(`drop table if exists "review_media" cascade;`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Migration20250514010337 = Migration20250514010337;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTQwMTAzMzcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE0MDEwMzM3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrVUFBa1UsQ0FBQyxDQUFDO1FBQ2hWLElBQUksQ0FBQyxNQUFNLENBQUMsaUhBQWlILENBQUMsQ0FBQztRQUMvSCxJQUFJLENBQUMsTUFBTSxDQUFDLG1IQUFtSCxDQUFDLENBQUM7UUFFakksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnTEFBZ0wsQ0FBQyxDQUFDO0lBQ2hNLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUVGO0FBZEQsMERBY0MifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250514020039 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250514020039 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review" drop column if exists "first_name", drop column if exists "last_name";`);
|
|
8
|
+
}
|
|
9
|
+
async down() {
|
|
10
|
+
this.addSql(`alter table if exists "review" add column if not exists "first_name" text not null, add column if not exists "last_name" text not null;`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.Migration20250514020039 = Migration20250514020039;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTQwMjAwMzkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE0MDIwMDM5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1R0FBdUcsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHlJQUF5SSxDQUFDLENBQUM7SUFDekosQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250516011714 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250516011714 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review" add column if not exists "parent_id" text null;`);
|
|
8
|
+
this.addSql(`alter table if exists "review" add constraint "review_parent_id_foreign" foreign key ("parent_id") references "review" ("id") on update cascade on delete set null;`);
|
|
9
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_parent_id" ON "review" (parent_id) WHERE deleted_at IS NULL;`);
|
|
10
|
+
}
|
|
11
|
+
async down() {
|
|
12
|
+
this.addSql(`alter table if exists "review" drop constraint if exists "review_parent_id_foreign";`);
|
|
13
|
+
this.addSql(`drop index if exists "IDX_review_parent_id";`);
|
|
14
|
+
this.addSql(`alter table if exists "review" drop column if exists "parent_id";`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Migration20250516011714 = Migration20250516011714;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTYwMTE3MTQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE2MDExNzE0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMscUtBQXFLLENBQUMsQ0FBQztRQUNuTCxJQUFJLENBQUMsTUFBTSxDQUFDLHFHQUFxRyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsc0ZBQXNGLENBQUMsQ0FBQztRQUVwRyxJQUFJLENBQUMsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FFRjtBQWZELDBEQWVDIn0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250516015055 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250516015055 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review" alter column "rating" type real using ("rating"::real);`);
|
|
8
|
+
this.addSql(`alter table if exists "review" alter column "rating" drop not null;`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "review" alter column "rating" type real using ("rating"::real);`);
|
|
12
|
+
this.addSql(`alter table if exists "review" alter column "rating" set not null;`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20250516015055 = Migration20250516015055;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTYwMTUwNTUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE2MDE1MDU1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxNQUFNLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxNQUFNLENBQUMsb0VBQW9FLENBQUMsQ0FBQztJQUNwRixDQUFDO0NBRUY7QUFaRCwwREFZQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250516022918 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250516022918 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review" add column if not exists "is_admin" boolean null;`);
|
|
8
|
+
}
|
|
9
|
+
async down() {
|
|
10
|
+
this.addSql(`alter table if exists "review" drop column if exists "is_admin";`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.Migration20250516022918 = Migration20250516022918;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTYwMjI5MTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE2MDIyOTE4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250517112618 = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
class Migration20250517112618 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "review_media" add column if not exists "fileUrl" text not null;`);
|
|
8
|
+
}
|
|
9
|
+
async down() {
|
|
10
|
+
this.addSql(`alter table if exists "review_media" drop column if exists "fileUrl";`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.Migration20250517112618 = Migration20250517112618;
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTcxMTI2MTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUwNTE3MTEyNjE4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7SUFDdkYsQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const review_1 = __importDefault(require("./review"));
|
|
8
|
+
const ReviewMedia = utils_1.model.define("review_media", {
|
|
9
|
+
id: utils_1.model.id().primaryKey(),
|
|
10
|
+
fileId: utils_1.model.text(),
|
|
11
|
+
fileUrl: utils_1.model.text(),
|
|
12
|
+
mimeType: utils_1.model.text(),
|
|
13
|
+
review: utils_1.model.belongsTo(() => review_1.default, {
|
|
14
|
+
mappedBy: "medias",
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
exports.default = ReviewMedia;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LW1lZGlhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcHJvZHVjdC1yZXZpZXcvbW9kZWxzL3Jldmlldy1tZWRpYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFrRDtBQUNsRCxzREFBOEI7QUFFOUIsTUFBTSxXQUFXLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7SUFDL0MsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDcEIsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDckIsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDdEIsTUFBTSxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQU0sRUFBRTtRQUNwQyxRQUFRLEVBQUUsUUFBUTtLQUNuQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsV0FBVyxDQUFDIn0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const review_media_1 = __importDefault(require("./review-media"));
|
|
8
|
+
const Review = utils_1.model
|
|
9
|
+
.define("review", {
|
|
10
|
+
id: utils_1.model.id().primaryKey(),
|
|
11
|
+
title: utils_1.model.text().nullable(),
|
|
12
|
+
content: utils_1.model.text(),
|
|
13
|
+
rating: utils_1.model.float().nullable(),
|
|
14
|
+
status: utils_1.model.enum(["pending", "approved", "rejected"]).default("pending"),
|
|
15
|
+
product_id: utils_1.model.text().index("IDX_REVIEW_PRODUCT_ID"),
|
|
16
|
+
customer_id: utils_1.model.text().nullable(),
|
|
17
|
+
is_admin: utils_1.model.boolean().nullable(),
|
|
18
|
+
medias: utils_1.model.hasMany(() => review_media_1.default, {
|
|
19
|
+
mappedBy: "review",
|
|
20
|
+
}),
|
|
21
|
+
parent: utils_1.model
|
|
22
|
+
.belongsTo(() => Review, {
|
|
23
|
+
mappedBy: "children",
|
|
24
|
+
})
|
|
25
|
+
.nullable(),
|
|
26
|
+
children: utils_1.model.hasMany(() => Review, {
|
|
27
|
+
mappedBy: "parent",
|
|
28
|
+
}),
|
|
29
|
+
})
|
|
30
|
+
.cascades({
|
|
31
|
+
delete: ["medias"],
|
|
32
|
+
})
|
|
33
|
+
.checks([
|
|
34
|
+
{
|
|
35
|
+
name: "rating_range",
|
|
36
|
+
expression: (columns) => `${columns.rating} >= 1 AND ${columns.rating} <= 5`,
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
exports.default = Review;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcHJvZHVjdC1yZXZpZXcvbW9kZWxzL3Jldmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFrRDtBQUNsRCxrRUFBeUM7QUFFekMsTUFBTSxNQUFNLEdBQUcsYUFBSztLQUNqQixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLEtBQUssRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3JCLE1BQU0sRUFBRSxhQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDMUUsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUM7SUFDdkQsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsUUFBUSxFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQVcsRUFBRTtRQUN2QyxRQUFRLEVBQUUsUUFBUTtLQUNuQixDQUFDO0lBQ0YsTUFBTSxFQUFFLGFBQUs7U0FDVixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxVQUFVO0tBQ3JCLENBQUM7U0FDRCxRQUFRLEVBQUU7SUFDYixRQUFRLEVBQUUsYUFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUU7UUFDcEMsUUFBUSxFQUFFLFFBQVE7S0FDbkIsQ0FBQztDQUNILENBQUM7S0FDRCxRQUFRLENBQUM7SUFDUixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDbkIsQ0FBQztLQUNELE1BQU0sQ0FBQztJQUNOO1FBQ0UsSUFBSSxFQUFFLGNBQWM7UUFDcEIsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDdEIsR0FBRyxPQUFPLENBQUMsTUFBTSxhQUFhLE9BQU8sQ0FBQyxNQUFNLE9BQU87S0FDdEQ7Q0FDRixDQUFDLENBQUM7QUFFTCxrQkFBZSxNQUFNLENBQUMifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const review_1 = __importDefault(require("./models/review"));
|
|
8
|
+
const review_media_1 = __importDefault(require("./models/review-media"));
|
|
9
|
+
class ProductReviewModuleService extends (0, utils_1.MedusaService)({
|
|
10
|
+
Review: review_1.default,
|
|
11
|
+
ReviewMedia: review_media_1.default,
|
|
12
|
+
}) {
|
|
13
|
+
}
|
|
14
|
+
exports.default = ProductReviewModuleService;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Byb2R1Y3QtcmV2aWV3L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBMEQ7QUFDMUQsNkRBQXFDO0FBQ3JDLHlFQUFnRDtBQUVoRCxNQUFNLDBCQUEyQixTQUFRLElBQUEscUJBQWEsRUFBQztJQUNyRCxNQUFNLEVBQU4sZ0JBQU07SUFDTixXQUFXLEVBQVgsc0JBQVc7Q0FDWixDQUFDO0NBQUc7QUFFTCxrQkFBZSwwQkFBMEIsQ0FBQyJ9
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createReviewWorkflow = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const product_review_1 = require("../../modules/product-review");
|
|
7
|
+
const createReviewStep = (0, workflows_sdk_1.createStep)("create-review", async (input, { container }) => {
|
|
8
|
+
// check valid product
|
|
9
|
+
const productService = container.resolve(utils_1.Modules.PRODUCT);
|
|
10
|
+
const product = await productService.retrieveProduct(input.product_id);
|
|
11
|
+
if (!product) {
|
|
12
|
+
throw new Error("Product not found");
|
|
13
|
+
}
|
|
14
|
+
const reviewModuleService = container.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
15
|
+
const { medias, ...reviewData } = input;
|
|
16
|
+
if (!reviewData.parent_id && !reviewData.rating) {
|
|
17
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "if it's a review, rating is required or if it's a reply, parent_id is required");
|
|
18
|
+
}
|
|
19
|
+
if (reviewData.parent_id) {
|
|
20
|
+
// auto throw error if parent review not found
|
|
21
|
+
const parentReview = await reviewModuleService.retrieveReview(reviewData.parent_id);
|
|
22
|
+
if (parentReview.product_id !== reviewData.product_id) {
|
|
23
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Parent review and review must be for the same product");
|
|
24
|
+
}
|
|
25
|
+
if (parentReview.parent_id) {
|
|
26
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Max depth of replies is 1");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const review = await reviewModuleService.createReviews(reviewData);
|
|
30
|
+
try {
|
|
31
|
+
await reviewModuleService.createReviewMedias(medias.map((media) => ({
|
|
32
|
+
review_id: review.id,
|
|
33
|
+
fileUrl: media.fileUrl,
|
|
34
|
+
fileId: media.fileId,
|
|
35
|
+
mimeType: media.mimeType,
|
|
36
|
+
})));
|
|
37
|
+
return new workflows_sdk_1.StepResponse(review, review.id);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
await reviewModuleService.deleteReviewMedias(medias.map((media) => media.fileId));
|
|
41
|
+
if (review.id) {
|
|
42
|
+
await reviewModuleService.deleteReviews(review.id);
|
|
43
|
+
}
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}, async (reviewId, { container }) => {
|
|
47
|
+
if (!reviewId) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const reviewModuleService = container.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
51
|
+
await reviewModuleService.deleteReviews(reviewId);
|
|
52
|
+
});
|
|
53
|
+
exports.createReviewWorkflow = (0, workflows_sdk_1.createWorkflow)("create-review", (input) => {
|
|
54
|
+
// Create the review
|
|
55
|
+
const review = createReviewStep(input);
|
|
56
|
+
return new workflows_sdk_1.WorkflowResponse({
|
|
57
|
+
review,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUmV2aWV3V29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3Jldmlldy9jcmVhdGVSZXZpZXdXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBaUU7QUFDakUscUVBSzJDO0FBQzNDLGlFQUFxRTtBQW1CckUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2pDLGVBQWUsRUFDZixLQUFLLEVBQUUsS0FBd0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDaEQsc0JBQXNCO0lBQ3RCLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNLG1CQUFtQixHQUErQixTQUFTLENBQUMsT0FBTyxDQUN2RSxzQ0FBcUIsQ0FDdEIsQ0FBQztJQUVGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsZ0ZBQWdGLENBQ2pGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekIsOENBQThDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsY0FBYyxDQUMzRCxVQUFVLENBQUMsU0FBUyxDQUNyQixDQUFDO1FBRUYsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix1REFBdUQsQ0FDeEQsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwyQkFBMkIsQ0FDNUIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDekIsQ0FBQyxDQUFDLENBQ0osQ0FBQztRQUVGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLG1CQUFtQixDQUFDLGtCQUFrQixDQUMxQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQ3BDLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNkLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxFQUNELEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2hDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBK0IsU0FBUyxDQUFDLE9BQU8sQ0FDdkUsc0NBQXFCLENBQ3RCLENBQUM7SUFFRixNQUFNLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQ0YsQ0FBQztBQUVXLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSw4QkFBYyxFQUNoRCxlQUFlLEVBQ2YsQ0FBQyxLQUF3QixFQUFFLEVBQUU7SUFDM0Isb0JBQW9CO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQztRQUMxQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUNGLENBQUMifQ==
|