Feat: Ajout des types de sessions en map

This commit is contained in:
Amaël Kesteman
2026-01-08 12:04:05 +01:00
parent 1eef3c4944
commit 40c9d091b8
3 changed files with 19 additions and 14 deletions

View File

@@ -4,16 +4,16 @@ export type Role = "Admin" | "Athlete" | "Coach";
export class User{ export class User{
id!: number; id!: number;
keycloakId!: String; keycloakId!: String;
nom!: String; nom!: string;
prenom!:String; prenom!:string;
sessions: Session[] = []; //nb: Admin liaison non symétrique /!\ sessions: Session[] = []; //nb: Admin liaison non symétrique /!\
email!: String; email!: string;
role!: Role; role!: Role;
} }
export class Ligne{ export class Ligne{
id!: number; id!: number;
nom!: String; nom!: string;
composition!: Athlete[] //les joueurs compososant la ligne composition!: Athlete[] //les joueurs compososant la ligne
tempsDeJeu!: number; // en minutes tempsDeJeu!: number; // en minutes
} }
@@ -23,19 +23,19 @@ export class Admin extends User{
} }
export class Athlete extends User{ export class Athlete extends User{
nom!: String; nom!: string;
groupe!: Groupe; groupe!: Groupe;
role!: Role; role!: Role;
} }
export class Coach extends User{ export class Coach extends User{
nom!: String; nom!: string;
role!: Role; role!: Role;
} }
export class Session{ export class Session{
id!: number; id!: number;
name!: String; name!: string;
activites: Activite[] = []; activites: Activite[] = [];
isRecurrent! : Boolean; isRecurrent! : Boolean;
creneau!: Date; creneau!: Date;
@@ -48,10 +48,10 @@ export class Session{
export class Activite{ export class Activite{
id!: number; id!: number;
nom!: String; nom!: string;
session!: Session; session!: Session;
theme!: String; theme!: string;
data!: Map<String,String>; data!: Map<string,string>;
duree!: number; duree!: number;
} }

View File

@@ -72,6 +72,7 @@ function AthleteList({ athletes, sessions }: AthleteListProps) {
<div><strong>Nombre de sessions:</strong> {stats.nbSessions}</div> <div><strong>Nombre de sessions:</strong> {stats.nbSessions}</div>
<div><strong>Sessions/semaine:</strong> {stats.nbSessionsPerWeek.toFixed(2)}</div> <div><strong>Sessions/semaine:</strong> {stats.nbSessionsPerWeek.toFixed(2)}</div>
<div><strong>Alerte:</strong> {alerte}</div> <div><strong>Alerte:</strong> {alerte}</div>
<div><strong>Distribuion des activités:</strong> {stats.distributions}</div>
</li> </li>
); );
})} })}

View File

@@ -1,10 +1,10 @@
import { Athlete, Session } from '../classes'; import { Athlete, Session , Activite} from '../classes';
export interface StatsAthlete { export interface StatsAthlete {
nbSessions: number; nbSessions: number;
nbSessionsPerWeek: number; nbSessionsPerWeek: number;
isAlerte: boolean; isAlerte: boolean;
distributions: Map<string, number>; //le nom de l'activité et son nombre distributions: Map<String, number>; //le nom de l'activité et son nombre
} }
export function niveauAlerte(stats: StatsAthlete, seuilCritique = 0, seuilMax = 0) { export function niveauAlerte(stats: StatsAthlete, seuilCritique = 0, seuilMax = 0) {
@@ -30,9 +30,13 @@ export function calculStatsAthlete(sessions: Session[], athlete: Athlete, debut:
//incrementation (verifie si recurent ou non) //incrementation (verifie si recurent ou non)
const increment = session.isRecurrent ? nb_semaine : 1; const increment = session.isRecurrent ? nb_semaine : 1;
nb_sessions += increment; nb_sessions += increment;
//distribution des activités
session.activites.forEach(activite => {
const currentCount = distributions.get(activite.nom) || 0;
distributions.set(activite.nom, currentCount + increment);
});
} });
);
const nbSessionsPerWeek = nb_sessions / nb_semaine; const nbSessionsPerWeek = nb_sessions / nb_semaine;
const isAlerte = nbSessionsPerWeek > 8; const isAlerte = nbSessionsPerWeek > 8;