Files
geo/server/migrations/20260428110000_create_ai_point_usage_logs.up.sql
T

38 lines
1.7 KiB
SQL
Raw Normal View History

CREATE TABLE ai_point_usage_logs (
id BIGSERIAL PRIMARY KEY,
tenant_id BIGINT NOT NULL REFERENCES tenants(id),
operator_id BIGINT REFERENCES users(id),
quota_reservation_id BIGINT REFERENCES quota_reservations(id),
usage_type VARCHAR(64) NOT NULL,
resource_type VARCHAR(64),
resource_id BIGINT,
resource_uid VARCHAR(128),
request_chars INT NOT NULL DEFAULT 0,
base_chars INT NOT NULL DEFAULT 1000,
points INT NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
model VARCHAR(128),
metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,
error_message TEXT,
completed_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT chk_ai_point_usage_status
CHECK (status IN ('pending', 'completed', 'refunded', 'failed'))
);
CREATE INDEX idx_ai_point_usage_tenant_created
ON ai_point_usage_logs(tenant_id, created_at DESC);
CREATE INDEX idx_ai_point_usage_tenant_operator_created
ON ai_point_usage_logs(tenant_id, operator_id, created_at DESC);
CREATE INDEX idx_ai_point_usage_reservation
ON ai_point_usage_logs(quota_reservation_id);
CREATE INDEX idx_ai_point_usage_resource
ON ai_point_usage_logs(tenant_id, resource_type, resource_id, resource_uid);
CREATE INDEX idx_quota_reservations_tenant_type_created_status
ON quota_reservations(tenant_id, quota_type, created_at, status);