diff --git a/app/models.py b/app/models.py index 419200b6..e081a707 100644 --- a/app/models.py +++ b/app/models.py @@ -30,6 +30,8 @@ from app.config import ( DISABLE_ONBOARDING, UNSUBSCRIBER, ALIAS_RANDOM_SUFFIX_LENGTH, + MAX_NB_SUBDOMAIN, + MAX_NB_DIRECTORY, ) from app.db import Session from app.errors import AliasInTrashError, DirectoryInTrashError, SubdomainInTrashError @@ -397,6 +399,29 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle): server_default="0", ) + _directory_quota = sa.Column( + "directory_quota", sa.Integer, default=50, nullable=False, server_default="50" + ) + + _subdomain_quota = sa.Column( + "subdomain_quota", sa.Integer, default=5, nullable=False, server_default="5" + ) + + @property + def directory_quota(self): + return min( + self._directory_quota, + MAX_NB_DIRECTORY - Directory.filter_by(user_id=self.id).count(), + ) + + @property + def subdomain_quota(self): + return min( + self._subdomain_quota, + MAX_NB_SUBDOMAIN + - CustomDomain.filter_by(user_id=self.id, is_sl_subdomain=True).count(), + ) + @staticmethod def subdomain_is_available(): return SLDomain.filter_by(can_use_subdomain=True).count() > 0 diff --git a/migrations/versions/2021_111810_b8fd175c084a_.py b/migrations/versions/2021_111810_b8fd175c084a_.py new file mode 100644 index 00000000..a904487a --- /dev/null +++ b/migrations/versions/2021_111810_b8fd175c084a_.py @@ -0,0 +1,31 @@ +"""empty message + +Revision ID: b8fd175c084a +Revises: 9031c9e28510 +Create Date: 2021-11-18 10:29:13.512071 + +""" +import sqlalchemy_utils +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'b8fd175c084a' +down_revision = '9031c9e28510' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('users', sa.Column('directory_quota', sa.Integer(), server_default='50', nullable=False)) + op.add_column('users', sa.Column('subdomain_quota', sa.Integer(), server_default='5', nullable=False)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('users', 'subdomain_quota') + op.drop_column('users', 'directory_quota') + # ### end Alembic commands ###