UNPKG

@alphabite/medusa-reviews

Version:

Alphabite's Medusa Reviews Plugin

93 lines 7.57 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@medusajs/framework/utils"); const review_1 = __importDefault(require("./models/review")); const zod_1 = require("zod"); const optionsSchema = zod_1.z.object({ allowOnlyVerifiedPurchases: zod_1.z.boolean().default(false), allowMultipleReviewsPerProduct: zod_1.z.boolean().default(false), }); class ReviewModuleService extends (0, utils_1.MedusaService)({ Review: review_1.default, }) { static validateOptions(_options) { const parsed = optionsSchema.safeParse(_options); if (!parsed.success) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid options provided for WishlistModuleService: ${parsed.error.message}`); } } constructor({}, options) { super(...arguments); this._options = options || {}; } async getRatingAggregate(productId, sharedContext) { const { manager } = sharedContext || {}; const aggregate_counts = await manager?.transactional(async (manager) => { const reviews = (await manager.findAll(review_1.default, { where: { product_id: productId, status: "approved", }, // @ts-ignore fields: ["rating"], })); const total_count = reviews?.length; const average = total_count === 0 ? 0 : reviews.reduce((acc, review) => acc + (review?.rating || 0), 0) / total_count; const counts = Array.from({ length: 5 }, (_, i) => { const rating = i + 1; const count = reviews.filter((review) => review.rating === rating).length; return { rating, count, }; }).sort((a, b) => b.rating - a.rating); return { total_count, average: Number(average.toFixed(2)), counts, }; }); const average = Number((aggregate_counts?.average || 0).toFixed(2)); const total_count = Number(aggregate_counts?.total_count || 0); const counts = aggregate_counts?.counts || [ { rating: 5, count: 0 }, { rating: 4, count: 0 }, { rating: 3, count: 0 }, { rating: 2, count: 0 }, { rating: 1, count: 0 }, ]; return { average, total_count, product_id: productId, counts, }; } } __decorate([ (0, utils_1.InjectManager)(), __param(1, (0, utils_1.MedusaContext)()), __metadata("design:type", Function), __metadata("design:paramtypes", [String, Object]), __metadata("design:returntype", Promise) ], ReviewModuleService.prototype, "getRatingAggregate", null); exports.default = ReviewModuleService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Jldmlldy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBS21DO0FBQ25DLDZEQUErRDtBQUkvRCw2QkFBd0I7QUFFeEIsTUFBTSxhQUFhLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM3QiwwQkFBMEIsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN0RCw4QkFBOEIsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUMzRCxDQUFDLENBQUM7QUFjSCxNQUFNLG1CQUFvQixTQUFRLElBQUEscUJBQWEsRUFBQztJQUM5QyxNQUFNLEVBQU4sZ0JBQU07Q0FDUCxDQUFDO0lBR0EsTUFBTSxDQUFDLGVBQWUsQ0FDcEIsUUFBdUM7UUFFdkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVEQUF1RCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUM5RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLEVBQUUsRUFBRSxPQUFzQztRQUNwRCxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLGtCQUFrQixDQUN0QixTQUFpQixFQUNBLGFBQXNDO1FBRXZELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFh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