feat: update strategy set schema fields

This commit is contained in:
2026-04-03 08:03:27 +00:00
parent 3eae90a9ab
commit ebd4559939
13 changed files with 131 additions and 37 deletions
+17 -14
View File
@@ -2,6 +2,7 @@
from __future__ import annotations
import hashlib
import json
import uuid
from dataclasses import dataclass
@@ -82,10 +83,11 @@ class PostgresPortfolioRepository:
"""
CREATE TABLE IF NOT EXISTS strategy_sets (
id TEXT PRIMARY KEY,
strategy_name TEXT NOT NULL,
strategy_config TEXT NOT NULL DEFAULT '',
name TEXT NOT NULL,
config TEXT NOT NULL DEFAULT '',
nick TEXT NOT NULL UNIQUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (strategy_name, strategy_config)
UNIQUE (name, config)
)
"""
)
@@ -352,40 +354,41 @@ class PostgresPortfolioRepository:
rows = cur.fetchall()
return [self._row_to_portfolio(row) for row in rows]
def get_or_create_strategy_set(self, strategy_name: str, strategy_config: str) -> StrategySet:
def get_or_create_strategy_set(self, name: str, config: str) -> StrategySet:
self.ensure_schema()
nick = f"{name}:{hashlib.sha1(config.encode('utf-8')).hexdigest()[:12]}"
with self._connect().cursor() as cur:
new_id = str(uuid.uuid4())
cur.execute(
"""
INSERT INTO strategy_sets (id, strategy_name, strategy_config)
VALUES (%s, %s, %s)
ON CONFLICT (strategy_name, strategy_config) DO NOTHING
INSERT INTO strategy_sets (id, name, config, nick)
VALUES (%s, %s, %s, %s)
ON CONFLICT (name, config) DO NOTHING
""",
(new_id, strategy_name, strategy_config),
(new_id, name, config, nick),
)
cur.execute(
"""
SELECT id, strategy_name, strategy_config, created_at
SELECT id, name, config, nick, created_at
FROM strategy_sets
WHERE strategy_name = %s AND strategy_config = %s
WHERE name = %s AND config = %s
""",
(strategy_name, strategy_config),
(name, config),
)
row = cur.fetchone()
return StrategySet(id=row[0], strategy_name=row[1], strategy_config=row[2], created_at=row[3])
return StrategySet(id=row[0], name=row[1], config=row[2], nick=row[3], created_at=row[4])
def get_strategy_set(self, id: str) -> StrategySet | None:
self.ensure_schema()
with self._connect().cursor() as cur:
cur.execute(
"SELECT id, strategy_name, strategy_config, created_at FROM strategy_sets WHERE id = %s",
"SELECT id, name, config, nick, created_at FROM strategy_sets WHERE id = %s",
(id,),
)
row = cur.fetchone()
if row is None:
return None
return StrategySet(id=row[0], strategy_name=row[1], strategy_config=row[2], created_at=row[3])
return StrategySet(id=row[0], name=row[1], config=row[2], nick=row[3], created_at=row[4])
def save(
self,