Add market watch and match hub workflows
这个提交包含在:
86
drizzle/0012_market_watch.sql
普通文件
86
drizzle/0012_market_watch.sql
普通文件
@@ -0,0 +1,86 @@
|
||||
CREATE TABLE `racket_listings` (
|
||||
`id` int AUTO_INCREMENT NOT NULL,
|
||||
`source` enum('xianyu','jd','zhuanzhuan') NOT NULL,
|
||||
`sourceListingId` varchar(128) NOT NULL,
|
||||
`title` varchar(512) NOT NULL,
|
||||
`description` text,
|
||||
`listingUrl` text NOT NULL,
|
||||
`imageUrl` text,
|
||||
`price` float NOT NULL,
|
||||
`originalPrice` float,
|
||||
`sellerName` varchar(128),
|
||||
`location` varchar(128),
|
||||
`publishedAtRaw` varchar(128),
|
||||
`brand` varchar(64),
|
||||
`model` varchar(128),
|
||||
`series` varchar(128),
|
||||
`category` varchar(64),
|
||||
`weightGram` float,
|
||||
`conditionLevel` enum('brand_new','almost_new','used_good','used_fair','unknown') NOT NULL DEFAULT 'unknown',
|
||||
`gradeLevel` enum('high_value','standard','overpriced','pending_review') NOT NULL DEFAULT 'pending_review',
|
||||
`gradeReason` text,
|
||||
`isLowPriceCandidate` int NOT NULL DEFAULT 0,
|
||||
`fingerprint` varchar(128) NOT NULL,
|
||||
`extra` json,
|
||||
`fetchedAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`createdAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT `racket_listings_id` PRIMARY KEY(`id`),
|
||||
CONSTRAINT `racket_listings_source_listing_idx` UNIQUE(`source`,`sourceListingId`),
|
||||
CONSTRAINT `racket_listings_fingerprint_idx` UNIQUE(`fingerprint`)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
|
||||
CREATE TABLE `racket_watch_rules` (
|
||||
`id` int AUTO_INCREMENT NOT NULL,
|
||||
`userId` int NOT NULL,
|
||||
`title` varchar(256) NOT NULL,
|
||||
`brand` varchar(64) NOT NULL,
|
||||
`modelKeyword` varchar(128),
|
||||
`seriesKeyword` varchar(128),
|
||||
`category` varchar(64),
|
||||
`weightMinGram` float,
|
||||
`weightMaxGram` float,
|
||||
`targetPrice` float NOT NULL,
|
||||
`pushEnabled` int NOT NULL DEFAULT 1,
|
||||
`isActive` int NOT NULL DEFAULT 1,
|
||||
`lastCheckedAt` timestamp,
|
||||
`lastMatchedAt` timestamp,
|
||||
`createdAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT `racket_watch_rules_id` PRIMARY KEY(`id`)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
|
||||
CREATE TABLE `racket_watch_hits` (
|
||||
`id` int AUTO_INCREMENT NOT NULL,
|
||||
`watchRuleId` int NOT NULL,
|
||||
`userId` int NOT NULL,
|
||||
`listingId` int NOT NULL,
|
||||
`matchedPrice` float NOT NULL,
|
||||
`status` enum('matched','push_queued','pushed','suppressed') NOT NULL DEFAULT 'matched',
|
||||
`firstMatchedAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`lastMatchedAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`lastPushPrice` float,
|
||||
`pushedAt` timestamp,
|
||||
`pushCount` int NOT NULL DEFAULT 0,
|
||||
`createdAt` timestamp NOT NULL DEFAULT (now()),
|
||||
`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT `racket_watch_hits_id` PRIMARY KEY(`id`),
|
||||
CONSTRAINT `racket_watch_hits_rule_listing_idx` UNIQUE(`watchRuleId`,`listingId`)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
|
||||
ALTER TABLE `background_tasks`
|
||||
MODIFY COLUMN `type` enum(
|
||||
'media_finalize',
|
||||
'training_plan_generate',
|
||||
'training_plan_adjust',
|
||||
'analysis_corrections',
|
||||
'pose_correction_multimodal',
|
||||
'ntrp_refresh_user',
|
||||
'ntrp_refresh_all',
|
||||
'market_source_sync',
|
||||
'market_watch_refresh',
|
||||
'market_push_delivery'
|
||||
) NOT NULL;
|
||||
在新工单中引用
屏蔽一个用户