文件
tennis-training-hub/drizzle/0012_market_watch.sql
2026-04-07 11:00:03 +08:00

87 行
3.0 KiB
SQL

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;