feat(api): dashboard merge config if not present in payload

feat(api): dashboard use metrics' default config for batch create
This commit is contained in:
Taha Yassine Kraiem 2022-04-08 17:54:13 +02:00
parent 46199bbdca
commit e362cde1a9
2 changed files with 8 additions and 8 deletions

View file

@ -48,14 +48,15 @@ def create_dashboard(project_id, user_id, data: schemas.CreateDashboardSchema):
if data.metrics is not None and len(data.metrics) > 0:
pg_query = f"""WITH dash AS ({pg_query})
INSERT INTO dashboard_widgets(dashboard_id, metric_id, user_id, config)
VALUES {",".join([f"((SELECT dashboard_id FROM dash),%(metric_id_{i})s, %(userId)s, %(config_{i})s)" for i in range(len(data.metrics))])}
VALUES {",".join([f"((SELECT dashboard_id FROM dash),%(metric_id_{i})s, %(userId)s, (SELECT default_config FROM metrics WHERE metric_id=%(metric_id_{i})s)||%(config_{i})s))" for i in range(len(data.metrics))])}
RETURNING (SELECT dashboard_id FROM dash)"""
for i, m in enumerate(data.metrics):
params[f"metric_id_{i}"] = m
params[f"config_{i}"] = schemas.AddWidgetToDashboardPayloadSchema.schema() \
.get("properties", {}).get("config", {}).get("default", {})
params[f"config_{i}"]["position"] = i
params[f"config_{i}"] = json.dumps(params[f"config_{i}"])
# params[f"config_{i}"] = schemas.AddWidgetToDashboardPayloadSchema.schema() \
# .get("properties", {}).get("config", {}).get("default", {})
# params[f"config_{i}"]["position"] = i
# params[f"config_{i}"] = json.dumps(params[f"config_{i}"])
params[f"config_{i}"] = json.dumps({"position": i})
cur.execute(cur.mogrify(pg_query, params))
row = cur.fetchone()
if row is None:
@ -173,7 +174,7 @@ def add_widget(project_id, user_id, dashboard_id, data: schemas.AddWidgetToDashb
with pg_client.PostgresClient() as cur:
pg_query = """INSERT INTO dashboard_widgets(dashboard_id, metric_id, user_id, config)
SELECT %(dashboard_id)s AS dashboard_id, %(metric_id)s AS metric_id,
%(userId)s AS user_id, %(config)s::jsonb AS config
%(userId)s AS user_id, (SELECT default_config FROM metrics WHERE metric_id=%(metric_id)s)||%(config)s::jsonb AS config
WHERE EXISTS(SELECT 1 FROM dashboards
WHERE dashboards.deleted_at ISNULL AND dashboards.project_id = %(projectId)s
AND dashboard_id = %(dashboard_id)s

View file

@ -898,8 +898,7 @@ class EditDashboardSchema(CreateDashboardSchema):
class UpdateWidgetPayloadSchema(BaseModel):
# if you change the config attribute name, please make sure to update it in dashboard2.py
config: dict = Field(default={"col": 2, "row": 2, "position": 0})
config: dict = Field(default={})
class Config:
alias_generator = attribute_to_camel_case