Reviews
Product reviews is something that is a standard feature on THGs platform and comes with features like verified purchases, review moderation (before they are published on site), average rating and number of reviews at each score level.
Reviews can be accessed by querying a product:
query ProductReviews {
product(sku: 10530743, strict: false) {
sku
reviews {
total
averageScore
maxScore
count1Score
count2Score
count3Score
count4Score
count5Score
reviews(limit: 10) {
reviews {
id
title
authorName
verifiedPurchase
posted # Date posted
elements {
... on RatingReviewElement {
key
maxScore
score
}
... on TextReviewElement {
key
value
}
}
positiveVotes
negativeVotes
}
total
hasMore
}
}
}
}
Reviews can contain ratings for different qualities e.g. overall score, taste, effectiveness which are RatingReviewElement
s or can be purely written content which is TextReviewElement
.
Rating/Reporting a Review
Logged in customers can also rate the helpfulness of a review and can report reviews if they are inappropriate in any way.
Reviews store the positive and negative votes against them which can be displayed when rendering a review with positiveVotes
and negativeVotes
.
To rate or report a review, these authenticated mutations can be used:
mutation Report {
reportReview(input: {
sku: 10530743
reviewId: "480081"
})
}
mutation VoteUp {
voteReviewPositive(input: {
sku: 10530743
reviewId: "480081"
})
}
mutation VoteDown {
voteReviewNegative(input: {
sku: 10530743
reviewId: "480081"
})
}
Adding a Review
Similar to registration and other “forms”, the data submitted when creating a review can differ by SKU so is dynamic. This reuses the Form
object from other areas but means before submitting a review, the data that is required needs to be determined.
To do this, the form and fields should be queried for the SKU as below.
query ReviewForm {
product(sku: 11140463, strict: false) {
reviews {
newReviewForm {
fields {
name
type
validators {
name
argument
}
required
answerOptions {
optionKey
translation
}
offerOtherTextInput
defaultValue
}
}
}
}
}
Once the fields are known, a review can be submitted as below where the field names are the name field above, and the value is a text String (or optionKey if the option is a single selection option):
mutation AddReview {
addReview(
input: {
sku: 11140463
fields: [
{ name: "score", value: "5" }
{ name: "synopsis", value: "Product Tastes Great" }
{ name: "reviewContent", value: "Really enjoyed the product and is definitely worth while" }
{ name: "nickname", value: "James" }
{ name: "ageRange", value: "25-34" }
{ name: "gender", value: "Male" }
]
}
) {
error
fieldErrors {
fieldName
validators
requiredButNotProvided
invalidOption
}
}
}