diff --git a/app/models.py b/app/models.py index 32c7802c..1a7a8e27 100644 --- a/app/models.py +++ b/app/models.py @@ -1824,6 +1824,22 @@ class LifetimeCoupon(db.Model, ModelMixin): paid = db.Column(db.Boolean, default=False, server_default="0", nullable=False) +class Coupon(db.Model, ModelMixin): + code = db.Column(db.String(128), nullable=False, unique=True) + + # by default a coupon is for 1 year + nb_year = db.Column(db.Integer, nullable=False, server_default="1", default=1) + + # whether the coupon has been used + used = db.Column(db.Boolean, default=False, server_default="0", nullable=False) + + # the user who uses the code + # non-null when the coupon is used + used_by_user_id = db.Column( + db.ForeignKey(User.id, ondelete="cascade"), nullable=True + ) + + class Directory(db.Model, ModelMixin): user_id = db.Column(db.ForeignKey(User.id, ondelete="cascade"), nullable=False) name = db.Column(db.String(128), unique=True, nullable=False) diff --git a/migrations/versions/2021_071219_c31a081eab74_.py b/migrations/versions/2021_071219_c31a081eab74_.py new file mode 100644 index 00000000..a11c9adb --- /dev/null +++ b/migrations/versions/2021_071219_c31a081eab74_.py @@ -0,0 +1,40 @@ +"""empty message + +Revision ID: c31a081eab74 +Revises: f3f19998b755 +Create Date: 2021-07-12 19:25:44.745045 + +""" +import sqlalchemy_utils +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'c31a081eab74' +down_revision = 'f3f19998b755' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('coupon', + sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), + sa.Column('created_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=False), + sa.Column('updated_at', sqlalchemy_utils.types.arrow.ArrowType(), nullable=True), + sa.Column('code', sa.String(length=128), nullable=False), + sa.Column('nb_year', sa.Integer(), server_default='1', nullable=False), + sa.Column('used', sa.Boolean(), server_default='0', nullable=False), + sa.Column('used_by_user_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['used_by_user_id'], ['users.id'], ondelete='cascade'), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('code') + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('coupon') + # ### end Alembic commands ###