Skip to content

Reviews Domain

The reviews domain provides customer reviews, moderation, and aggregated ratings. It supports 1–5 star ratings, text reviews with validation, and a moderation workflow (pending → approved/rejected).

Terminal window
npx @backcap/cli add reviews

An individual review with rating, body, moderation status, and author reference.

import { Review } from "./domains/reviews/domain/entities/review.entity";
const review = Review.create({
id: crypto.randomUUID(),
resourceId: "product-42",
resourceType: "product",
authorId: "user-1",
rating: 4,
body: "Great product, fast shipping!",
status: "pending",
});
const approved = review.unwrap().approve();
  • Rating — validated 1–5 star integer
  • ReviewBody — text content with length limits
  • ModerationStatuspending, approved, rejected
  • AggregatedRating — average rating, count, and distribution
Use CaseDescription
SubmitReviewCreate a new review for a resource
ModerateReviewApprove or reject a pending review
GetReviewRetrieve a single review
ListReviewsQuery reviews with filters
GetAggregatedRatingGet average rating and distribution for a resource
  • IReviewRepositoryfindById, findByResource, save
import { createReviewsService } from "./domains/reviews/contracts";
const reviews = createReviewsService({
reviewRepository: myReviewRepo,
});
await reviews.submitReview({
resourceId: "product-42",
resourceType: "product",
authorId: "user-1",
rating: 5,
body: "Excellent quality!",
});
const stats = await reviews.getAggregatedRating({
resourceId: "product-42",
resourceType: "product",
});
// { average: 4.5, count: 12, distribution: { 1: 0, 2: 1, 3: 1, 4: 4, 5: 6 } }
EventPayload
ReviewSubmittedreviewId, resourceId, authorId, rating
ReviewModeratedreviewId, status, moderatorId