Skip to content

Commit 61d9f4c

Browse files
committed
Initial commit, updated models and views, created event_type table, added event_type_uuid to tables that should use this, added can_checkin column to ticket_type table
1 parent 5782b0c commit 61d9f4c

File tree

11 files changed

+182
-2
lines changed

11 files changed

+182
-2
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
"""Multitenant test
2+
3+
Revision ID: 0eee850a7ace
4+
Revises: b648caf8d8fb
5+
Create Date: 2025-08-25 18:04:28.925486
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '0eee850a7ace'
14+
down_revision = 'b648caf8d8fb'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
op.create_table('event_type',
22+
sa.Column('uuid', sa.UUID(), nullable=False),
23+
sa.Column('name', sa.Text(), nullable=False),
24+
sa.PrimaryKeyConstraint('uuid', name=op.f('pk_event_type')),
25+
sa.UniqueConstraint('uuid', name=op.f('uq_event_type_uuid'))
26+
)
27+
op.add_column('crew', sa.Column('event_type', sa.UUID(), nullable=True))
28+
op.create_foreign_key(op.f('fk_crew_event_type_event_type'), 'crew', 'event_type', ['event_type'], ['uuid'])
29+
op.add_column('event', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
30+
op.create_foreign_key(op.f('fk_event_event_type_uuid_event_type'), 'event', 'event_type', ['event_type_uuid'], ['uuid'])
31+
op.add_column('location', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
32+
op.create_foreign_key(op.f('fk_location_event_type_uuid_event_type'), 'location', 'event_type', ['event_type_uuid'], ['uuid'])
33+
op.add_column('position', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
34+
op.create_foreign_key(op.f('fk_position_event_type_uuid_event_type'), 'position', 'event_type', ['event_type_uuid'], ['uuid'])
35+
op.add_column('seatmap', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
36+
op.create_foreign_key(op.f('fk_seatmap_event_type_uuid_event_type'), 'seatmap', 'event_type', ['event_type_uuid'], ['uuid'])
37+
op.add_column('seatmap_background', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
38+
op.create_foreign_key(op.f('fk_seatmap_background_event_type_uuid_event_type'), 'seatmap_background', 'event_type', ['event_type_uuid'], ['uuid'])
39+
op.add_column('ticket_type', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
40+
op.add_column('ticket_type', sa.Column('can_checkin', sa.Boolean(), server_default='false', nullable=False))
41+
op.create_foreign_key(op.f('fk_ticket_type_event_type_uuid_event_type'), 'ticket_type', 'event_type', ['event_type_uuid'], ['uuid'])
42+
op.add_column('user_positions', sa.Column('event_type_uuid', sa.UUID(), nullable=True))
43+
op.create_foreign_key(op.f('fk_user_positions_event_type_uuid_event_type'), 'user_positions', 'event_type', ['event_type_uuid'], ['uuid'])
44+
# ### end Alembic commands ###
45+
46+
47+
def downgrade():
48+
# ### commands auto generated by Alembic - please adjust! ###
49+
op.drop_constraint(op.f('fk_user_positions_event_type_uuid_event_type'), 'user_positions', type_='foreignkey')
50+
op.drop_column('user_positions', 'event_type_uuid')
51+
op.drop_constraint(op.f('fk_ticket_type_event_type_uuid_event_type'), 'ticket_type', type_='foreignkey')
52+
op.drop_column('ticket_type', 'can_checkin')
53+
op.drop_column('ticket_type', 'event_type_uuid')
54+
op.drop_constraint(op.f('fk_seatmap_background_event_type_uuid_event_type'), 'seatmap_background', type_='foreignkey')
55+
op.drop_column('seatmap_background', 'event_type_uuid')
56+
op.drop_constraint(op.f('fk_seatmap_event_type_uuid_event_type'), 'seatmap', type_='foreignkey')
57+
op.drop_column('seatmap', 'event_type_uuid')
58+
op.drop_constraint(op.f('fk_position_event_type_uuid_event_type'), 'position', type_='foreignkey')
59+
op.drop_column('position', 'event_type_uuid')
60+
op.drop_constraint(op.f('fk_location_event_type_uuid_event_type'), 'location', type_='foreignkey')
61+
op.drop_column('location', 'event_type_uuid')
62+
op.drop_constraint(op.f('fk_event_event_type_uuid_event_type'), 'event', type_='foreignkey')
63+
op.drop_column('event', 'event_type_uuid')
64+
op.drop_constraint(op.f('fk_crew_event_type_event_type'), 'crew', type_='foreignkey')
65+
op.drop_column('crew', 'event_type')
66+
op.drop_table('event_type')
67+
# ### end Alembic commands ###

phoenixRest/models/core/event.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from phoenixRest.models import Base
1919

20+
from phoenixRest.models.core.event_type import EventType
2021
from phoenixRest.models.core.user import User
2122
from phoenixRest.models.tickets.ticket import Ticket
2223
from phoenixRest.models.tickets.ticket_type import TicketType
@@ -41,6 +42,9 @@ class Event(Base):
4142
__tablename__ = "event"
4243
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
4344

45+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
46+
event_type = relationship("EventType")
47+
4448
booking_time = Column(DateTime, nullable=False)
4549

4650
# Delta in seconds from booking time
@@ -83,6 +87,7 @@ def __json__(self, request):
8387
return {
8488
'name': str(self.name),
8589
'uuid': str(self.uuid),
90+
'event_type_uuid': str(self.event_type_uuid),
8691
'participant_age_limit_inclusive': self.participant_age_limit_inclusive,
8792
'crew_age_limit_inclusive': self.crew_age_limit_inclusive,
8893
'booking_time': int(self.booking_time.timestamp()),
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from sqlalchemy import (
2+
Column,
3+
DateTime,
4+
ForeignKey,
5+
Integer,
6+
UniqueConstraint,
7+
Text,
8+
Integer,
9+
Boolean,
10+
Enum,
11+
Table
12+
)
13+
from sqlalchemy.dialects.postgresql import UUID
14+
15+
from sqlalchemy.orm import relationship
16+
from sqlalchemy import and_
17+
18+
from phoenixRest.models import Base
19+
20+
import logging
21+
log = logging.getLogger(__name__)
22+
23+
import uuid
24+
25+
class EventType(Base):
26+
__tablename__ = "event_type"
27+
28+
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
29+
30+
name = Column(Text, nullable=False)
31+
32+
def __init__(self, name: str):
33+
self.name = name
34+
35+
def __json__(self, request):
36+
return {
37+
'uuid': str(self.uuid),
38+
'name': str(self.name)
39+
}

phoenixRest/models/core/location.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
)
1414
from sqlalchemy.dialects.postgresql import UUID
1515

16+
from sqlalchemy.orm import relationship
17+
1618
from phoenixRest.models import Base
1719

1820
import uuid
@@ -21,6 +23,9 @@ class Location(Base):
2123
__tablename__ = "location"
2224
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
2325

26+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
27+
event_type = relationship("EventType")
28+
2429
name = Column(Text, nullable=False)
2530
address = Column(Text, nullable=False)
2631

@@ -31,6 +36,7 @@ def __init__(self, name: str, address: str):
3136
def __json__(self, request):
3237
return {
3338
'uuid': str(self.uuid),
39+
'event_type_uuid': str(self.event_type_uuid),
3440
'name': self.name,
3541
'address': self.address,
3642
}

phoenixRest/models/crew/crew.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from phoenixRest.models import Base
1919

20+
from phoenixRest.models.core.event_type import EventType
2021
from phoenixRest.models.core.user import User
2122

2223
from datetime import datetime, timedelta
@@ -27,7 +28,10 @@
2728
class Crew(Base):
2829
__tablename__ = "crew"
2930
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
30-
31+
32+
event_type = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
33+
event = relationship("EventType")
34+
3135
name = Column(Text, nullable=False)
3236
description = Column(Text, nullable=False)
3337

@@ -49,6 +53,7 @@ def __init__(self, name: str, description: str):
4953
def __json__(self, request):
5054
return {
5155
'uuid': str(self.uuid),
56+
'event_type_uuid': str(self.event_type_uuid),
5257
'name': self.name,
5358
'description': self.description,
5459
'active': self.active,

phoenixRest/models/crew/position.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ class Position(Base):
2525
__tablename__ = "position"
2626
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
2727

28+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
29+
event_type = relationship("EventType")
30+
2831
crew_uuid = Column(UUID(as_uuid=True), ForeignKey("crew.uuid"), nullable=True)
2932
crew = relationship("Crew")
3033

@@ -49,6 +52,7 @@ def __init__(self, name: str, description: str):
4952
def __json__(self, request):
5053
return {
5154
'uuid': str(self.uuid),
55+
'event_type_uuid': str(self.event_type_uuid),
5256
'name': self.name,
5357
'description': self.description,
5458
'is_vanity': self.is_vanity,

phoenixRest/models/crew/position_mapping.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class PositionMapping(Base):
2222
__tablename__ = "user_positions"
2323
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
2424

25+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
26+
event_type = relationship("EventType")
27+
2528
position_uuid = Column(UUID(as_uuid=True), ForeignKey("position.uuid"), nullable=False)
2629
position = relationship("Position", back_populates="position_mappings", uselist=False)
2730

@@ -46,6 +49,7 @@ def __init__(self, user, position, event=None):
4649
def __json__(self, request):
4750
return {
4851
'uuid': self.uuid,
52+
'event_type_uuid': str(self.event_type_uuid),
4953
'position_uuid': self.position_uuid,
5054
'user_uuid': self.user_uuid,
5155
'event_uuid': self.event_uuid,

phoenixRest/models/tickets/seatmap.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Seatmap(Base):
2929
__tablename__ = "seatmap"
3030
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
3131

32+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
33+
event_type = relationship("EventType")
34+
3235
name = Column(Text, nullable=False)
3336
description = Column(Text, nullable=False)
3437

@@ -50,6 +53,7 @@ def __init__(self, name: str, description: str):
5053
def __json__(self, request):
5154
return {
5255
'uuid': str(self.uuid),
56+
'event_type_uuid': str(self.event_type_uuid),
5357
'name': str(self.name),
5458
'description': str(self.description),
5559
'background': map_seatmap_background_no_metadata(self.background, request) if self.background is not None else None,

phoenixRest/models/tickets/seatmap_background.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class SeatmapBackground(Base):
2424
__tablename__ = "seatmap_background"
2525
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
2626

27+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
28+
event_type = relationship("EventType")
29+
2730
created = Column(DateTime, nullable=False, server_default='NOW()')
2831
extension = Column(Text, nullable=False)
2932

@@ -47,6 +50,7 @@ def get_fs_location(self, request):
4750
def __json__(self, request):
4851
return {
4952
'uuid': str(self.uuid),
53+
'event_type_uuid': str(self.event_type_uuid),
5054
'uploader_uuid': self.uploader_uuid,
5155
'created': int(self.created.timestamp()),
5256
'url': self.get_url(request)

phoenixRest/models/tickets/ticket_type.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
)
1313
from sqlalchemy.dialects.postgresql import UUID
1414

15+
from sqlalchemy.orm import relationship
16+
1517
from phoenixRest.models import Base
1618

1719
import uuid
@@ -20,6 +22,9 @@ class TicketType(Base):
2022
__tablename__ = "ticket_type"
2123
uuid = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
2224

25+
event_type_uuid = Column(UUID(as_uuid=True), ForeignKey("event_type.uuid"), nullable=True)
26+
event_type = relationship("EventType")
27+
2328
name = Column(Text, nullable=False)
2429

2530
price = Column(Integer, nullable=False)
@@ -31,6 +36,8 @@ class TicketType(Base):
3136
requires_membership = Column(Boolean, server_default="false", nullable=False)
3237
grants_membership = Column(Boolean, server_default="true", nullable=False)
3338

39+
can_checkin = Column(Boolean, server_default="false", nullable=False)
40+
3441
description = Column(Text)
3542

3643

@@ -45,11 +52,13 @@ def __init__(self, name: str, price: int, description: str, refundable: bool, se
4552
def __json__(self, request):
4653
return {
4754
'uuid': str(self.uuid),
55+
'event_type_uuid': str(self.event_type_uuid),
4856
'name': self.name,
4957
'price': self.price,
5058
'refundable': self.refundable,
5159
'seatable': self.seatable,
5260
'description': self.description,
5361
'requires_membership': self.requires_membership,
54-
'grants_membership': self.grants_membership
62+
'grants_membership': self.grants_membership,
63+
'can_checkin': self.can_checkin
5564
}

0 commit comments

Comments
 (0)