]> git.lizzy.rs Git - cheatdb.git/commitdiff
Filter tags by available packages in package search
authorrubenwardy <rw@rubenwardy.com>
Sat, 18 Jul 2020 02:14:56 +0000 (03:14 +0100)
committerrubenwardy <rw@rubenwardy.com>
Sat, 18 Jul 2020 02:14:56 +0000 (03:14 +0100)
app/blueprints/packages/packages.py
app/querybuilder.py

index f8124ea754164b1fb9ae34536678b797171cc0dd..17a12a17a4d0e97da74b585ce55fb6a94749bfd6 100644 (file)
@@ -96,8 +96,9 @@ def list_all():
                qb.show_discarded = True
                topics = qb.buildTopicQuery().all()
 
-       tags = db.session.query(func.count(Tags.c.tag_id), Tag) \
-               .select_from(Tag).outerjoin(Tags).group_by(Tag.id).order_by(db.asc(Tag.title)).all()
+       tags_query = db.session.query(func.count(Tags.c.tag_id), Tag) \
+               .select_from(Tag).join(Tags).join(Package).group_by(Tag.id).order_by(db.asc(Tag.title))
+       tags = qb.filterPackageQuery(tags_query).all()
 
        selected_tags = set(qb.tags)
 
index 43229dbc77d3e0b3f68b2380d09dbd64ef34fc9c..1d6b6f063c2368117d96ba1f789da503301cf838 100644 (file)
@@ -76,45 +76,12 @@ class QueryBuilder:
                else:
                        query = Package.query.filter_by(soft_deleted=False, approved=True)
 
+               return self.filterPackageQuery(self.orderPackageQuery(query))
+
+       def filterPackageQuery(self, query):
                if len(self.types) > 0:
                        query = query.filter(Package.type.in_(self.types))
 
-               if self.search:
-                       query = query.search(self.search, sort=self.order_by is None)
-
-               if self.random:
-                       query = query.order_by(func.random())
-               else:
-                       to_order = None
-                       if self.order_by is None and self.search:
-                               pass
-                       elif self.order_by is None or self.order_by == "score":
-                               to_order = Package.score
-                       elif self.order_by == "name":
-                               to_order = Package.name
-                       elif self.order_by == "title":
-                               to_order = Package.title
-                       elif self.order_by == "downloads":
-                               to_order = Package.downloads
-                       elif self.order_by == "created_at" or self.order_by == "date":
-                               to_order = Package.created_at
-                       elif self.order_by == "approved_at" or self.order_by == "date":
-                               to_order = Package.approved_at
-                       elif self.order_by == "last_release":
-                               to_order = PackageRelease.releaseDate
-                       else:
-                               abort(400)
-
-                       if to_order:
-                               if self.order_dir == "asc":
-                                       to_order = db.asc(to_order)
-                               elif self.order_dir == "desc":
-                                       to_order = db.desc(to_order)
-                               else:
-                                       abort(400)
-
-                               query = query.order_by(to_order)
-
                if self.author:
                        author = User.query.filter_by(username=self.author).first()
                        if not author:
@@ -150,6 +117,46 @@ class QueryBuilder:
 
                return query
 
+       def orderPackageQuery(self, query):
+               if self.search:
+                       query = query.search(self.search, sort=self.order_by is None)
+
+               if self.random:
+                       query = query.order_by(func.random())
+                       return query
+
+               to_order = None
+               if self.order_by is None and self.search:
+                       pass
+               elif self.order_by is None or self.order_by == "score":
+                       to_order = Package.score
+               elif self.order_by == "name":
+                       to_order = Package.name
+               elif self.order_by == "title":
+                       to_order = Package.title
+               elif self.order_by == "downloads":
+                       to_order = Package.downloads
+               elif self.order_by == "created_at" or self.order_by == "date":
+                       to_order = Package.created_at
+               elif self.order_by == "approved_at" or self.order_by == "date":
+                       to_order = Package.approved_at
+               elif self.order_by == "last_release":
+                       to_order = PackageRelease.releaseDate
+               else:
+                       abort(400)
+
+               if to_order:
+                       if self.order_dir == "asc":
+                               to_order = db.asc(to_order)
+                       elif self.order_dir == "desc":
+                               to_order = db.desc(to_order)
+                       else:
+                               abort(400)
+
+                       query = query.order_by(to_order)
+
+               return query
+
        def buildTopicQuery(self, show_added=False):
                query = ForumTopic.query