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.
Files changed (31) hide show
  1. package/.medusa/server/medusa-config.d.ts +1 -0
  2. package/.medusa/server/medusa-config.js +23 -0
  3. package/.medusa/server/src/admin/index.js +490 -0
  4. package/.medusa/server/src/admin/index.mjs +489 -0
  5. package/.medusa/server/src/api/admin/reviews/[id]/route.d.ts +5 -0
  6. package/.medusa/server/src/api/admin/reviews/[id]/route.js +48 -0
  7. package/.medusa/server/src/api/admin/reviews/approve/route.d.ts +3 -0
  8. package/.medusa/server/src/api/admin/reviews/approve/route.js +25 -0
  9. package/.medusa/server/src/api/admin/reviews/reject/route.d.ts +3 -0
  10. package/.medusa/server/src/api/admin/reviews/reject/route.js +25 -0
  11. package/.medusa/server/src/api/admin/reviews/route.d.ts +4 -0
  12. package/.medusa/server/src/api/admin/reviews/route.js +34 -0
  13. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  14. package/.medusa/server/src/api/middlewares.js +84 -0
  15. package/.medusa/server/src/api/store/reviews/[productId]/route.d.ts +4 -0
  16. package/.medusa/server/src/api/store/reviews/[productId]/route.js +85 -0
  17. package/.medusa/server/src/api/validators.d.ts +144 -0
  18. package/.medusa/server/src/api/validators.js +38 -0
  19. package/.medusa/server/src/modules/review/index.d.ts +36 -0
  20. package/.medusa/server/src/modules/review/index.js +25 -0
  21. package/.medusa/server/src/modules/review/migrations/Migration20260409183947.d.ts +5 -0
  22. package/.medusa/server/src/modules/review/migrations/Migration20260409183947.js +22 -0
  23. package/.medusa/server/src/modules/review/models/review-activity.d.ts +27 -0
  24. package/.medusa/server/src/modules/review/models/review-activity.js +21 -0
  25. package/.medusa/server/src/modules/review/models/review.d.ts +26 -0
  26. package/.medusa/server/src/modules/review/models/review.js +30 -0
  27. package/.medusa/server/src/modules/review/service.d.ts +139 -0
  28. package/.medusa/server/src/modules/review/service.js +46 -0
  29. package/LICENSE +21 -0
  30. package/README.md +51 -0
  31. 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,5 @@
1
+ import { Migration } from "@medusajs/framework/mikro-orm/migrations";
2
+ export declare class Migration20260409183947 extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
@@ -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=