feat: update strategy set schema fields
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user