diff --git a/app.py b/app.py index 0c27e12..23d6117 100644 --- a/app.py +++ b/app.py @@ -12,7 +12,6 @@ from bp import ( register_wellknown_bp, register_actors_bp, register_identity_bp, - register_auth_bp, register_social_bp, ) @@ -65,7 +64,6 @@ def create_app() -> "Quart": app.register_blueprint(register_wellknown_bp()) app.register_blueprint(register_actors_bp()) app.register_blueprint(register_identity_bp()) - app.register_blueprint(register_auth_bp()) app.register_blueprint(register_social_bp()) # --- home page --- diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/models/__init__.py b/blog/models/__init__.py new file mode 100644 index 0000000..e434f4a --- /dev/null +++ b/blog/models/__init__.py @@ -0,0 +1,14 @@ +from .ghost_content import Post, Author, Tag, PostAuthor, PostTag, PostLike +from .snippet import Snippet +from .tag_group import TagGroup, TagGroupTag + +# Shared models — canonical definitions live in shared/models/ +from shared.models.ghost_membership_entities import ( + GhostLabel, UserLabel, + GhostNewsletter, UserNewsletter, + GhostTier, GhostSubscription, +) +from shared.models.menu_item import MenuItem +from shared.models.kv import KV +from shared.models.magic_link import MagicLink +from shared.models.user import User diff --git a/blog/models/ghost_content.py b/blog/models/ghost_content.py new file mode 100644 index 0000000..cd18161 --- /dev/null +++ b/blog/models/ghost_content.py @@ -0,0 +1,3 @@ +from shared.models.ghost_content import ( # noqa: F401 + Tag, Post, Author, PostAuthor, PostTag, PostLike, +) diff --git a/blog/models/ghost_membership_entities.py b/blog/models/ghost_membership_entities.py new file mode 100644 index 0000000..d07520f --- /dev/null +++ b/blog/models/ghost_membership_entities.py @@ -0,0 +1,12 @@ +# Re-export from canonical shared location +from shared.models.ghost_membership_entities import ( + GhostLabel, UserLabel, + GhostNewsletter, UserNewsletter, + GhostTier, GhostSubscription, +) + +__all__ = [ + "GhostLabel", "UserLabel", + "GhostNewsletter", "UserNewsletter", + "GhostTier", "GhostSubscription", +] diff --git a/blog/models/kv.py b/blog/models/kv.py new file mode 100644 index 0000000..d54f0a3 --- /dev/null +++ b/blog/models/kv.py @@ -0,0 +1,4 @@ +# Re-export from canonical shared location +from shared.models.kv import KV + +__all__ = ["KV"] diff --git a/blog/models/magic_link.py b/blog/models/magic_link.py new file mode 100644 index 0000000..9031ca4 --- /dev/null +++ b/blog/models/magic_link.py @@ -0,0 +1,4 @@ +# Re-export from canonical shared location +from shared.models.magic_link import MagicLink + +__all__ = ["MagicLink"] diff --git a/blog/models/menu_item.py b/blog/models/menu_item.py new file mode 100644 index 0000000..f36a146 --- /dev/null +++ b/blog/models/menu_item.py @@ -0,0 +1,4 @@ +# Re-export from canonical shared location +from shared.models.menu_item import MenuItem + +__all__ = ["MenuItem"] diff --git a/blog/models/snippet.py b/blog/models/snippet.py new file mode 100644 index 0000000..47cad35 --- /dev/null +++ b/blog/models/snippet.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +from datetime import datetime + +from sqlalchemy import Integer, String, Text, DateTime, ForeignKey, UniqueConstraint, Index, func +from sqlalchemy.orm import Mapped, mapped_column + +from shared.db.base import Base + + +class Snippet(Base): + __tablename__ = "snippets" + __table_args__ = ( + UniqueConstraint("user_id", "name", name="uq_snippets_user_name"), + Index("ix_snippets_visibility", "visibility"), + ) + + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + user_id: Mapped[int] = mapped_column( + ForeignKey("users.id", ondelete="CASCADE"), nullable=False, + ) + name: Mapped[str] = mapped_column(String(255), nullable=False) + value: Mapped[str] = mapped_column(Text, nullable=False) + visibility: Mapped[str] = mapped_column( + String(20), nullable=False, default="private", server_default="private", + ) + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), nullable=False, server_default=func.now(), + ) + updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), nullable=False, server_default=func.now(), onupdate=func.now(), + ) diff --git a/blog/models/tag_group.py b/blog/models/tag_group.py new file mode 100644 index 0000000..77ddc41 --- /dev/null +++ b/blog/models/tag_group.py @@ -0,0 +1,52 @@ +from datetime import datetime +from typing import List, Optional +from sqlalchemy.orm import Mapped, mapped_column, relationship +from sqlalchemy import ( + Integer, + String, + Text, + DateTime, + ForeignKey, + UniqueConstraint, + func, +) +from shared.db.base import Base + + +class TagGroup(Base): + __tablename__ = "tag_groups" + + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + name: Mapped[str] = mapped_column(String(255), nullable=False) + slug: Mapped[str] = mapped_column(String(191), unique=True, nullable=False) + feature_image: Mapped[Optional[str]] = mapped_column(Text()) + colour: Mapped[Optional[str]] = mapped_column(String(32)) + sort_order: Mapped[int] = mapped_column(Integer, default=0, nullable=False) + + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), nullable=False, server_default=func.now() + ) + updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), nullable=False, server_default=func.now(), onupdate=func.now() + ) + + tag_links: Mapped[List["TagGroupTag"]] = relationship( + "TagGroupTag", back_populates="group", cascade="all, delete-orphan", passive_deletes=True + ) + + +class TagGroupTag(Base): + __tablename__ = "tag_group_tags" + __table_args__ = ( + UniqueConstraint("tag_group_id", "tag_id", name="uq_tag_group_tag"), + ) + + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + tag_group_id: Mapped[int] = mapped_column( + ForeignKey("tag_groups.id", ondelete="CASCADE"), nullable=False + ) + tag_id: Mapped[int] = mapped_column( + ForeignKey("tags.id", ondelete="CASCADE"), nullable=False + ) + + group: Mapped["TagGroup"] = relationship("TagGroup", back_populates="tag_links") diff --git a/blog/models/user.py b/blog/models/user.py new file mode 100644 index 0000000..3feae81 --- /dev/null +++ b/blog/models/user.py @@ -0,0 +1,4 @@ +# Re-export from canonical shared location +from shared.models.user import User + +__all__ = ["User"] diff --git a/bp/__init__.py b/bp/__init__.py index d25f3b4..dbf2396 100644 --- a/bp/__init__.py +++ b/bp/__init__.py @@ -1,5 +1,4 @@ from .wellknown.routes import register as register_wellknown_bp from .actors.routes import register as register_actors_bp from .identity.routes import register as register_identity_bp -from .auth.routes import register as register_auth_bp from .social.routes import register as register_social_bp diff --git a/cart/__init__.py b/cart/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cart/models/__init__.py b/cart/models/__init__.py new file mode 100644 index 0000000..508c4b0 --- /dev/null +++ b/cart/models/__init__.py @@ -0,0 +1,2 @@ +from .order import Order, OrderItem +from .page_config import PageConfig diff --git a/cart/models/order.py b/cart/models/order.py new file mode 100644 index 0000000..93953fe --- /dev/null +++ b/cart/models/order.py @@ -0,0 +1 @@ +from shared.models.order import Order, OrderItem # noqa: F401 diff --git a/cart/models/page_config.py b/cart/models/page_config.py new file mode 100644 index 0000000..ec23c6d --- /dev/null +++ b/cart/models/page_config.py @@ -0,0 +1 @@ +from shared.models.page_config import PageConfig # noqa: F401 diff --git a/events/__init__.py b/events/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/events/models/__init__.py b/events/models/__init__.py new file mode 100644 index 0000000..4006b10 --- /dev/null +++ b/events/models/__init__.py @@ -0,0 +1,4 @@ +from .calendars import ( + Calendar, CalendarEntry, CalendarSlot, + TicketType, Ticket, CalendarEntryPost, +) diff --git a/events/models/calendars.py b/events/models/calendars.py new file mode 100644 index 0000000..02025ff --- /dev/null +++ b/events/models/calendars.py @@ -0,0 +1,4 @@ +from shared.models.calendars import ( # noqa: F401 + Calendar, CalendarEntry, CalendarSlot, + TicketType, Ticket, CalendarEntryPost, +) diff --git a/market/__init__.py b/market/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/market/models/__init__.py b/market/models/__init__.py new file mode 100644 index 0000000..9ca9e79 --- /dev/null +++ b/market/models/__init__.py @@ -0,0 +1,8 @@ +from .market import ( + Product, ProductLike, ProductImage, ProductSection, + NavTop, NavSub, Listing, ListingItem, + LinkError, LinkExternal, SubcategoryRedirect, ProductLog, + ProductLabel, ProductSticker, ProductAttribute, ProductNutrition, ProductAllergen, + CartItem, +) +from .market_place import MarketPlace diff --git a/market/models/market.py b/market/models/market.py new file mode 100644 index 0000000..65511e1 --- /dev/null +++ b/market/models/market.py @@ -0,0 +1,7 @@ +from shared.models.market import ( # noqa: F401 + Product, ProductLike, ProductImage, ProductSection, + NavTop, NavSub, Listing, ListingItem, + LinkError, LinkExternal, SubcategoryRedirect, ProductLog, + ProductLabel, ProductSticker, ProductAttribute, ProductNutrition, ProductAllergen, + CartItem, +) diff --git a/market/models/market_place.py b/market/models/market_place.py new file mode 100644 index 0000000..ca65447 --- /dev/null +++ b/market/models/market_place.py @@ -0,0 +1 @@ +from shared.models.market_place import MarketPlace # noqa: F401 diff --git a/shared b/shared index 60cd08a..dfc41ad 160000 --- a/shared +++ b/shared @@ -1 +1 @@ -Subproject commit 60cd08adc917912a0c4da848a7ee9d38e9276115 +Subproject commit dfc41ada7db2d7458bc2641a80dd16ab96b123e7