diff --git a/migrations/versions/04f3fe65d40b_.py b/migrations/versions/23baf9256373_.py similarity index 95% rename from migrations/versions/04f3fe65d40b_.py rename to migrations/versions/23baf9256373_.py index 03ffe7a..61af022 100644 --- a/migrations/versions/04f3fe65d40b_.py +++ b/migrations/versions/23baf9256373_.py @@ -1,8 +1,8 @@ """empty message -Revision ID: 04f3fe65d40b +Revision ID: 23baf9256373 Revises: -Create Date: 2022-07-12 07:03:12.713616 +Create Date: 2022-07-12 10:51:54.236220 """ from alembic import op @@ -10,7 +10,7 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = '04f3fe65d40b' +revision = '23baf9256373' down_revision = None branch_labels = None depends_on = None @@ -51,12 +51,12 @@ def upgrade(): ) op.create_table('lists', sa.Column('id', sa.Integer(), nullable=False), - sa.Column('accessKey', sa.String(length=64), nullable=True), + sa.Column('key', sa.String(length=64), nullable=True), sa.Column('name', sa.String(length=128), nullable=False), sa.Column('notes', sa.String(), nullable=True), sa.Column('createdAt', sa.DateTime(), nullable=True), sa.Column('modifiedAt', sa.DateTime(), nullable=True), - sa.ForeignKeyConstraint(['accessKey'], ['access_keys.key'], ), + sa.ForeignKeyConstraint(['key'], ['access_keys.key'], ), sa.PrimaryKeyConstraint('id') ) op.create_table('products', diff --git a/sigl/database/orm.py b/sigl/database/orm.py index 927c6ea..f3c1fab 100644 --- a/sigl/database/orm.py +++ b/sigl/database/orm.py @@ -29,6 +29,16 @@ def init_orm(): # Access Keys db.mapper(AccessKey, access_keys, properties={ + 'lists': db.relationship( + ShoppingList, + back_populates='accessKey', + cascade='all, delete-orphan', + ), + 'products': db.relationship( + Product, + back_populates='accessKey', + cascade='all, delete-orphan', + ), 'tokens': db.relationship( AccessToken, back_populates='accessKey', @@ -58,6 +68,10 @@ def init_orm(): # Products db.mapper(Product, products, properties={ + 'accessKey': db.relationship( + AccessKey, + back_populates='products' + ), 'entries': db.relationship( ListEntry, back_populates='product', @@ -80,6 +94,10 @@ def init_orm(): # Shopping Lists db.mapper(ShoppingList, lists, properties={ + 'accessKey': db.relationship( + AccessKey, + back_populates='lists' + ), 'entries': db.relationship( ListEntry, back_populates='shoppingList', diff --git a/sigl/database/tables.py b/sigl/database/tables.py index 2f029bb..cd2e191 100644 --- a/sigl/database/tables.py +++ b/sigl/database/tables.py @@ -68,7 +68,7 @@ lists = db.Table( db.Column('id', db.Integer, primary_key=True), # Access Key - db.Column('accessKey', db.ForeignKey('access_keys.key'), default=None), + db.Column('key', db.ForeignKey('access_keys.key'), default=None), # List Attributes db.Column('name', db.String(128), nullable=False), diff --git a/sigl/domain/models/accessKey.py b/sigl/domain/models/accessKey.py index 90a8cce..026f95f 100644 --- a/sigl/domain/models/accessKey.py +++ b/sigl/domain/models/accessKey.py @@ -6,7 +6,11 @@ Copyright (c) 2022 Asymworks, LLC. All Rights Reserved. from dataclasses import dataclass, field from datetime import datetime -from typing import List +from typing import List, TYPE_CHECKING + +if TYPE_CHECKING: + from .list import ShoppingList + from .product import Product __all__ = ('AccessKey', 'AccessToken') @@ -42,6 +46,8 @@ class AccessKey: restoredAt: datetime = None # Relationship Fields + lists: List['ShoppingList'] = field(default_factory=list) + products: List['Product'] = field(default_factory=list) tokens: List['AccessToken'] = field(default_factory=list) diff --git a/sigl/factory.py b/sigl/factory.py index 9c5e9b5..9d42e44 100644 --- a/sigl/factory.py +++ b/sigl/factory.py @@ -133,6 +133,10 @@ def create_app(app_config=None, app_name=None): from .socketio import init_socketio init_socketio(app) + # Initialize Frontend + from .frontend import init_frontend + init_frontend(app) + # Startup Complete app.logger.info('{} startup complete'.format(app.config['APP_NAME']))