From 6a0e1625961c2ef1a8b57935ea87c192b15889fc Mon Sep 17 00:00:00 2001 From: Klemek Date: Thu, 16 Jul 2026 16:36:55 +0200 Subject: [PATCH] feat: metadata --- app/server.py | 13 +++++++++++++ resources/lang/en.json | 3 ++- resources/lang/fr.json | 3 ++- resources/ts/api/meta.ts | 6 ++++++ resources/ts/components/PageFooter.vue | 17 ++++++++++++++++- resources/ts/types.ts | 5 +++++ 6 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 resources/ts/api/meta.ts diff --git a/app/server.py b/app/server.py index 71d3078..d93970d 100644 --- a/app/server.py +++ b/app/server.py @@ -6,6 +6,7 @@ import flask_limiter import flask_limiter.util import gunicorn.app.base import tortoise +from tortoise.functions import Count from app import PKG_NAME from app.lang import get_lang @@ -56,6 +57,18 @@ class Server(gunicorn.app.base.BaseApplication): lang=lambda key: get_lang(locale, key), ) + @self.app.route("/api/meta", methods=["GET"]) + async def metadata() -> dict: + return { + "tasks": await Task.all().count(), + "lists": ( + await Task.all() + .annotate(count=Count("list_name", distinct=True)) + .first() + .values("count") + )["count"], + } + @self.app.route("/api/lists//tasks", methods=["GET"]) async def get_tasks(list_name: str) -> list: return await Task.filter(list_name=list_name[:128]).values() diff --git a/resources/lang/en.json b/resources/lang/en.json index f4f7c25..2a246d5 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -84,5 +84,6 @@ "save_button": "Save task", "clone_button": "Clone task", "delete_button": "Delete task", - "recent": "Recent lists" + "recent": "Recent lists", + "metadata": "{lists} lists / {tasks} tasks" } diff --git a/resources/lang/fr.json b/resources/lang/fr.json index 05e4462..d3e57d8 100644 --- a/resources/lang/fr.json +++ b/resources/lang/fr.json @@ -84,5 +84,6 @@ "save_button": "Sauvegarder la tâche", "clone_button": "Cloner la tâche", "delete_button": "Supprimer la tâche", - "recent": "Listes récentes" + "recent": "Listes récentes", + "metadata": "{lists} listes / {tasks} tâches" } diff --git a/resources/ts/api/meta.ts b/resources/ts/api/meta.ts new file mode 100644 index 0000000..a92393a --- /dev/null +++ b/resources/ts/api/meta.ts @@ -0,0 +1,6 @@ +import type { Metadata } from "@/types"; + +export async function getMetadata(): Promise { + const response = await fetch(`/api/meta`); + return await response.json(); +} diff --git a/resources/ts/components/PageFooter.vue b/resources/ts/components/PageFooter.vue index 0706f4e..c2a30ca 100644 --- a/resources/ts/components/PageFooter.vue +++ b/resources/ts/components/PageFooter.vue @@ -1,9 +1,23 @@