Add downloads by package graph

This commit is contained in:
rubenwardy
2022-11-09 19:45:25 +00:00
parent f7742d47ff
commit 31aef061fb
3 changed files with 75 additions and 6 deletions

View File

@@ -1,5 +1,6 @@
import datetime
from datetime import timedelta
from app.models import User, Package, PackageDailyStats, db
from app.models import User, Package, PackageDailyStats, db, PackageState
from sqlalchemy import func
@@ -59,4 +60,48 @@ def get_package_stats_for_user(user: User):
.group_by(PackageDailyStats.date) \
.all()
return _flatten_data(stats)
results = _flatten_data(stats)
results["package_downloads"] = get_package_overview_for_user(user, stats[0].date, stats[-1].date)
return results
def get_package_overview_for_user(user: User, start_date: datetime.date, end_date: datetime.date):
stats = db.session \
.query(PackageDailyStats.package_id, PackageDailyStats.date,
(PackageDailyStats.platform_minetest + PackageDailyStats.platform_other).label("downloads")) \
.filter(PackageDailyStats.package.has(author_id=user.id, state=PackageState.APPROVED)) \
.order_by(db.asc(PackageDailyStats.package_id), db.asc(PackageDailyStats.date)) \
.all()
stats_by_package = {}
for stat in stats:
bucket = stats_by_package.get(stat.package_id, [])
stats_by_package[stat.package_id] = bucket
bucket.append(stat)
package_title_by_id = {}
for package in user.packages.filter_by(state=PackageState.APPROVED).all():
package_title_by_id[package.id] = package.title
result = {}
for package_id, stats in stats_by_package.items():
i = 0
row = []
result[package_title_by_id[package_id]] = row
for date in daterange(start_date, end_date):
if i >= len(stats):
row.append(0)
continue
stat = stats[i]
if stat.date == date:
row.append(stat.downloads)
i += 1
else:
row.append(0)
return result