feat: 补充报告评论集合与评论详情证据
This commit is contained in:
@@ -40,10 +40,59 @@ export const EvidenceSchema = z.object({
|
||||
source_type: z.enum(evidenceSourceTypes),
|
||||
source_url: z.string().url(),
|
||||
review_ref: z.string().nullable(),
|
||||
review_detail: z
|
||||
.object({
|
||||
content: z.string().min(1),
|
||||
score: z.string().nullable(),
|
||||
created_at: z.string().nullable(),
|
||||
author_label: z.string().nullable(),
|
||||
sku_labels: z.array(z.string().min(1)).optional(),
|
||||
like_count: z.string().nullable().optional(),
|
||||
reply: z.string().nullable().optional(),
|
||||
append_content: z.string().nullable().optional(),
|
||||
picture_urls: z.array(z.string().min(1)).optional(),
|
||||
video_urls: z.array(z.string().min(1)).optional(),
|
||||
append_picture_urls: z.array(z.string().min(1)).optional()
|
||||
})
|
||||
.optional(),
|
||||
snippet: z.string().min(1),
|
||||
captured_at: z.string().datetime()
|
||||
});
|
||||
|
||||
const ReviewDetailSchema = z.object({
|
||||
content: z.string().min(1),
|
||||
score: z.string().nullable(),
|
||||
created_at: z.string().nullable(),
|
||||
author_label: z.string().nullable(),
|
||||
sku_labels: z.array(z.string().min(1)).optional(),
|
||||
like_count: z.string().nullable().optional(),
|
||||
reply: z.string().nullable().optional(),
|
||||
append_content: z.string().nullable().optional(),
|
||||
picture_urls: z.array(z.string().min(1)).optional(),
|
||||
video_urls: z.array(z.string().min(1)).optional(),
|
||||
append_picture_urls: z.array(z.string().min(1)).optional()
|
||||
});
|
||||
|
||||
const ReviewCollectionCommentSchema = ReviewDetailSchema.extend({
|
||||
review_ref: z.string().min(1),
|
||||
sample_bucket: z.enum(["latest", "hot", "negative"]).nullable().optional()
|
||||
});
|
||||
|
||||
const ReviewCollectionSchema = z.object({
|
||||
collection_id: z.string().min(1),
|
||||
candidate_id: z.string().min(1),
|
||||
product_evidence_id: z.string().min(1),
|
||||
platform: z.enum(platforms),
|
||||
source_url: z.string().url(),
|
||||
title: z.string().min(1),
|
||||
store_name: z.string().nullable(),
|
||||
price_label: z.string().nullable(),
|
||||
captured_at: z.string().datetime(),
|
||||
review_count: z.number().int().nonnegative(),
|
||||
sampled_review_refs: z.array(z.string().min(1)),
|
||||
comments: z.array(ReviewCollectionCommentSchema)
|
||||
});
|
||||
|
||||
export const PlatformInsightSchema = z.object({
|
||||
platform: z.enum(platforms),
|
||||
execution_status: z.enum(executionStatuses),
|
||||
@@ -86,6 +135,7 @@ export const ReportSchema = z.object({
|
||||
cross_platform_insights: z.array(InsightCardSchema),
|
||||
recommendations: z.array(InsightCardSchema),
|
||||
evidence_index: z.array(EvidenceSchema),
|
||||
review_collections: z.array(ReviewCollectionSchema).optional(),
|
||||
quality_flags: z.object({
|
||||
sample_insufficient: z.boolean(),
|
||||
partial_platform_failure: z.boolean(),
|
||||
|
||||
Reference in New Issue
Block a user