diff --git a/app/api/helpers/static.py b/app/api/helpers/static.py index dd8a092e47..29e20845a9 100644 --- a/app/api/helpers/static.py +++ b/app/api/helpers/static.py @@ -423,3 +423,11 @@ 'TWD', 'USD' ] + +AGE_GROUP_CHOICES = [ + '19 or less', + '20 to 29', + '30 to 39', + '40 to 49', + '50 or above' +] diff --git a/app/api/schema/attendees.py b/app/api/schema/attendees.py index 5c1ba3db63..932f6f4f25 100644 --- a/app/api/schema/attendees.py +++ b/app/api/schema/attendees.py @@ -1,3 +1,4 @@ +from marshmallow import validate from marshmallow_jsonapi import fields from marshmallow_jsonapi.flask import Relationship @@ -5,7 +6,7 @@ from app.api.schema.base import SoftDeletionSchema from app.api.helpers.validations import validate_complex_fields_json from marshmallow import validates_schema - +from app.api.helpers.static import AGE_GROUP_CHOICES class AttendeeSchemaPublic(SoftDeletionSchema): """ @@ -48,6 +49,7 @@ def validate_json(self, data, original_data): facebook = fields.Url(allow_none=True) github = fields.Url(allow_none=True) gender = fields.Str(allow_none=True) + age_group = fields.Str(validate=validate.OneOf(choices=AGE_GROUP_CHOICES), allow_none=True) birth_date = fields.DateTime(allow_none=True) ticket_id = fields.Str(allow_none=True) diff --git a/app/models/custom_form.py b/app/models/custom_form.py index 729b45074a..a1a6e25716 100644 --- a/app/models/custom_form.py +++ b/app/models/custom_form.py @@ -58,6 +58,7 @@ "facebook": {"include": 0, "require": 0}, "github": {"include": 1, "require": 0}, "gender": {"include": 0, "require": 0}, + "age_group": {"include": 0, "require": 0}, } session_form_str = json.dumps(SESSION_FORM, separators=(',', ':')) diff --git a/app/models/ticket_holder.py b/app/models/ticket_holder.py index 6c51aad1df..544d2cc426 100644 --- a/app/models/ticket_holder.py +++ b/app/models/ticket_holder.py @@ -35,6 +35,7 @@ class TicketHolder(SoftDeletionModel): facebook: str = db.Column(db.String) github: str = db.Column(db.String) gender: str = db.Column(db.String) + age_group: str = db.Column(db.String) birth_date: datetime = db.Column(db.DateTime(timezone=True)) pdf_url: str = db.Column(db.String) ticket_id: int = db.Column(db.Integer, db.ForeignKey('tickets.id', ondelete='CASCADE')) diff --git a/migrations/versions/rev-2020-01-17-18:09:31-6ebafb385765_.py b/migrations/versions/rev-2020-01-17-18:09:31-6ebafb385765_.py new file mode 100644 index 0000000000..a5f0f98282 --- /dev/null +++ b/migrations/versions/rev-2020-01-17-18:09:31-6ebafb385765_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: 6ebafb385765 +Revises: 30a490ad1609 +Create Date: 2020-01-17 18:09:31.897988 + +""" + +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utils + + +# revision identifiers, used by Alembic. +revision = '6ebafb385765' +down_revision = '30a490ad1609' + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('settings', 'secret') + op.add_column('ticket_holders', sa.Column('age_group', sa.String(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('ticket_holders', 'age_group') + op.add_column('settings', sa.Column('secret', sa.VARCHAR(), autoincrement=False, nullable=True)) + # ### end Alembic commands ###