Skip to content

Commit 8a40104

Browse files
committed
feat: add customer product status
1 parent 8a40972 commit 8a40104

8 files changed

+207
-379
lines changed
Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
"""initialize models
2+
3+
Revision ID: 067f32395ad5
4+
Revises:
5+
Create Date: 2025-04-22 14:39:11.438511
6+
7+
"""
8+
from typing import Sequence, Union
9+
10+
from alembic import op
11+
import sqlalchemy as sa
12+
13+
14+
# revision identifiers, used by Alembic.
15+
revision: str = '067f32395ad5'
16+
down_revision: Union[str, None] = None
17+
branch_labels: Union[str, Sequence[str], None] = None
18+
depends_on: Union[str, Sequence[str], None] = None
19+
20+
21+
def upgrade() -> None:
22+
# ### commands auto generated by Alembic - please adjust! ###
23+
op.create_table('contracts',
24+
sa.Column('uuid', sa.UUID(), nullable=False),
25+
sa.Column('key', sa.Enum('AGB_APP_ZUM_DOC_PATIENT', 'AGB_MEDIQUU_CONNECT', 'AGB_APP_ZUM_DOC', 'AGB_MEDIQUU_NETZMANAGER', 'AGB_MEDIQUU_CHAT', 'PRIVACY_CONCEPT', 'PRIVACY_CONCEPT_TASKS', 'AVV', 'AVV_TASKS', 'NDA', 'SUB', 'TOM', name='contractkeyenum'), nullable=False),
26+
sa.Column('version', sa.String(), nullable=False),
27+
sa.Column('url', sa.String(), nullable=True),
28+
sa.Column('created_at', sa.DateTime(), nullable=True),
29+
sa.PrimaryKeyConstraint('uuid')
30+
)
31+
op.create_table('customers',
32+
sa.Column('uuid', sa.UUID(), nullable=False),
33+
sa.Column('name', sa.String(), nullable=False),
34+
sa.Column('email', sa.String(), nullable=False),
35+
sa.Column('website_url', sa.String(), nullable=True),
36+
sa.Column('phone_number', sa.String(), nullable=True),
37+
sa.Column('address', sa.String(), nullable=False),
38+
sa.Column('house_number', sa.String(), nullable=False),
39+
sa.Column('care_of', sa.String(), nullable=True),
40+
sa.Column('postal_code', sa.String(), nullable=False),
41+
sa.Column('city', sa.String(), nullable=False),
42+
sa.Column('country', sa.String(), nullable=False),
43+
sa.Column('created_at', sa.DateTime(), nullable=True),
44+
sa.Column('updated_at', sa.DateTime(), nullable=True),
45+
sa.PrimaryKeyConstraint('uuid'),
46+
sa.UniqueConstraint('email')
47+
)
48+
op.create_table('products',
49+
sa.Column('uuid', sa.UUID(), nullable=False),
50+
sa.Column('name', sa.String(), nullable=False),
51+
sa.Column('description', sa.Text(), nullable=True),
52+
sa.Column('image_url', sa.Text(), nullable=True),
53+
sa.Column('created_at', sa.DateTime(), nullable=True),
54+
sa.Column('updated_at', sa.DateTime(), nullable=True),
55+
sa.PrimaryKeyConstraint('uuid')
56+
)
57+
op.create_table('messages',
58+
sa.Column('uuid', sa.UUID(), nullable=False),
59+
sa.Column('customer_uuid', sa.UUID(), nullable=False),
60+
sa.Column('subject', sa.String(), nullable=False),
61+
sa.Column('message', sa.Text(), nullable=False),
62+
sa.Column('status', sa.Enum('UNREAD', 'READ', 'ARCHIVED', name='messagestatusenum'), nullable=False),
63+
sa.Column('created_at', sa.DateTime(), nullable=True),
64+
sa.Column('updated_at', sa.DateTime(), nullable=True),
65+
sa.ForeignKeyConstraint(['customer_uuid'], ['customers.uuid'], ),
66+
sa.PrimaryKeyConstraint('uuid')
67+
)
68+
op.create_table('product_contracts',
69+
sa.Column('uuid', sa.UUID(), nullable=False),
70+
sa.Column('product_uuid', sa.UUID(), nullable=False),
71+
sa.Column('contract_uuid', sa.UUID(), nullable=False),
72+
sa.ForeignKeyConstraint(['contract_uuid'], ['contracts.uuid'], ),
73+
sa.ForeignKeyConstraint(['product_uuid'], ['products.uuid'], ),
74+
sa.PrimaryKeyConstraint('uuid')
75+
)
76+
op.create_table('product_plans',
77+
sa.Column('uuid', sa.UUID(), nullable=False),
78+
sa.Column('product_uuid', sa.UUID(), nullable=False),
79+
sa.Column('type', sa.Enum('ONCE', 'RECURRING', 'LIFETIME', 'TRIAL', name='plantypeenum'), nullable=False),
80+
sa.Column('name', sa.String(), nullable=False),
81+
sa.Column('cost_euro', sa.Numeric(), nullable=False),
82+
sa.Column('recurring_month', sa.Integer(), nullable=True),
83+
sa.Column('created_at', sa.DateTime(), nullable=True),
84+
sa.Column('updated_at', sa.DateTime(), nullable=True),
85+
sa.ForeignKeyConstraint(['product_uuid'], ['products.uuid'], ),
86+
sa.PrimaryKeyConstraint('uuid')
87+
)
88+
op.create_table('users',
89+
sa.Column('uuid', sa.UUID(), nullable=False),
90+
sa.Column('customer_uuid', sa.UUID(), nullable=True),
91+
sa.Column('name', sa.String(), nullable=False),
92+
sa.Column('email', sa.String(), nullable=False),
93+
sa.Column('role', sa.Enum('ADMIN', 'NORMAL', name='roleenum'), nullable=False),
94+
sa.Column('created_at', sa.DateTime(), nullable=True),
95+
sa.Column('updated_at', sa.DateTime(), nullable=True),
96+
sa.ForeignKeyConstraint(['customer_uuid'], ['customers.uuid'], ),
97+
sa.PrimaryKeyConstraint('uuid'),
98+
sa.UniqueConstraint('email')
99+
)
100+
op.create_table('vouchers',
101+
sa.Column('uuid', sa.UUID(), nullable=False),
102+
sa.Column('code', sa.String(), nullable=False),
103+
sa.Column('description', sa.Text(), nullable=True),
104+
sa.Column('product_plan_uuid', sa.UUID(), nullable=False),
105+
sa.Column('discount_percentage', sa.Numeric(), nullable=True),
106+
sa.Column('discount_fixed_amount', sa.Numeric(), nullable=True),
107+
sa.Column('valid_from', sa.DateTime(), nullable=False),
108+
sa.Column('valid_until', sa.DateTime(), nullable=False),
109+
sa.Column('max_redemptions', sa.Integer(), nullable=False),
110+
sa.Column('redeemed_count', sa.Integer(), nullable=True),
111+
sa.Column('created_at', sa.DateTime(), nullable=True),
112+
sa.Column('updated_at', sa.DateTime(), nullable=True),
113+
sa.ForeignKeyConstraint(['product_plan_uuid'], ['product_plans.uuid'], ),
114+
sa.PrimaryKeyConstraint('uuid'),
115+
sa.UniqueConstraint('code')
116+
)
117+
op.create_table('customer_products',
118+
sa.Column('uuid', sa.UUID(), nullable=False),
119+
sa.Column('customer_uuid', sa.UUID(), nullable=False),
120+
sa.Column('product_uuid', sa.UUID(), nullable=False),
121+
sa.Column('product_plan_uuid', sa.UUID(), nullable=False),
122+
sa.Column('status', sa.Enum('TRIALING', 'ACTIVE', 'PENDING_ACTIVATION', 'PENDING_PAYMENT', 'CANCELLATION_SCHEDULED', 'CANCELED', 'EXPIRED', 'REFUNDED', name='customerproductstatusenum'), nullable=False),
123+
sa.Column('seats', sa.Integer(), nullable=True),
124+
sa.Column('start_date', sa.DateTime(), nullable=False),
125+
sa.Column('end_date', sa.DateTime(), nullable=False),
126+
sa.Column('next_payment_date', sa.DateTime(), nullable=True),
127+
sa.Column('voucher_uuid', sa.UUID(), nullable=True),
128+
sa.Column('cancellation_date', sa.DateTime(), nullable=True),
129+
sa.Column('created_at', sa.DateTime(), nullable=True),
130+
sa.Column('updated_at', sa.DateTime(), nullable=True),
131+
sa.ForeignKeyConstraint(['customer_uuid'], ['customers.uuid'], ),
132+
sa.ForeignKeyConstraint(['product_plan_uuid'], ['product_plans.uuid'], ),
133+
sa.ForeignKeyConstraint(['product_uuid'], ['products.uuid'], ),
134+
sa.ForeignKeyConstraint(['voucher_uuid'], ['vouchers.uuid'], ),
135+
sa.PrimaryKeyConstraint('uuid')
136+
)
137+
op.create_table('customer_product_contracts',
138+
sa.Column('uuid', sa.UUID(), nullable=False),
139+
sa.Column('product_customer_uuid', sa.UUID(), nullable=False),
140+
sa.Column('contract_uuid', sa.UUID(), nullable=False),
141+
sa.Column('accepted_at', sa.DateTime(), nullable=False),
142+
sa.ForeignKeyConstraint(['contract_uuid'], ['contracts.uuid'], ),
143+
sa.ForeignKeyConstraint(['product_customer_uuid'], ['customer_products.uuid'], ),
144+
sa.PrimaryKeyConstraint('uuid')
145+
)
146+
op.create_table('invoices',
147+
sa.Column('uuid', sa.UUID(), nullable=False),
148+
sa.Column('customer_uuid', sa.UUID(), nullable=False),
149+
sa.Column('customer_product_uuid', sa.UUID(), nullable=False),
150+
sa.Column('title', sa.String(), nullable=True),
151+
sa.Column('status', sa.Enum('PENDING', 'PAID', 'OVERDUE', name='invoicestatusenum'), nullable=False),
152+
sa.Column('date', sa.DateTime(), nullable=False),
153+
sa.Column('total_amount', sa.Numeric(), nullable=False),
154+
sa.Column('created_at', sa.DateTime(), nullable=True),
155+
sa.Column('updated_at', sa.DateTime(), nullable=True),
156+
sa.ForeignKeyConstraint(['customer_product_uuid'], ['customer_products.uuid'], ),
157+
sa.ForeignKeyConstraint(['customer_uuid'], ['customers.uuid'], ),
158+
sa.PrimaryKeyConstraint('uuid')
159+
)
160+
# ### end Alembic commands ###
161+
162+
163+
def downgrade() -> None:
164+
# ### commands auto generated by Alembic - please adjust! ###
165+
op.drop_table('invoices')
166+
op.drop_table('customer_product_contracts')
167+
op.drop_table('customer_products')
168+
op.drop_table('vouchers')
169+
op.drop_table('users')
170+
op.drop_table('product_plans')
171+
op.drop_table('product_contracts')
172+
op.drop_table('messages')
173+
op.drop_table('products')
174+
op.drop_table('customers')
175+
op.drop_table('contracts')
176+
# ### end Alembic commands ###

app/migrations/versions/43e025f88dd6_link_customer_product_and_invoice.py

Lines changed: 0 additions & 30 deletions
This file was deleted.

app/migrations/versions/7d78060e6773_link_customer_product_and_invoice.py

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)