feat: additional cookbook features (tags, tools, and public) (#1116)

* migration: add public, tags, and tools

* generate frontend types

* add help icon

* start replacement for tool-tag-category selector

* add help icon utility

* use generator types

* add support for cookbook features

* add UI elements for cookbook features

* fix tests

* fix type error
This commit is contained in:
Hayden
2022-04-01 09:50:31 -08:00
committed by GitHub
parent 1092e0ce7c
commit cfaac2e060
23 changed files with 374 additions and 97 deletions

View File

@@ -1,8 +1,10 @@
from sqlalchemy import Column, ForeignKey, Integer, String, orm
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, orm
from .._model_base import BaseMixins, SqlAlchemyBase
from .._model_utils import auto_init, guid
from ..recipe.category import Category, cookbooks_to_categories
from ..recipe.tag import Tag, cookbooks_to_tags
from ..recipe.tool import Tool, cookbooks_to_tools
class CookBook(SqlAlchemyBase, BaseMixins):
@@ -10,14 +12,17 @@ class CookBook(SqlAlchemyBase, BaseMixins):
id = Column(guid.GUID, primary_key=True, default=guid.GUID.generate)
position = Column(Integer, nullable=False, default=1)
group_id = Column(guid.GUID, ForeignKey("groups.id"))
group = orm.relationship("Group", back_populates="cookbooks")
name = Column(String, nullable=False)
slug = Column(String, nullable=False)
description = Column(String, default="")
public = Column(Boolean, default=False)
categories = orm.relationship(Category, secondary=cookbooks_to_categories, single_parent=True)
group_id = Column(guid.GUID, ForeignKey("groups.id"))
group = orm.relationship("Group", back_populates="cookbooks")
tags = orm.relationship(Tag, secondary=cookbooks_to_tags, single_parent=True)
tools = orm.relationship(Tool, secondary=cookbooks_to_tools, single_parent=True)
@auto_init()
def __init__(self, **_) -> None:

View File

@@ -23,6 +23,13 @@ plan_rules_to_tags = sa.Table(
sa.Column("tag_id", guid.GUID, sa.ForeignKey("tags.id")),
)
cookbooks_to_tags = sa.Table(
"cookbooks_to_tags",
SqlAlchemyBase.metadata,
sa.Column("cookbook_id", guid.GUID, sa.ForeignKey("cookbooks.id")),
sa.Column("tag_id", guid.GUID, sa.ForeignKey("tags.id")),
)
class Tag(SqlAlchemyBase, BaseMixins):
__tablename__ = "tags"

View File

@@ -12,6 +12,13 @@ recipes_to_tools = Table(
Column("tool_id", GUID, ForeignKey("tools.id")),
)
cookbooks_to_tools = Table(
"cookbooks_to_tools",
SqlAlchemyBase.metadata,
Column("cookbook_id", GUID, ForeignKey("cookbooks.id")),
Column("tool_id", GUID, ForeignKey("tools.id")),
)
class Tool(SqlAlchemyBase, BaseMixins):
__tablename__ = "tools"