This commit is contained in:
xkm
2026-03-30 17:17:47 +08:00
parent 74306bdc86
commit a9a1a1ec24
12 changed files with 1056 additions and 8 deletions

View File

@@ -0,0 +1,5 @@
DROP TABLE IF EXISTS "orders";
DROP TABLE IF EXISTS "validations";
DROP TABLE IF EXISTS "pricing_results";
DROP TABLE IF EXISTS "buyer_requests";
DROP TABLE IF EXISTS "data_assets";

View File

@@ -0,0 +1,95 @@
CREATE TABLE IF NOT EXISTS "data_assets"
(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_name TEXT NOT NULL,
asset_type TEXT NOT NULL,
domain TEXT NOT NULL,
application_scene TEXT,
data_description TEXT NOT NULL,
data_scale TEXT NOT NULL,
collection_method TEXT NOT NULL,
labeling_status TEXT,
update_frequency TEXT,
privacy_level TEXT NOT NULL,
permission_mode TEXT NOT NULL,
supports_validation BOOLEAN NOT NULL,
seller_expected_price_min NUMERIC(20, 2),
seller_expected_price_max NUMERIC(20, 2),
quality_level TEXT,
scarcity_level TEXT,
base_value_score NUMERIC(20, 2),
base_price_min NUMERIC(20, 2),
base_price_max NUMERIC(20, 2),
asset_status TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS "buyer_requests"
(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_id UUID NOT NULL REFERENCES data_assets (id),
task_type TEXT NOT NULL,
model_type TEXT NOT NULL,
buyer_budget_min NUMERIC(20, 2),
buyer_budget_max NUMERIC(20, 2),
privacy_requirement TEXT,
usage_purpose TEXT,
request_note TEXT,
request_status TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS "pricing_results"
(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_id UUID NOT NULL REFERENCES data_assets (id),
request_id UUID REFERENCES buyer_requests (id),
scenario_value_score NUMERIC(20, 2),
scenario_price_min NUMERIC(20, 2),
scenario_price_max NUMERIC(20, 2),
suggested_price NUMERIC(20, 2),
success_probability NUMERIC(5, 4),
pricing_reason_1 TEXT,
pricing_reason_2 TEXT,
pricing_reason_3 TEXT,
verification_suggestion TEXT,
pricing_status TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS "validations"
(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_id UUID NOT NULL REFERENCES data_assets (id),
request_id UUID REFERENCES buyer_requests (id),
validation_type TEXT,
validation_requested BOOLEAN NOT NULL,
validation_status TEXT NOT NULL,
validation_signal TEXT,
validation_score NUMERIC(5, 4),
risk_warning TEXT,
continue_recommendation TEXT,
validation_created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
validation_finished_at TIMESTAMPTZ
);
CREATE TABLE IF NOT EXISTS "orders"
(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
asset_id UUID NOT NULL REFERENCES data_assets (id),
request_id UUID REFERENCES buyer_requests (id),
pricing_id UUID REFERENCES pricing_results (id),
validation_id UUID REFERENCES validations (id),
asset_name TEXT NOT NULL,
current_price NUMERIC(20, 2) NOT NULL,
negotiation_min NUMERIC(20, 2),
negotiation_max NUMERIC(20, 2),
validation_used BOOLEAN NOT NULL,
delivery_mode TEXT NOT NULL,
order_status TEXT NOT NULL,
order_created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
order_updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

87
db/query/market.sql Normal file
View File

@@ -0,0 +1,87 @@
-- name: CreateDataAsset :one
INSERT INTO data_assets (asset_name, asset_type, domain, application_scene,
data_description, data_scale, collection_method, labeling_status,
update_frequency, privacy_level, permission_mode, supports_validation,
seller_expected_price_min, seller_expected_price_max, asset_status)
VALUES ($1, $2, $3, $4,
$5, $6, $7, $8,
$9, $10, $11, $12,
$13, $14, $15)
RETURNING *;
-- name: GetDataAsset :one
SELECT *
FROM data_assets
WHERE id = $1;
-- name: ListDataAssets :many
SELECT *
FROM data_assets
WHERE (
NULLIF(sqlc.narg(keyword)::text, '') IS NULL
OR asset_name ILIKE '%' || sqlc.narg(keyword)::text || '%'
OR data_description ILIKE '%' || sqlc.narg(keyword)::text || '%'
)
AND (
NULLIF(sqlc.narg(asset_type)::text, '') IS NULL
OR asset_type = sqlc.narg(asset_type)::text
)
AND (
NULLIF(sqlc.narg(domain)::text, '') IS NULL
OR domain = sqlc.narg(domain)::text
)
AND (
NULLIF(sqlc.narg(privacy_level)::text, '') IS NULL
OR privacy_level = sqlc.narg(privacy_level)::text
)
AND (
sqlc.narg(supports_validation)::boolean IS NULL
OR supports_validation = sqlc.narg(supports_validation)::boolean
)
ORDER BY created_at DESC, id DESC
LIMIT $1 OFFSET $2;
-- name: GetBuyerRequest :one
SELECT *
FROM buyer_requests
WHERE id = $1;
-- name: ListBuyerRequests :many
SELECT *
FROM buyer_requests
ORDER BY created_at DESC, id DESC
LIMIT $1 OFFSET $2;
-- name: GetPricingResult :one
SELECT *
FROM pricing_results
WHERE id = $1;
-- name: ListPricingResults :many
SELECT *
FROM pricing_results
ORDER BY created_at DESC, id DESC
LIMIT $1 OFFSET $2;
-- name: GetValidation :one
SELECT *
FROM validations
WHERE id = $1;
-- name: ListValidations :many
SELECT *
FROM validations
ORDER BY validation_created_at DESC, id DESC
LIMIT $1 OFFSET $2;
-- name: GetOrder :one
SELECT *
FROM orders
WHERE id = $1;
-- name: ListOrders :many
SELECT *
FROM orders
ORDER BY order_created_at DESC, id DESC
LIMIT $1 OFFSET $2;