Aggancia funzioni di libreria e route push alla rosa reale

obiettivi.ts, palloni-core.ts, presenze-mese.ts e user-store.ts non
dipendono più dalla lista statica di crapp-data.ts ma ricevono/leggono la
rosa reale (percentuali obiettivo, rotazione turno palloni, riepilogo
presenze mensile, identità del dispositivo). Le route API per le notifiche
push (push-messaggio, promemoria-palloni, sollecita-presenze) leggono la
squadra lato server con leggiGiocatoriSquadra(), filtrando attivo.
This commit is contained in:
2026-09-03 10:16:52 +02:00
parent 7e93229eee
commit b6c0f40f66
8 changed files with 51 additions and 25 deletions
+7 -1
View File
@@ -1,4 +1,6 @@
import { createFileRoute } from "@tanstack/react-router";
import { nomeCompleto } from "@/lib/giocatori-squadra";
import { leggiGiocatoriSquadra } from "@/lib/giocatori-squadra.server";
import { completaTurni, destinatariPromemoriaPalloni, oggiISO } from "@/lib/palloni-core";
import { inviaPush } from "@/lib/webpush.server";
import { leggiEventi } from "@/lib/eventi.server";
@@ -15,7 +17,11 @@ export const Route = createFileRoute("/api/public/promemoria-palloni")({
const salvati: Record<string, string> = {};
for (const riga of righe ?? []) salvati[riga.evento_id] = riga.giocatore_id;
const eventi = await leggiEventi();
const turni = completaTurni(salvati, eventi);
const squadra = await leggiGiocatoriSquadra();
const rosa = squadra
.filter((g) => g.attivo)
.map((g) => ({ id: g.id, nome: nomeCompleto(g) }));
const turni = completaTurni(salvati, eventi, rosa);
const oggi = oggiISO();
const destinatari = destinatariPromemoriaPalloni(turni, eventi, oggi);
+9 -3
View File
@@ -1,6 +1,7 @@
import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { giocatori } from "@/lib/crapp-data";
import { nomeCompleto } from "@/lib/giocatori-squadra";
import { leggiGiocatoriSquadra } from "@/lib/giocatori-squadra.server";
import { completaTurni, messaggioPalloniOggi, oggiISO } from "@/lib/palloni-core";
import { leggiEventi } from "@/lib/eventi.server";
@@ -43,11 +44,16 @@ export const Route = createFileRoute("/api/public/push-messaggio")({
const salvati: Record<string, string> = {};
for (const riga of righe ?? []) salvati[riga.evento_id] = riga.giocatore_id;
const eventi = await leggiEventi();
const turni = completaTurni(salvati, eventi);
const squadra = await leggiGiocatoriSquadra();
const rosa = squadra
.filter((g) => g.attivo)
.map((g) => ({ id: g.id, nome: nomeCompleto(g) }));
const turni = completaTurni(salvati, eventi, rosa);
const oggi = oggiISO();
const mioId = iscrizione.giocatore_id;
const nome = giocatori.find((g) => g.id === mioId)?.nome ?? "";
const giocatore = squadra.find((g) => g.id === mioId);
const nome = giocatore ? nomeCompleto(giocatore) : "";
return Response.json(messaggioPalloniOggi(turni, eventi, oggi, mioId, nome));
},
+5 -2
View File
@@ -1,7 +1,8 @@
import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { formatData, giocatori } from "@/lib/crapp-data";
import { formatData } from "@/lib/crapp-data";
import { leggiEventi } from "@/lib/eventi.server";
import { leggiGiocatoriSquadra } from "@/lib/giocatori-squadra.server";
import { inviaPush } from "@/lib/webpush.server";
const schema = z.object({
@@ -27,8 +28,10 @@ export const Route = createFileRoute("/api/public/sollecita-presenze")({
.select("giocatore_id, stato")
.eq("evento_id", evento.id);
const squadra = await leggiGiocatoriSquadra();
const stati = new Map((righe ?? []).map((r) => [r.giocatore_id, r.stato]));
const destinatari = giocatori
const destinatari = squadra
.filter((g) => g.attivo)
.filter((g) => {
const stato = stati.get(g.id);
return stato === undefined || stato === "forse";