feat: decouple events from shared_lib, add app-owned models

Phase 1-3 of decoupling:
- path_setup.py adds project root to sys.path
- Events-owned models in events/models/ (calendars with all related models)
- All imports updated: shared.infrastructure, shared.db, shared.browser, etc.
- Calendar uses container_type/container_id instead of post_id FK
- CalendarEntryPost uses content_type/content_id (generic content refs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
giles
2026-02-11 12:46:36 +00:00
parent 95d954fdb6
commit 154f968296
37 changed files with 506 additions and 93 deletions

View File

@@ -17,8 +17,8 @@ from sqlalchemy import select
from sqlalchemy.orm import selectinload
from models.calendars import CalendarEntry
from shared.cart_identity import current_cart_identity
from suma_browser.app.redis_cacher import clear_cache
from shared.infrastructure.cart_identity import current_cart_identity
from shared.browser.app.redis_cacher import clear_cache
from .services.tickets import (
create_ticket,
@@ -37,7 +37,7 @@ def register() -> Blueprint:
@bp.get("/")
async def my_tickets():
"""List all tickets for the current user/session."""
from suma_browser.app.utils.htmx import is_htmx_request
from shared.browser.app.utils.htmx import is_htmx_request
ident = current_cart_identity()
tickets = await get_user_tickets(
@@ -62,7 +62,7 @@ def register() -> Blueprint:
@bp.get("/<code>/")
async def ticket_detail(code: str):
"""View a single ticket with QR code."""
from suma_browser.app.utils.htmx import is_htmx_request
from shared.browser.app.utils.htmx import is_htmx_request
ticket = await get_ticket_by_code(g.s, code)
if not ticket:

View File

@@ -14,6 +14,7 @@ from sqlalchemy.orm import selectinload
from models.calendars import Ticket, TicketType, CalendarEntry
async def create_ticket(
session: AsyncSession,
*,