diff --git a/api/controllers/admin.py b/api/controllers/admin.py index 34f7f1ae3..383ff8a33 100644 --- a/api/controllers/admin.py +++ b/api/controllers/admin.py @@ -6,7 +6,7 @@ from api.models.file import File from api.models.admin import Admin from api.schemas.user import AllUsersSchema, UserAllowedUsage -from api.schemas.badges import AllBadges +from api.schemas.badges import AllBadges, DatedBadgeSchema from api.schemas.file import FileSchema from api.schemas.errors import JsonNotFound from api.schemas.admin import AdminSchema @@ -73,3 +73,14 @@ def admin_add_usage(): db.session.commit() return jsonify(UserAllowedUsage().dump(user).data) + + +@router.route('/get_badges_dated', methods=['POST']) +def get_badges_dated(): + schema = DatedBadgeSchema() + input_data = request.get_json() + data, err = schema.load(input_data) + if err: + return jsonify(err) + dated_badges = Badges.query.filter(Badges.created_at <= data.get('end_date')).filter(Badges.created_at >= data.get('start_date')) + return jsonify(AllBadges(many=True).dump(dated_badges).data) diff --git a/api/migrations/versions/0a6d2e024685_.py b/api/migrations/versions/0a6d2e024685_.py new file mode 100644 index 000000000..28bd39c8c --- /dev/null +++ b/api/migrations/versions/0a6d2e024685_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: 0a6d2e024685 +Revises: 6619326ff408 +Create Date: 2018-06-19 19:51:17.650316 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '0a6d2e024685' +down_revision = '6619326ff408' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('Badges', sa.Column('created_at', sa.DateTime(), nullable=False)) + op.add_column('User', sa.Column('created_at', sa.DateTime(), nullable=False)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('User', 'created_at') + op.drop_column('Badges', 'created_at') + # ### end Alembic commands ### diff --git a/api/models/badges.py b/api/models/badges.py index c95511b3e..d22f1aca4 100644 --- a/api/models/badges.py +++ b/api/models/badges.py @@ -1,4 +1,5 @@ from api.db import db +from datetime import datetime import uuid @@ -11,6 +12,7 @@ class Badges(db.Model): text_color = db.Column(db.String(100), nullable=False) badge_size = db.Column(db.String(100), nullable=False) download_link = db.Column(db.String) + created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) user_id = db.Column(db.String(100), db.ForeignKey('User.id', ondelete='CASCADE')) def save_to_db(self): diff --git a/api/models/user.py b/api/models/user.py index a59efc40f..fef53e29e 100644 --- a/api/models/user.py +++ b/api/models/user.py @@ -1,4 +1,5 @@ from werkzeug.security import generate_password_hash +from datetime import datetime from api.db import db @@ -13,6 +14,7 @@ class User(db.Model): 'images?q=tbn:ANd9GcRWnJC8FyOPb9J-EjhQStzIZt_dk-dxuK-VyEnwQDdqIBKj4p7R8A') allowed_usage = db.Column(db.Integer) ftl = db.Column(db.Boolean, default=True) + created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) files = db.relationship('File', backref='uploader') badges = db.relationship('Badges', backref='creator') diff --git a/api/schemas/badges.py b/api/schemas/badges.py index 057c007c9..5039dc4b6 100644 --- a/api/schemas/badges.py +++ b/api/schemas/badges.py @@ -15,6 +15,7 @@ class Meta: text_color = fields.Str(required=True) badge_size = fields.Str(required=True) download_link = fields.Str(required=True) + created_at = fields.Date(required=True) user_id = fields.Relationship( self_url='/api/upload/get_file', self_url_kwargs={'file_id': ''}, @@ -37,6 +38,7 @@ class Meta: badge_id = fields.Str(required=True) text_color = fields.Str(required=True) badge_size = fields.Str(required=True) + created_at = fields.Date(required=True) user_id = fields.Relationship( self_url='/api/upload/get_file', self_url_kwargs={'file_id': ''}, @@ -60,6 +62,7 @@ class Meta: text_color = fields.Str(required=True) badge_size = fields.Str(required=True) download_link = fields.Str(required=True) + created_at = fields.Date(required=True) user_id = fields.Relationship( self_url='/api/upload/get_file', self_url_kwargs={'file_id': ''}, @@ -90,3 +93,13 @@ class Meta: include_resource_linkage=True, type_='User' ) + + +class DatedBadgeSchema(Schema): + class Meta: + type_ = 'dated-badges' + kwargs = {'id': ''} + + id = fields.Str(required=True, dump_only=True) + start_date = fields.Date(required=True) + end_date = fields.Date(required=True)