335 lines
7.6 KiB
Go
335 lines
7.6 KiB
Go
package ozon
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
|
|
core "git.denco.store/fakz9/ozon-api-client"
|
|
)
|
|
|
|
type Reviews struct {
|
|
client *core.Client
|
|
}
|
|
|
|
type LeaveCommentParams struct {
|
|
// Review status update
|
|
MarkReviewAsProcesses bool `json:"mark_review_as_processed"`
|
|
|
|
// Identifier of the parent comment you're replying to
|
|
ParentCommentId string `json:"parent_comment_id"`
|
|
|
|
// Review identifier
|
|
ReviewId string `json:"review_id"`
|
|
|
|
// Comment text
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
type LeaveCommentResponse struct {
|
|
core.CommonResponse
|
|
|
|
// Comment identifier
|
|
CommentId string `json:"comment_id"`
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) LeaveComment(ctx context.Context, params *LeaveCommentParams) (*LeaveCommentResponse, error) {
|
|
url := "/v1/review/comment/create"
|
|
|
|
resp := &LeaveCommentResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type DeleteCommentParams struct {
|
|
// Comment identifier
|
|
CommentId string `json:"comment_id"`
|
|
}
|
|
|
|
type DeleteCommentResponse struct {
|
|
core.CommonResponse
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) DeleteComment(ctx context.Context, params *DeleteCommentParams) (*DeleteCommentResponse, error) {
|
|
url := "/v1/review/comment/delete"
|
|
|
|
resp := &DeleteCommentResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type ListCommentsParams struct {
|
|
// Limit of values in the response. Minimum is 20. Maximum is 100
|
|
Limit int32 `json:"limit"`
|
|
|
|
// Number of elements that is skipped in the response.
|
|
// For example, if offset = 10, the response starts with the 11th element found
|
|
Offset int32 `json:"offset"`
|
|
|
|
// Review identifier
|
|
ReviewId string `json:"review_id"`
|
|
|
|
// Sorting direction
|
|
SortDir Order `json:"sort_dir"`
|
|
}
|
|
|
|
type ListCommentsResponse struct {
|
|
core.CommonResponse
|
|
|
|
// Number of elements in the response
|
|
Offset int32 `json:"offset"`
|
|
|
|
// Comment details
|
|
Comments []Comment `json:"comments"`
|
|
}
|
|
|
|
type Comment struct {
|
|
// Comment identifier
|
|
Id string `json:"id"`
|
|
|
|
// true, if the comment was left by an official, false if a customer left it
|
|
IsOfficial bool `json:"is_official"`
|
|
|
|
// true, if the comment was left by a seller, false if a customer left it
|
|
IsOwner bool `json:"is_owner"`
|
|
|
|
// Identifier of the parent comment to reply to
|
|
ParentCommentId string `json:"parent_comment_id"`
|
|
|
|
// Date the comment was published
|
|
PublishedAt time.Time `json:"published_at"`
|
|
|
|
// Comment text
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
//
|
|
// Method returns information about comments on reviews that have passed moderation
|
|
func (c Reviews) ListComments(ctx context.Context, params *ListCommentsParams) (*ListCommentsResponse, error) {
|
|
url := "/v1/review/comment/list"
|
|
|
|
resp := &ListCommentsResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
type ChangeStatusParams struct {
|
|
// Array with review identifiers from 1 to 100
|
|
ReviewIds []string `json:"review_ids"`
|
|
|
|
// Review status
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
type ChangeStatusResponse struct {
|
|
core.CommonResponse
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) ChangeStatus(ctx context.Context, params *ChangeStatusParams) (*ChangeStatusResponse, error) {
|
|
url := "/v1/review/change-status"
|
|
|
|
resp := &ChangeStatusResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type CountReviewsResponse struct {
|
|
core.CommonResponse
|
|
|
|
// Number of processed review
|
|
Processed int32 `json:"processed"`
|
|
|
|
// Number of all reviews
|
|
Total int32 `json:"total"`
|
|
|
|
// Number of unprocessed reviews
|
|
Unprocessed int32 `json:"unprocessed"`
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) Count(ctx context.Context) (*CountReviewsResponse, error) {
|
|
url := "/v1/review/count"
|
|
|
|
resp := &CountReviewsResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, nil, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type GetReviewParams struct {
|
|
// Review identifier
|
|
ReviewId string `json:"review_id"`
|
|
}
|
|
|
|
type GetReviewResponse struct {
|
|
core.CommonResponse
|
|
|
|
ReviewDetails
|
|
|
|
// Number of dislikes on the review
|
|
DislikesAmount int32 `json:"dislikes_amount"`
|
|
|
|
// Number of likes on the review
|
|
LikesAmount int32 `json:"likes_amount"`
|
|
|
|
// Image details
|
|
Photos []ReviewPhoto `json:"photos"`
|
|
|
|
// Video details
|
|
Videos []ReviewVideo `json:"videos"`
|
|
}
|
|
|
|
type ReviewDetails struct {
|
|
// Number of comments on the review
|
|
CommentsAmount int32 `json:"comments_amount"`
|
|
|
|
// Review identifier
|
|
Id string `json:"id"`
|
|
|
|
// true, if the review affects the rating calculation
|
|
IsRatingParticipant bool `json:"is_rating_participant"`
|
|
|
|
// Status of the order for which the customer left a review
|
|
OrderStatus string `json:"order_status"`
|
|
|
|
// Number of images in the review
|
|
PhotosAmount int32 `json:"photos_amount"`
|
|
|
|
// Review publication date
|
|
PublishedAt time.Time `json:"published_at"`
|
|
|
|
// Review rating
|
|
Rating int32 `json:"rating"`
|
|
|
|
// Product identifier in the Ozon system, SKU
|
|
SKU int64 `json:"sku"`
|
|
|
|
// Review status
|
|
Status string `json:"status"`
|
|
|
|
// Review text
|
|
Text string `json:"text"`
|
|
|
|
// Number of videos for the review
|
|
VideosAmount int32 `json:"videos_amount"`
|
|
}
|
|
|
|
type ReviewPhoto struct {
|
|
// Height
|
|
Height int32 `json:"height"`
|
|
|
|
// Link to image
|
|
URL string `json:"url"`
|
|
|
|
// Width
|
|
Width int32 `json:"width"`
|
|
}
|
|
|
|
type ReviewVideo struct {
|
|
// Height
|
|
Height int64 `json:"height"`
|
|
|
|
// Link to video preview
|
|
PreviewURL string `json:"preview_url"`
|
|
|
|
// Link to short video
|
|
ShortVideoPreviewURL string `json:"short_video_preview_url"`
|
|
|
|
// Video link
|
|
URL string `json:"url"`
|
|
|
|
// Width
|
|
Width int64 `json:"width"`
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) Get(ctx context.Context, params *GetReviewParams) (*GetReviewResponse, error) {
|
|
url := "/v1/review/info"
|
|
|
|
resp := &GetReviewResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, nil, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type ListReviewsParams struct {
|
|
// Identifier of the last review on the page
|
|
LastId string `json:"last_id"`
|
|
|
|
// Number of reviews in the response. Minimum is 20, maximum is 100
|
|
Limit int32 `json:"limit"`
|
|
|
|
// Sorting direction
|
|
SortDir Order `json:"sort_dir"`
|
|
|
|
// Review statuses
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
type ListReviewsResponse struct {
|
|
core.CommonResponse
|
|
|
|
// true, if not all reviews were returned in the response
|
|
HasNext bool `json:"has_next"`
|
|
|
|
// Identifier of the last review on the page
|
|
LastId string `json:"last_id"`
|
|
|
|
// Review details
|
|
Reviews []ReviewDetails `json:"reviews"`
|
|
}
|
|
|
|
// Only available to sellers with the Premium Plus subscription
|
|
func (c Reviews) List(ctx context.Context, params *ListReviewsParams) (*ListReviewsResponse, error) {
|
|
url := "/v1/review/list"
|
|
|
|
resp := &ListReviewsResponse{}
|
|
|
|
response, err := c.client.Request(ctx, http.MethodPost, url, nil, resp, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
response.CopyCommonResponse(&resp.CommonResponse)
|
|
|
|
return resp, nil
|
|
}
|