]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add downloads column to Package
authorrubenwardy <rw@rubenwardy.com>
Thu, 9 Jul 2020 00:11:50 +0000 (01:11 +0100)
committerrubenwardy <rw@rubenwardy.com>
Thu, 9 Jul 2020 00:11:50 +0000 (01:11 +0100)
Fixes #200

app/blueprints/homepage/__init__.py
app/blueprints/metrics/__init__.py
app/blueprints/packages/releases.py
app/models.py
app/templates/packages/view.html
migrations/versions/c141a63b2487_.py [new file with mode: 0644]

index 5df612f738bb175dae20111b666a5573db39f737..4f6d5ebbc515165f6329ace831081804a4e3d8df 100644 (file)
@@ -21,7 +21,7 @@ def home():
        pop_mod = join(query.filter_by(type=PackageType.MOD).order_by(db.desc(Package.score))).limit(8).all()
        pop_gam = join(query.filter_by(type=PackageType.GAME).order_by(db.desc(Package.score))).limit(4).all()
        pop_txp = join(query.filter_by(type=PackageType.TXP).order_by(db.desc(Package.score))).limit(4).all()
-       downloads_result = db.session.query(func.sum(PackageRelease.downloads)).one_or_none()
+       downloads_result = db.session.query(func.sum(Package.downloads)).one_or_none()
        downloads = 0 if not downloads_result or not downloads_result[0] else downloads_result[0]
        return render_template("index.html", count=count, downloads=downloads, \
                        new=new, pop_mod=pop_mod, pop_txp=pop_txp, pop_gam=pop_gam)
index 70ea39db8079b6d87658742f3bb91b0253acb13c..4d3c3cfea37585f241d4176a6122bfbeab0400bc 100644 (file)
@@ -42,8 +42,7 @@ def generate_metrics(full=False):
 
                return ret + "\n"
 
-
-       downloads_result = db.session.query(func.sum(PackageRelease.downloads)).one_or_none()
+       downloads_result = db.session.query(func.sum(Package.downloads)).one_or_none()
        downloads = 0 if not downloads_result or not downloads_result[0] else downloads_result[0]
 
        packages = Package.query.filter_by(approved=True, soft_deleted=False).count()
index b3a2f835beb2cbe41949159d8e77a51f644b8007..81365219b3e1e3c6d36d5001e399b34d21fc5e1e 100644 (file)
@@ -140,6 +140,7 @@ def download_release(package, id):
                                })
 
                        Package.query.filter_by(id=package.id).update({
+                                       "downloads": Package.downloads + 1,
                                        "score": Package.score + bonus
                                })
 
index 56adc8eb1c6648b44d323b5c2b173415fe030c86..79b70cf2187b9f877e188915e2ce39cce54324a0 100644 (file)
@@ -431,7 +431,8 @@ class Package(db.Model):
        approved     = db.Column(db.Boolean, nullable=False, default=False)
        soft_deleted = db.Column(db.Boolean, nullable=False, default=False)
 
-       score        = db.Column(db.Float, nullable=False, default=0)
+       score         = db.Column(db.Float, nullable=False, default=0)
+       downloads     = db.Column(db.Integer, nullable=False, default=0)
 
        review_thread_id = db.Column(db.Integer, db.ForeignKey("thread.id"), nullable=True, default=None)
        review_thread    = db.relationship("Thread", foreign_keys=[review_thread_id])
@@ -658,12 +659,6 @@ class Package(db.Model):
 
                return None
 
-       def getDownloadCount(self):
-               counter = 0
-               for release in self.releases:
-                       counter += release.downloads
-               return counter
-
        def checkPerm(self, user, perm):
                if not user.is_authenticated:
                        return False
@@ -709,8 +704,7 @@ class Package(db.Model):
                        raise Exception("Permission {} is not related to packages".format(perm.name))
 
        def setStartScore(self):
-               downloads = db.session.query(func.sum(PackageRelease.downloads)). \
-                               filter(PackageRelease.package_id == self.id).scalar() or 0
+               downloads = self.downloads
 
                forum_score = 0
                forum_bonus = 0
index ceae6310f6fe6aa610302080aacfb98775c68ff0..cd7ba9dc5d2a13aabced2feaef270701796c7882 100644 (file)
@@ -63,7 +63,7 @@
                                        </a>
                                        <a class="btn" rel="nofollow" href="{{ package.getDownloadURL() }}">
                                                <i class="fas fa-download"></i>
-                                               <span class="count">{{ package.getDownloadCount() }}</span>
+                                               <span class="count">{{ package.downloads }}</span>
                                        </a>
                                        <a class="btn" href="{{ url_for('threads.list_all', pid=package.id) }}">
                                                <i class="fas fa-comment-alt"></i>
diff --git a/migrations/versions/c141a63b2487_.py b/migrations/versions/c141a63b2487_.py
new file mode 100644 (file)
index 0000000..571eef6
--- /dev/null
@@ -0,0 +1,38 @@
+"""empty message
+
+Revision ID: c141a63b2487
+Revises: cb6ab141c522
+Create Date: 2020-07-09 00:05:39.845465
+
+"""
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy import orm, func
+from app.models import Package, PackageRelease
+
+
+# revision identifiers, used by Alembic.
+revision = 'c141a63b2487'
+down_revision = 'cb6ab141c522'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+       op.add_column('package', sa.Column('downloads', sa.Integer(), nullable=False, server_default="0"))
+
+       bind = op.get_bind()
+       session = orm.Session(bind=bind)
+
+       for package in session.query(Package).all():
+               downloads_result = session.query(func.sum(PackageRelease.downloads)).filter_by(package_id=package.id).one_or_none()
+               downloads = 0 if not downloads_result or not downloads_result[0] else downloads_result[0]
+               package.downloads = downloads
+
+       session.commit()
+
+
+def downgrade():
+       # ### commands auto generated by Alembic - please adjust! ###
+       op.drop_column('package', 'downloads')
+       # ### end Alembic commands ###