From f254c011b6187858866099d9b293bf26876f0f0b Mon Sep 17 00:00:00 2001 From: Luke Else Date: Tue, 6 Feb 2024 19:15:44 +0000 Subject: [PATCH] #5 Latest views are now displayed on the stats page --- controllers/database/stats.py | 26 ++++++++++++++------------ controllers/web/stats.py | 22 ++++++++++++++++++---- templates/product.html | 1 + templates/stats.html | 16 +++++++++++++--- 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/controllers/database/stats.py b/controllers/database/stats.py index 59d00ba..283385c 100644 --- a/controllers/database/stats.py +++ b/controllers/database/stats.py @@ -49,30 +49,32 @@ class StatsController(DatabaseController): WHERE userID = ? """ - self.get_many(query, params) + return self.get_many(query, params) def read_days(self, product_id: int, prev_days: int = 7 - ) -> list[Stats] | None: + ) -> dict[int, list[Stats]] | None: """ Returns data from within the given number of days """ data = self.read_product(product_id) - filtered_data = list(filter( - lambda d: is_within_x_days(d.viewDate, prev_days), - data - )) + # Filter the values to only be within X prev days + filtered_data = list() + if data is not None: + filtered_data = list(filter( + lambda d: is_within_x_days(d.viewDate, prev_days), + data + )) day_views: dict[int, list[Stats]] = dict() + for i in range(0, prev_days): + day_views[i] = list() + + # Organise data into distinct for view in filtered_data: diff = datetime.now()-view.viewDate - - if diff.days not in day_views: - day_views[diff.days] = [] - day_views[diff.days].append(view) - for days in day_views.values(): - print(len(days)) + return day_views def update(self): print("Doing work") diff --git a/controllers/web/stats.py b/controllers/web/stats.py index a2ff060..6fa9771 100644 --- a/controllers/web/stats.py +++ b/controllers/web/stats.py @@ -2,6 +2,7 @@ in the web app """ import json +import random from flask import Blueprint from flask import render_template, redirect, request, session, flash @@ -19,8 +20,6 @@ def stats_index(): db = StatsController() data = db.read() test = list(map(lambda d: d.productID, data)) - for i in test: - print(i) return render_template("index.html", content="stats.html", data=test) @@ -28,8 +27,23 @@ def stats_index(): def view_product_stats(id: int): """ Page to view statistics for a given product """ db = StatsController() - data = db.read_days(id, 7) - return render_template("index.html", content="stats.html", data=data) + + prev_days: int = request.args.get('prev_days', 7, int) + data = db.read_days(id, prev_days) + + product_frequency_data = dict(map( + # lambda k, v: (k, random.randint(0, 100)), + lambda k, v: (k, len(v)), + data.keys(), + data.values() + )) + + return render_template( + "index.html", + content="stats.html", + headings=list(reversed(product_frequency_data.keys())), + data=list(reversed(product_frequency_data.values())) + ) @blueprint.route('/user/') diff --git a/templates/product.html b/templates/product.html index 0bdd561..377d8c8 100644 --- a/templates/product.html +++ b/templates/product.html @@ -46,6 +46,7 @@ {% if product.quantityAvailable > 0 %}
In Stock
{{product.quantityAvailable}} Available
+ {% else %}
Out of Stock
{% endif %} diff --git a/templates/stats.html b/templates/stats.html index 89cf9fa..cbb0886 100644 --- a/templates/stats.html +++ b/templates/stats.html @@ -2,7 +2,7 @@
- +
@@ -13,9 +13,9 @@ new Chart(ctx, { type: 'line', data: { - labels: {{data}}, + labels: {{headings}}, datasets: [{ - label: '# of Votes', + label: '# of Views', data: {{data}}, borderWidth: 1 }] @@ -23,7 +23,17 @@ options: { scales: { y: { + title: { + display: true, + text: "Num Views" + }, beginAtZero: true + }, + x: { + title: { + display: true, + text: "Prev Days" + }, } } }