Added stats

This commit is contained in:
marc
2025-03-23 00:19:33 +01:00
parent 2f7c7c2429
commit c097811e40
10 changed files with 144 additions and 44 deletions

View File

@@ -1,8 +1,29 @@
from typing import Optional
from folkugat_web.dal.sql.playlists import query as playlists_q
from folkugat_web.dal.sql.temes import query as temes_q
from folkugat_web.model import sessions as sessions_model
from folkugat_web.model import temes as model
def get_tema_by_id(tema_id: int) -> model.Tema | None:
return temes_q.get_tema_by_id(tema_id)
def tema_compute_stats(
tema: model.Tema,
tune_sessions_dict: dict[int, list[sessions_model.Session]] | None = None,
) -> model.Tema:
if tema.id:
if tune_sessions_dict is None:
tune_sessions_dict = playlists_q.get_tune_sessions(tema_ids=[tema.id])
if tema.id and (tune_sessions := tune_sessions_dict.get(tema.id)):
tema.stats = model.Stats(
times_played=len(tune_sessions),
sessions_played=list(reversed(sorted(tune_sessions, key=lambda s: s.date))),
)
return tema
def temes_compute_stats(temes: list[model.Tema]) -> list[model.Tema]:
tema_ids = [tema.id for tema in temes if tema.id is not None]
tune_sessions_dict = playlists_q.get_tune_sessions(tema_ids=tema_ids)
return [tema_compute_stats(tema=tema, tune_sessions_dict=tune_sessions_dict) for tema in temes]