medusa-plugin-ratings 0.1.0
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/medusa-config.d.ts +1 -0
- package/.medusa/server/medusa-config.js +23 -0
- package/.medusa/server/src/admin/index.js +490 -0
- package/.medusa/server/src/admin/index.mjs +489 -0
- package/.medusa/server/src/api/admin/reviews/[id]/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/reviews/[id]/route.js +48 -0
- package/.medusa/server/src/api/admin/reviews/approve/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/reviews/approve/route.js +25 -0
- package/.medusa/server/src/api/admin/reviews/reject/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/reviews/reject/route.js +25 -0
- package/.medusa/server/src/api/admin/reviews/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/reviews/route.js +34 -0
- package/.medusa/server/src/api/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/middlewares.js +84 -0
- package/.medusa/server/src/api/store/reviews/[productId]/route.d.ts +4 -0
- package/.medusa/server/src/api/store/reviews/[productId]/route.js +85 -0
- package/.medusa/server/src/api/validators.d.ts +144 -0
- package/.medusa/server/src/api/validators.js +38 -0
- package/.medusa/server/src/modules/review/index.d.ts +36 -0
- package/.medusa/server/src/modules/review/index.js +25 -0
- package/.medusa/server/src/modules/review/migrations/Migration20260409183947.d.ts +5 -0
- package/.medusa/server/src/modules/review/migrations/Migration20260409183947.js +22 -0
- package/.medusa/server/src/modules/review/models/review-activity.d.ts +27 -0
- package/.medusa/server/src/modules/review/models/review-activity.js +21 -0
- package/.medusa/server/src/modules/review/models/review.d.ts +26 -0
- package/.medusa/server/src/modules/review/models/review.js +30 -0
- package/.medusa/server/src/modules/review/service.d.ts +139 -0
- package/.medusa/server/src/modules/review/service.js +46 -0
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/package.json +88 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
const validators_1 = require("./validators");
|
|
5
|
+
exports.default = (0, http_1.defineMiddlewares)([
|
|
6
|
+
{
|
|
7
|
+
matcher: '/admin/reviews',
|
|
8
|
+
method: ['GET'],
|
|
9
|
+
middlewares: [
|
|
10
|
+
(0, http_1.validateAndTransformQuery)(validators_1.AdminGetReviews, {
|
|
11
|
+
defaults: [
|
|
12
|
+
'id', 'status', 'rating', 'title', 'author_name', 'author_email',
|
|
13
|
+
'product_id', 'order_id', 'customer_id', 'created_at', 'updated_at'
|
|
14
|
+
],
|
|
15
|
+
isList: true,
|
|
16
|
+
defaultLimit: 20
|
|
17
|
+
})
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
matcher: '/admin/reviews',
|
|
22
|
+
method: ['DELETE'],
|
|
23
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminDeleteReviews)]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
matcher: '/admin/reviews/:id',
|
|
27
|
+
method: ['GET'],
|
|
28
|
+
middlewares: [
|
|
29
|
+
(0, http_1.validateAndTransformQuery)(validators_1.AdminGetReview, {
|
|
30
|
+
defaults: [
|
|
31
|
+
'id', 'status', 'rating', 'title', 'body', 'author_name', 'author_email',
|
|
32
|
+
'product_id', 'order_id', 'customer_id', 'metadata',
|
|
33
|
+
'created_at', 'updated_at', 'activity.*'
|
|
34
|
+
],
|
|
35
|
+
isList: false
|
|
36
|
+
})
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
matcher: '/admin/reviews/:id',
|
|
41
|
+
method: ['POST'],
|
|
42
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminUpdateReview)]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
matcher: '/admin/reviews/:id',
|
|
46
|
+
method: ['DELETE'],
|
|
47
|
+
middlewares: []
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
matcher: '/admin/reviews/approve',
|
|
51
|
+
method: ['POST'],
|
|
52
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminApproveReviewAction)]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
matcher: '/admin/reviews/reject',
|
|
56
|
+
method: ['POST'],
|
|
57
|
+
middlewares: [(0, http_1.validateAndTransformBody)(validators_1.AdminRejectReviewAction)]
|
|
58
|
+
},
|
|
59
|
+
// ── Store ────────────────────────────────────────────────────────────────
|
|
60
|
+
{
|
|
61
|
+
matcher: '/store/reviews/:productId',
|
|
62
|
+
method: ['POST'],
|
|
63
|
+
middlewares: [
|
|
64
|
+
(0, http_1.authenticate)('customer', 'bearer'),
|
|
65
|
+
(0, http_1.validateAndTransformBody)(validators_1.StoreCreateReview)
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
matcher: '/store/reviews/:productId',
|
|
70
|
+
method: ['GET'],
|
|
71
|
+
middlewares: [
|
|
72
|
+
(0, http_1.authenticate)('customer', 'bearer', { allowUnauthenticated: true }),
|
|
73
|
+
(0, http_1.validateAndTransformQuery)(validators_1.StoreGetReviews, {
|
|
74
|
+
defaults: [
|
|
75
|
+
'id', 'status', 'rating', 'title', 'body', 'author_name',
|
|
76
|
+
'product_id', 'customer_id', 'created_at'
|
|
77
|
+
],
|
|
78
|
+
isList: true,
|
|
79
|
+
defaultLimit: 20
|
|
80
|
+
})
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
]);
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQStIO0FBQy9ILDZDQVNxQjtBQUVyQixrQkFBZSxJQUFBLHdCQUFpQixFQUFDO0lBQ2hDO1FBQ0MsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZixXQUFXLEVBQUU7WUFDWixJQUFBLGdDQUF5QixFQUFDLDRCQUFlLEVBQUU7Z0JBQzFDLFFBQVEsRUFBRTtvQkFDVCxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWM7b0JBQ2hFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZO2lCQUNuRTtnQkFDRCxNQUFNLEVBQUUsSUFBSTtnQkFDWixZQUFZLEVBQUUsRUFBRTthQUNoQixDQUFDO1NBQ0Y7S0FDRDtJQUNEO1FBQ0MsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDbEIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQywrQkFBa0IsQ0FBQyxDQUFDO0tBQzNEO0lBQ0Q7UUFDQyxPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNmLFdBQVcsRUFBRTtZQUNaLElBQUEsZ0NBQXlCLEVBQUMsMkJBQWMsRUFBRTtnQkFDekMsUUFBUSxFQUFFO29CQUNULElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGNBQWM7b0JBQ3hFLFlBQVksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVU7b0JBQ25ELFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWTtpQkFDeEM7Z0JBQ0QsTUFBTSxFQUFFLEtBQUs7YUFDYixDQUFDO1NBQ0Y7S0FDRDtJQUNEO1FBQ0MsT0FBTyxFQUFFLG9CQUFvQjtRQUM3QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw4QkFBaUIsQ0FBQyxDQUFDO0tBQzFEO0lBQ0Q7UUFDQyxPQUFPLEVBQUUsb0JBQW9CO1FBQzdCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNsQixXQUFXLEVBQUUsRUFBRTtLQUNmO0lBQ0Q7UUFDQyxPQUFPLEVBQUUsd0JBQXdCO1FBQ2pDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNoQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHFDQUF3QixDQUFDLENBQUM7S0FDakU7SUFDRDtRQUNDLE9BQU8sRUFBRSx1QkFBdUI7UUFDaEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsb0NBQXVCLENBQUMsQ0FBQztLQUNoRTtJQUNELDRFQUE0RTtJQUM1RTtRQUNDLE9BQU8sRUFBRSwyQkFBMkI7UUFDcEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2hCLFdBQVcsRUFBRTtZQUNaLElBQUEsbUJBQVksRUFBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO1lBQ2xDLElBQUEsK0JBQXdCLEVBQUMsOEJBQWlCLENBQUM7U0FDM0M7S0FDRDtJQUNEO1FBQ0MsT0FBTyxFQUFFLDJCQUEyQjtRQUNwQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDZixXQUFXLEVBQUU7WUFDWixJQUFBLG1CQUFZLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xFLElBQUEsZ0NBQXlCLEVBQUMsNEJBQWUsRUFBRTtnQkFDMUMsUUFBUSxFQUFFO29CQUNULElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYTtvQkFDeEQsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZO2lCQUN6QztnQkFDRCxNQUFNLEVBQUUsSUFBSTtnQkFDWixZQUFZLEVBQUUsRUFBRTthQUNoQixDQUFDO1NBQ0Y7S0FDRDtDQUNELENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AuthenticatedMedusaRequest, MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
|
|
2
|
+
import { StoreCreateReviewType, StoreGetReviewsType } from '../../../validators';
|
|
3
|
+
export declare const GET: (req: MedusaRequest<StoreGetReviewsType>, res: MedusaResponse) => Promise<void>;
|
|
4
|
+
export declare const POST: (req: AuthenticatedMedusaRequest<StoreCreateReviewType>, res: MedusaResponse) => Promise<void>;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const review_1 = require("../../../../modules/review");
|
|
6
|
+
const review_2 = require("../../../../modules/review/models/review");
|
|
7
|
+
const TTL = 300; // 5 minutes
|
|
8
|
+
const buildCacheKey = (productId) => `store:reviews:${productId}`;
|
|
9
|
+
function resolveCaching(req) {
|
|
10
|
+
try {
|
|
11
|
+
return req.scope.resolve(utils_1.Modules.CACHING) ?? null;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const GET = async (req, res) => {
|
|
18
|
+
const { productId } = req.params;
|
|
19
|
+
const caching = resolveCaching(req);
|
|
20
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
21
|
+
const customerId = req.auth_context?.actor_id;
|
|
22
|
+
const cacheKey = buildCacheKey(productId);
|
|
23
|
+
let approvedReviews;
|
|
24
|
+
let approvedCount;
|
|
25
|
+
const cached = caching ? await caching.get({ key: cacheKey }) : null;
|
|
26
|
+
if (cached) {
|
|
27
|
+
approvedReviews = cached.reviews;
|
|
28
|
+
approvedCount = cached.count;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const { data, metadata } = await query.graph({
|
|
32
|
+
entity: 'review',
|
|
33
|
+
fields: req.queryConfig.fields,
|
|
34
|
+
filters: { product_id: productId, status: review_2.ReviewStatus.APPROVED }
|
|
35
|
+
});
|
|
36
|
+
approvedReviews = data;
|
|
37
|
+
approvedCount = metadata?.count ?? data.length;
|
|
38
|
+
if (caching) {
|
|
39
|
+
await caching.set({
|
|
40
|
+
key: cacheKey,
|
|
41
|
+
data: { reviews: approvedReviews, count: approvedCount },
|
|
42
|
+
ttl: TTL
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// If authenticated, also fetch the user's own pending reviews (always fresh)
|
|
47
|
+
if (customerId) {
|
|
48
|
+
const { data: pendingReviews } = await query.graph({
|
|
49
|
+
entity: 'review',
|
|
50
|
+
fields: req.queryConfig.fields,
|
|
51
|
+
filters: {
|
|
52
|
+
product_id: productId,
|
|
53
|
+
customer_id: customerId,
|
|
54
|
+
status: review_2.ReviewStatus.PENDING
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (pendingReviews.length > 0) {
|
|
58
|
+
res.json({
|
|
59
|
+
reviews: [...pendingReviews, ...approvedReviews],
|
|
60
|
+
count: approvedCount + pendingReviews.length
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
res.json({ reviews: approvedReviews, count: approvedCount });
|
|
66
|
+
};
|
|
67
|
+
exports.GET = GET;
|
|
68
|
+
const POST = async (req, res) => {
|
|
69
|
+
const { productId } = req.params;
|
|
70
|
+
const customerId = req.auth_context.actor_id;
|
|
71
|
+
const caching = resolveCaching(req);
|
|
72
|
+
const reviewService = req.scope.resolve(review_1.REVIEW_MODULE);
|
|
73
|
+
const review = await reviewService.createReviews({
|
|
74
|
+
...req.validatedBody,
|
|
75
|
+
product_id: productId,
|
|
76
|
+
customer_id: customerId,
|
|
77
|
+
status: reviewService.getOptions().defaultStatus
|
|
78
|
+
});
|
|
79
|
+
if (caching) {
|
|
80
|
+
await caching.clear({ key: buildCacheKey(productId) });
|
|
81
|
+
}
|
|
82
|
+
res.status(201).json({ review });
|
|
83
|
+
};
|
|
84
|
+
exports.POST = POST;
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Jldmlld3MvW3Byb2R1Y3RJZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQThFO0FBRTlFLHVEQUEwRDtBQUUxRCxxRUFBdUU7QUFHdkUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFBLENBQUMsWUFBWTtBQUM1QixNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixTQUFTLEVBQUUsQ0FBQTtBQUV6RSxTQUFTLGNBQWMsQ0FBQyxHQUFrQjtJQUN6QyxJQUFJLENBQUM7UUFDSixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUE7SUFDbEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNSLE9BQU8sSUFBSSxDQUFBO0lBQ1osQ0FBQztBQUNGLENBQUM7QUFFTSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3ZCLEdBQXVDLEVBQ3ZDLEdBQW1CLEVBQ2xCLEVBQUU7SUFDSCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxVQUFVLEdBQUksR0FBa0MsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFBO0lBRTdFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUN6QyxJQUFJLGVBQXNCLENBQUE7SUFDMUIsSUFBSSxhQUFxQixDQUFBO0lBRXpCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMs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
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { z } from '@medusajs/framework/zod';
|
|
2
|
+
export type AdminGetReviewsType = z.infer<typeof AdminGetReviews>;
|
|
3
|
+
export declare const AdminGetReviews: z.ZodObject<{
|
|
4
|
+
fields: z.ZodOptional<z.ZodString>;
|
|
5
|
+
} & {
|
|
6
|
+
offset: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
7
|
+
limit: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
8
|
+
order: z.ZodOptional<z.ZodString> | z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
9
|
+
with_deleted: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
|
|
10
|
+
} & {
|
|
11
|
+
q: z.ZodOptional<z.ZodString>;
|
|
12
|
+
status: z.ZodOptional<z.ZodEnum<["pending", "approved", "rejected"]>>;
|
|
13
|
+
product_id: z.ZodOptional<z.ZodString>;
|
|
14
|
+
customer_id: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
limit: number;
|
|
17
|
+
offset: number;
|
|
18
|
+
q?: string | undefined;
|
|
19
|
+
status?: "pending" | "approved" | "rejected" | undefined;
|
|
20
|
+
product_id?: string | undefined;
|
|
21
|
+
customer_id?: string | undefined;
|
|
22
|
+
fields?: string | undefined;
|
|
23
|
+
order?: string | undefined;
|
|
24
|
+
with_deleted?: boolean | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
limit?: unknown;
|
|
27
|
+
offset?: unknown;
|
|
28
|
+
q?: string | undefined;
|
|
29
|
+
status?: "pending" | "approved" | "rejected" | undefined;
|
|
30
|
+
product_id?: string | undefined;
|
|
31
|
+
customer_id?: string | undefined;
|
|
32
|
+
fields?: string | undefined;
|
|
33
|
+
order?: string | undefined;
|
|
34
|
+
with_deleted?: unknown;
|
|
35
|
+
}>;
|
|
36
|
+
export type AdminGetReviewType = z.infer<typeof AdminGetReview>;
|
|
37
|
+
export declare const AdminGetReview: z.ZodObject<{
|
|
38
|
+
fields: z.ZodOptional<z.ZodString>;
|
|
39
|
+
} & {
|
|
40
|
+
offset: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
41
|
+
limit: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
42
|
+
order: z.ZodOptional<z.ZodString> | z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
43
|
+
with_deleted: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
offset: number;
|
|
46
|
+
limit: number;
|
|
47
|
+
order?: string | undefined;
|
|
48
|
+
fields?: string | undefined;
|
|
49
|
+
with_deleted?: boolean | undefined;
|
|
50
|
+
}, {
|
|
51
|
+
order?: string | undefined;
|
|
52
|
+
fields?: string | undefined;
|
|
53
|
+
offset?: unknown;
|
|
54
|
+
limit?: unknown;
|
|
55
|
+
with_deleted?: unknown;
|
|
56
|
+
}>;
|
|
57
|
+
export type AdminUpdateReviewType = z.infer<typeof AdminUpdateReview>;
|
|
58
|
+
export declare const AdminUpdateReview: z.ZodObject<{
|
|
59
|
+
status: z.ZodOptional<z.ZodEnum<["pending", "approved", "rejected"]>>;
|
|
60
|
+
title: z.ZodOptional<z.ZodString>;
|
|
61
|
+
body: z.ZodOptional<z.ZodString>;
|
|
62
|
+
rating: z.ZodOptional<z.ZodNumber>;
|
|
63
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
64
|
+
}, "strip", z.ZodTypeAny, {
|
|
65
|
+
status?: "pending" | "approved" | "rejected" | undefined;
|
|
66
|
+
title?: string | undefined;
|
|
67
|
+
body?: string | undefined;
|
|
68
|
+
rating?: number | undefined;
|
|
69
|
+
metadata?: Record<string, unknown> | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
status?: "pending" | "approved" | "rejected" | undefined;
|
|
72
|
+
title?: string | undefined;
|
|
73
|
+
body?: string | undefined;
|
|
74
|
+
rating?: number | undefined;
|
|
75
|
+
metadata?: Record<string, unknown> | undefined;
|
|
76
|
+
}>;
|
|
77
|
+
export type AdminDeleteReviewsType = z.infer<typeof AdminDeleteReviews>;
|
|
78
|
+
export declare const AdminDeleteReviews: z.ZodObject<{
|
|
79
|
+
ids: z.ZodArray<z.ZodString, "many">;
|
|
80
|
+
}, "strip", z.ZodTypeAny, {
|
|
81
|
+
ids: string[];
|
|
82
|
+
}, {
|
|
83
|
+
ids: string[];
|
|
84
|
+
}>;
|
|
85
|
+
export type AdminApproveReviewActionType = z.infer<typeof AdminApproveReviewAction>;
|
|
86
|
+
export declare const AdminApproveReviewAction: z.ZodObject<{
|
|
87
|
+
ids: z.ZodArray<z.ZodString, "many">;
|
|
88
|
+
}, "strip", z.ZodTypeAny, {
|
|
89
|
+
ids: string[];
|
|
90
|
+
}, {
|
|
91
|
+
ids: string[];
|
|
92
|
+
}>;
|
|
93
|
+
export type AdminRejectReviewActionType = z.infer<typeof AdminRejectReviewAction>;
|
|
94
|
+
export declare const AdminRejectReviewAction: z.ZodObject<{
|
|
95
|
+
ids: z.ZodArray<z.ZodString, "many">;
|
|
96
|
+
}, "strip", z.ZodTypeAny, {
|
|
97
|
+
ids: string[];
|
|
98
|
+
}, {
|
|
99
|
+
ids: string[];
|
|
100
|
+
}>;
|
|
101
|
+
export type StoreCreateReviewType = z.infer<typeof StoreCreateReview>;
|
|
102
|
+
export declare const StoreCreateReview: z.ZodObject<{
|
|
103
|
+
rating: z.ZodNumber;
|
|
104
|
+
title: z.ZodOptional<z.ZodString>;
|
|
105
|
+
body: z.ZodString;
|
|
106
|
+
author_name: z.ZodString;
|
|
107
|
+
author_email: z.ZodOptional<z.ZodString>;
|
|
108
|
+
order_id: z.ZodOptional<z.ZodString>;
|
|
109
|
+
}, "strip", z.ZodTypeAny, {
|
|
110
|
+
body: string;
|
|
111
|
+
rating: number;
|
|
112
|
+
author_name: string;
|
|
113
|
+
title?: string | undefined;
|
|
114
|
+
author_email?: string | undefined;
|
|
115
|
+
order_id?: string | undefined;
|
|
116
|
+
}, {
|
|
117
|
+
body: string;
|
|
118
|
+
rating: number;
|
|
119
|
+
author_name: string;
|
|
120
|
+
title?: string | undefined;
|
|
121
|
+
author_email?: string | undefined;
|
|
122
|
+
order_id?: string | undefined;
|
|
123
|
+
}>;
|
|
124
|
+
export type StoreGetReviewsType = z.infer<typeof StoreGetReviews>;
|
|
125
|
+
export declare const StoreGetReviews: z.ZodObject<{
|
|
126
|
+
fields: z.ZodOptional<z.ZodString>;
|
|
127
|
+
} & {
|
|
128
|
+
offset: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
129
|
+
limit: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodNumber>>, number, unknown>;
|
|
130
|
+
order: z.ZodOptional<z.ZodString> | z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
131
|
+
with_deleted: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, unknown>;
|
|
132
|
+
}, "strip", z.ZodTypeAny, {
|
|
133
|
+
offset: number;
|
|
134
|
+
limit: number;
|
|
135
|
+
order?: string | undefined;
|
|
136
|
+
fields?: string | undefined;
|
|
137
|
+
with_deleted?: boolean | undefined;
|
|
138
|
+
}, {
|
|
139
|
+
order?: string | undefined;
|
|
140
|
+
fields?: string | undefined;
|
|
141
|
+
offset?: unknown;
|
|
142
|
+
limit?: unknown;
|
|
143
|
+
with_deleted?: unknown;
|
|
144
|
+
}>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoreGetReviews = exports.StoreCreateReview = exports.AdminRejectReviewAction = exports.AdminApproveReviewAction = exports.AdminDeleteReviews = exports.AdminUpdateReview = exports.AdminGetReview = exports.AdminGetReviews = void 0;
|
|
4
|
+
const zod_1 = require("@medusajs/framework/zod");
|
|
5
|
+
const validators_1 = require("@medusajs/medusa/api/utils/validators");
|
|
6
|
+
exports.AdminGetReviews = (0, validators_1.createFindParams)({ limit: 20, offset: 0 }).extend({
|
|
7
|
+
q: zod_1.z.string().optional(),
|
|
8
|
+
status: zod_1.z.enum(['pending', 'approved', 'rejected']).optional(),
|
|
9
|
+
product_id: zod_1.z.string().optional(),
|
|
10
|
+
customer_id: zod_1.z.string().optional()
|
|
11
|
+
});
|
|
12
|
+
exports.AdminGetReview = (0, validators_1.createFindParams)();
|
|
13
|
+
exports.AdminUpdateReview = zod_1.z.object({
|
|
14
|
+
status: zod_1.z.enum(['pending', 'approved', 'rejected']).optional(),
|
|
15
|
+
title: zod_1.z.string().optional(),
|
|
16
|
+
body: zod_1.z.string().optional(),
|
|
17
|
+
rating: zod_1.z.number().min(1).max(5).optional(),
|
|
18
|
+
metadata: zod_1.z.record(zod_1.z.unknown()).optional()
|
|
19
|
+
});
|
|
20
|
+
exports.AdminDeleteReviews = zod_1.z.object({
|
|
21
|
+
ids: zod_1.z.array(zod_1.z.string()).min(1)
|
|
22
|
+
});
|
|
23
|
+
exports.AdminApproveReviewAction = zod_1.z.object({
|
|
24
|
+
ids: zod_1.z.array(zod_1.z.string()).min(1)
|
|
25
|
+
});
|
|
26
|
+
exports.AdminRejectReviewAction = zod_1.z.object({
|
|
27
|
+
ids: zod_1.z.array(zod_1.z.string()).min(1)
|
|
28
|
+
});
|
|
29
|
+
exports.StoreCreateReview = zod_1.z.object({
|
|
30
|
+
rating: zod_1.z.number().min(1).max(5),
|
|
31
|
+
title: zod_1.z.string().optional(),
|
|
32
|
+
body: zod_1.z.string().min(1, 'Review body is required'),
|
|
33
|
+
author_name: zod_1.z.string().min(1, 'Author name is required'),
|
|
34
|
+
author_email: zod_1.z.string().email().optional(),
|
|
35
|
+
order_id: zod_1.z.string().optional()
|
|
36
|
+
});
|
|
37
|
+
exports.StoreGetReviews = (0, validators_1.createFindParams)({ limit: 20, offset: 0 });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFDM0Msc0VBQXdFO0FBRzNELFFBQUEsZUFBZSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRixDQUFDLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QixNQUFNLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDOUQsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQyxDQUFBO0FBR1csUUFBQSxjQUFjLEdBQUcsSUFBQSw2QkFBZ0IsR0FBRSxDQUFBO0FBR25DLFFBQUEsaUJBQWlCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxNQUFNLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDOUQsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMzQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDMUMsQ0FBQyxDQUFBO0FBR1csUUFBQSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLEdBQUcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQyxDQUFBO0FBR1csUUFBQSx3QkFBd0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hELEdBQUcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQyxDQUFBO0FBR1csUUFBQSx1QkFBdUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQy9DLEdBQUcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQyxDQUFBO0FBS1csUUFBQSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0lBQ2xELFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztJQUN6RCxZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQixDQUFDLENBQUE7QUFHVyxRQUFBLGVBQWUsR0FBRyxJQUFBLDZCQUFnQixFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ReviewService } from './service';
|
|
2
|
+
export declare const REVIEW_MODULE = "review";
|
|
3
|
+
declare const _default: import("@medusajs/types").ModuleExports<typeof ReviewService> & {
|
|
4
|
+
linkable: {
|
|
5
|
+
readonly review: {
|
|
6
|
+
id: {
|
|
7
|
+
serviceName: "review";
|
|
8
|
+
field: "review";
|
|
9
|
+
linkable: "review_id";
|
|
10
|
+
primaryKey: "id";
|
|
11
|
+
};
|
|
12
|
+
toJSON: () => {
|
|
13
|
+
serviceName: "review";
|
|
14
|
+
field: "review";
|
|
15
|
+
linkable: "review_id";
|
|
16
|
+
primaryKey: "id";
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
readonly reviewActivity: {
|
|
20
|
+
id: {
|
|
21
|
+
serviceName: "review";
|
|
22
|
+
field: "reviewActivity";
|
|
23
|
+
linkable: "review_activity_id";
|
|
24
|
+
primaryKey: "id";
|
|
25
|
+
};
|
|
26
|
+
toJSON: () => {
|
|
27
|
+
serviceName: "review";
|
|
28
|
+
field: "reviewActivity";
|
|
29
|
+
linkable: "review_activity_id";
|
|
30
|
+
primaryKey: "id";
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export default _default;
|
|
36
|
+
export * from './service';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.REVIEW_MODULE = void 0;
|
|
18
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
19
|
+
const service_1 = require("./service");
|
|
20
|
+
exports.REVIEW_MODULE = 'review';
|
|
21
|
+
exports.default = (0, utils_1.Module)(exports.REVIEW_MODULE, {
|
|
22
|
+
service: service_1.ReviewService
|
|
23
|
+
});
|
|
24
|
+
__exportStar(require("./service"), exports);
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXZpZXcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsdUNBQXlDO0FBRTVCLFFBQUEsYUFBYSxHQUFHLFFBQVEsQ0FBQTtBQUVyQyxrQkFBZSxJQUFBLGNBQU0sRUFBQyxxQkFBYSxFQUFFO0lBQ3BDLE9BQU8sRUFBRSx1QkFBYTtDQUN0QixDQUFDLENBQUE7QUFFRiw0Q0FBeUIifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260409183947 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260409183947 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "review" ("id" text not null, "status" text check ("status" in ('pending', 'approved', 'rejected')) not null default 'pending', "rating" integer not null, "title" text null, "body" text not null, "author_name" text not null, "author_email" text null, "product_id" text null, "order_id" text null, "customer_id" text null, "metadata" jsonb 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"));`);
|
|
8
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_deleted_at" ON "review" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
9
|
+
this.addSql(`create table if not exists "review_activity" ("id" text not null, "type" text check ("type" in ('submit', 'approve', 'reject', 'note')) not null default 'note', "user_id" text not null, "note" text null, "metadata" jsonb 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_activity_pkey" primary key ("id"));`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_activity_review_id" ON "review_activity" ("review_id") WHERE deleted_at IS NULL;`);
|
|
11
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_review_activity_deleted_at" ON "review_activity" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
12
|
+
this.addSql(`alter table if exists "review_activity" drop constraint if exists "review_activity_review_id_foreign";`);
|
|
13
|
+
this.addSql(`alter table if exists "review_activity" add constraint "review_activity_review_id_foreign" foreign key ("review_id") references "review" ("id") on update cascade on delete cascade;`);
|
|
14
|
+
}
|
|
15
|
+
async down() {
|
|
16
|
+
this.addSql(`alter table if exists "review_activity" drop constraint if exists "review_activity_review_id_foreign";`);
|
|
17
|
+
this.addSql(`drop table if exists "review" cascade;`);
|
|
18
|
+
this.addSql(`drop table if exists "review_activity" cascade;`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.Migration20260409183947 = Migration20260409183947;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA0MDkxODM5NDcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZXZpZXcvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDQwOTE4Mzk0Ny50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsb2lCQUFvaUIsQ0FBQyxDQUFDO1FBQ2xqQixJQUFJLENBQUMsTUFBTSxDQUFDLHlHQUF5RyxDQUFDLENBQUM7UUFFdkgsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1YkFBdWIsQ0FBQyxDQUFDO1FBQ3JjLElBQUksQ0FBQyxNQUFNLENBQUMseUhBQXlILENBQUMsQ0FBQztRQUN2SSxJQUFJLENBQUMsTUFBTSxDQUFDLDJIQUEySCxDQUFDLENBQUM7UUFFekksSUFBSSxDQUFDLE1BQU0sQ0FBQyx3R0FBd0csQ0FBQyxDQUFDO1FBQ3RILElBQUksQ0FBQyxNQUFNLENBQUMsc0xBQXNMLENBQUMsQ0FBQztJQUN0TSxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3R0FBd0csQ0FBQyxDQUFDO1FBRXRILElBQUksQ0FBQyxNQUFNLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsTUFBTSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUVGO0FBdEJELDBEQXNCQyJ9
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare enum ReviewActivityType {
|
|
2
|
+
SUBMIT = "submit",
|
|
3
|
+
APPROVE = "approve",
|
|
4
|
+
REJECT = "reject",
|
|
5
|
+
NOTE = "note"
|
|
6
|
+
}
|
|
7
|
+
export declare const ReviewActivity: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
8
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
9
|
+
type: import("@medusajs/framework/utils").EnumProperty<typeof ReviewActivityType>;
|
|
10
|
+
user_id: import("@medusajs/framework/utils").TextProperty;
|
|
11
|
+
note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
|
|
13
|
+
review: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
14
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
15
|
+
status: import("@medusajs/framework/utils").EnumProperty<typeof import("./review").ReviewStatus>;
|
|
16
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
17
|
+
title: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
18
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
19
|
+
author_name: import("@medusajs/framework/utils").TextProperty;
|
|
20
|
+
author_email: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
21
|
+
product_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
22
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
23
|
+
customer_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
24
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
|
|
25
|
+
activity: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "review_activity">>;
|
|
26
|
+
}>, "review">, undefined>;
|
|
27
|
+
}>, "review_activity">;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReviewActivity = exports.ReviewActivityType = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const review_1 = require("./review");
|
|
6
|
+
var ReviewActivityType;
|
|
7
|
+
(function (ReviewActivityType) {
|
|
8
|
+
ReviewActivityType["SUBMIT"] = "submit";
|
|
9
|
+
ReviewActivityType["APPROVE"] = "approve";
|
|
10
|
+
ReviewActivityType["REJECT"] = "reject";
|
|
11
|
+
ReviewActivityType["NOTE"] = "note";
|
|
12
|
+
})(ReviewActivityType || (exports.ReviewActivityType = ReviewActivityType = {}));
|
|
13
|
+
exports.ReviewActivity = utils_1.model.define('review_activity', {
|
|
14
|
+
id: utils_1.model.id().primaryKey(),
|
|
15
|
+
type: utils_1.model.enum(ReviewActivityType).default(ReviewActivityType.NOTE),
|
|
16
|
+
user_id: utils_1.model.text(),
|
|
17
|
+
note: utils_1.model.text().nullable(),
|
|
18
|
+
metadata: utils_1.model.json().nullable(),
|
|
19
|
+
review: utils_1.model.belongsTo(() => review_1.Review, { mappedBy: 'activity' })
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LWFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcmV2aWV3L21vZGVscy9yZXZpZXctYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBQ2pELHFDQUFpQztBQUVqQyxJQUFZLGtCQUtYO0FBTEQsV0FBWSxrQkFBa0I7SUFDN0IsdUNBQWlCLENBQUE7SUFDakIseUNBQW1CLENBQUE7SUFDbkIsdUNBQWlCLENBQUE7SUFDakIsbUNBQWEsQ0FBQTtBQUNkLENBQUMsRUFMVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQUs3QjtBQUVZLFFBQUEsY0FBYyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7SUFDN0QsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ3JFLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3JCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLE1BQU0sRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztDQUMvRCxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare enum ReviewStatus {
|
|
2
|
+
PENDING = "pending",
|
|
3
|
+
APPROVED = "approved",
|
|
4
|
+
REJECTED = "rejected"
|
|
5
|
+
}
|
|
6
|
+
export declare const Review: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
7
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
8
|
+
status: import("@medusajs/framework/utils").EnumProperty<typeof ReviewStatus>;
|
|
9
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
10
|
+
title: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
11
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
12
|
+
author_name: import("@medusajs/framework/utils").TextProperty;
|
|
13
|
+
author_email: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
14
|
+
product_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
15
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
16
|
+
customer_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
17
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
|
|
18
|
+
activity: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
19
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
20
|
+
type: import("@medusajs/framework/utils").EnumProperty<typeof import("./review-activity").ReviewActivityType>;
|
|
21
|
+
user_id: import("@medusajs/framework/utils").TextProperty;
|
|
22
|
+
note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
23
|
+
metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
|
|
24
|
+
review: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "review">, undefined>;
|
|
25
|
+
}>, "review_activity">>;
|
|
26
|
+
}>, "review">;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Review = exports.ReviewStatus = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const review_activity_1 = require("./review-activity");
|
|
6
|
+
var ReviewStatus;
|
|
7
|
+
(function (ReviewStatus) {
|
|
8
|
+
ReviewStatus["PENDING"] = "pending";
|
|
9
|
+
ReviewStatus["APPROVED"] = "approved";
|
|
10
|
+
ReviewStatus["REJECTED"] = "rejected";
|
|
11
|
+
})(ReviewStatus || (exports.ReviewStatus = ReviewStatus = {}));
|
|
12
|
+
exports.Review = utils_1.model
|
|
13
|
+
.define('review', {
|
|
14
|
+
id: utils_1.model.id().primaryKey(),
|
|
15
|
+
status: utils_1.model.enum(ReviewStatus).default(ReviewStatus.PENDING),
|
|
16
|
+
rating: utils_1.model.number(),
|
|
17
|
+
title: utils_1.model.text().nullable(),
|
|
18
|
+
body: utils_1.model.text(),
|
|
19
|
+
author_name: utils_1.model.text(),
|
|
20
|
+
author_email: utils_1.model.text().nullable(),
|
|
21
|
+
product_id: utils_1.model.text().nullable(),
|
|
22
|
+
order_id: utils_1.model.text().nullable(),
|
|
23
|
+
customer_id: utils_1.model.text().nullable(),
|
|
24
|
+
metadata: utils_1.model.json().nullable(),
|
|
25
|
+
activity: utils_1.model.hasMany(() => review_activity_1.ReviewActivity, { mappedBy: 'review' })
|
|
26
|
+
})
|
|
27
|
+
.cascades({
|
|
28
|
+
delete: ['activity']
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcmV2aWV3L21vZGVscy9yZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBQ2pELHVEQUFrRDtBQUVsRCxJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdkIsbUNBQW1CLENBQUE7SUFDbkIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7QUFDdEIsQ0FBQyxFQUpXLFlBQVksNEJBQVosWUFBWSxRQUl2QjtBQUVZLFFBQUEsTUFBTSxHQUFHLGFBQUs7S0FDekIsTUFBTSxDQUFDLFFBQVEsRUFBRTtJQUNqQixFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUM5RCxNQUFNLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRTtJQUN0QixLQUFLLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixJQUFJLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNsQixXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUN6QixZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxRQUFRLEVBQUUsYUFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0NBQ3JFLENBQUM7S0FDRCxRQUFRLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUM7Q0FDcEIsQ0FBQyxDQUFBIn0=
|