From 38071165d192b1bee118723664ed10d3c495f737 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 30 Jan 2022 03:35:02 +0000 Subject: [PATCH] Add welcome dialog API --- app/blueprints/api/endpoints.py | 23 ++++++++++++++++++++++- app/flatpages/help/api.md | 2 ++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/blueprints/api/endpoints.py b/app/blueprints/api/endpoints.py index 6f051ea..72533f3 100644 --- a/app/blueprints/api/endpoints.py +++ b/app/blueprints/api/endpoints.py @@ -13,13 +13,14 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . + import math from typing import List import flask_sqlalchemy from flask import request, jsonify, current_app from flask_login import current_user, login_required -from sqlalchemy.orm import subqueryload, joinedload +from sqlalchemy.orm import joinedload from sqlalchemy.sql.expression import func from app import csrf @@ -477,6 +478,26 @@ def homepage(): }) +@bp.route("/api/welcome/v1/") +@cors_allowed +def welcome_v1(): + featured = Package.query \ + .filter(Package.type == PackageType.GAME, Package.state == PackageState.APPROVED, + Package.tags.any(name="featured")) \ + .order_by(func.random()) \ + .limit(5).all() + + mtg = Package.query.filter(Package.author.has(username="Minetest"), Package.name == "minetest_game").one() + featured.insert(2, mtg) + + def map_packages(packages: List[Package]): + return [pkg.getAsDictionaryShort(current_app.config["BASE_URL"]) for pkg in packages] + + return jsonify({ + "featured": map_packages(featured), + }) + + @bp.route("/api/minetest_versions/") @cors_allowed def versions(): diff --git a/app/flatpages/help/api.md b/app/flatpages/help/api.md index deeaea6..adb1e82 100644 --- a/app/flatpages/help/api.md +++ b/app/flatpages/help/api.md @@ -378,3 +378,5 @@ Supported query parameters: * `pop_txp`: popular textures * `pop_game`: popular games * `high_reviewed`: highest reviewed +* GET `/api/welcome/v1/` ([View](/api/welcome/v1/)) - in-menu welcome dialog. Experimental (may change without warning) + * `featured`: featured games