création de session fix en cours

This commit is contained in:
trochas
2026-01-09 12:58:20 +01:00
parent 9ac25f9ab6
commit 39e8be7427
5 changed files with 100 additions and 45 deletions

View File

@@ -2,7 +2,7 @@ import axios from "axios";
import keycloak from "./keycloak"; import keycloak from "./keycloak";
import { get } from "http"; import { get } from "http";
import { AdminDTO, AthleteDTO, CoachDTO } from "./classesDTO"; import { ActiviteDTO, AdminDTO, AthleteDTO, CoachDTO } from "./classesDTO";
const api = axios.create({ const api = axios.create({
@@ -55,7 +55,7 @@ export const athleteService = {
export const activiteService = { export const activiteService = {
create: (data: any) => api.post("/activite/create", data), create: (data: any) => api.post("/activite/create", data),
delete: (id: number | string) => api.delete(`/activite/delete/${id}`), delete: (id: number | string) => api.delete(`/activite/delete/${id}`),
update: (id: number | string, data: any) => api.post(`/activite/update/${id}`, data), update: (id: number | string, data: ActiviteDTO) => api.post(`/activite/update/${id}`, data),
getById: (id: number | string) => api.get(`/activite/${id}`), getById: (id: number | string) => api.get(`/activite/${id}`),
getAll: () => api.get(`/activite/all`), getAll: () => api.get(`/activite/all`),
getByTheme: (theme: string) => api.get(`/activite/theme/${encodeURIComponent(theme)}`), getByTheme: (theme: string) => api.get(`/activite/theme/${encodeURIComponent(theme)}`),

View File

@@ -118,7 +118,7 @@ export class Session{
name!: string; name!: string;
activitesID: number[] = []; activitesID: number[] = [];
activites: Activite[] = []; activites: Activite[] = [];
isRecurrent! : Boolean; isRecurrent! : boolean;
creneau!: Date; creneau!: Date;
coach!: Coach; coach!: Coach;
athletesID!: number[] athletesID!: number[]
@@ -145,6 +145,21 @@ export class Session{
this.ligne = []; //TODO this.ligne = []; //TODO
} }
toDTO():SessionDTO{
const dto:SessionDTO = {
id: 0,
name: this.name,
isRecurrent: this.isRecurrent,
creneau: this.creneau.toISOString(),
duree: this.duree,
groupe: "", //TODO
coachId: this.coach?.id ?? null,
athleteIds: [],
activiteIds: []
};
return dto;
}
} }
export class Activite{ export class Activite{
@@ -168,6 +183,18 @@ export class Activite{
} }
toDTO():ActiviteDTO{
const dto:ActiviteDTO = {
id: 0,
name: this.nom,
duree: this.duree,
dataActivite: [],
sessionId: this.session.id,
theme: this.theme
};
return dto;
}
} }
/* /*
export function getUserTest():User{ export function getUserTest():User{

View File

@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
import { Session, User, Coach, Activite, Groupe } from "../classes"; import { Session, User, Coach, Activite, Groupe } from "../classes";
import { useLocalData } from "../context/useLocalData"; import { useLocalData } from "../context/useLocalData";
import { activiteService, sessionService } from "../api"; import { activiteService, sessionService } from "../api";
import { postSession } from "../requetes"; import { createSessionAPI, postSession } from "../requetes";
export const CreateSession = () => { export const CreateSession = () => {
const {user} = useLocalData(); const {user} = useLocalData();
@@ -10,7 +10,7 @@ export const CreateSession = () => {
const [activities, setActivities] = useState<Activite[]>([]); const [activities, setActivities] = useState<Activite[]>([]);
const [name,setName] = useState(""); const [name,setName] = useState("");
const [groupe, setGroupe] = useState<Groupe>(""); const [groupe, setGroupe] = useState<Groupe>("");
const [creneau, setCreneau] = useState(""); const [creneau, setCreneau] = useState<Date>(new Date());
const [duree, setDuree] = useState<number>(0); const [duree, setDuree] = useState<number>(0);
const [activiteNom, setActiviteNom] = useState(""); const [activiteNom, setActiviteNom] = useState("");
const [activiteTheme, setActiviteTheme] = useState(""); const [activiteTheme, setActiviteTheme] = useState("");
@@ -34,19 +34,25 @@ export const CreateSession = () => {
} }
async function handleCreateSession() { async function handleCreateSession() {
session.groupe = groupe;
session.creneau = creneau;
session.duree = duree;
session.isRecurrent = isRecurent;
session.activites = activities;
postSession(session); await createSessionAPI(session);
console.log("Session créée"); console.log("Session créée");
// reset // reset
setName(""); setName("");
setGroupe(""); setGroupe("");
setCreneau(""); setCreneau(new Date());
setDuree(0); setDuree(0);
setIsRecurent(false); setIsRecurent(false);
setActivities([]); setActivities([]);
} setSession(new Session());
}
@@ -62,7 +68,7 @@ export const CreateSession = () => {
</label> </label>
<label> <label>
Creneau: Creneau:
<input type="datetime-local" value={creneau} onChange={e => setCreneau(e.target.value)} /> <input type="datetime-local" value={creneau.toISOString().slice(0, 16)} onChange={e => setCreneau(new Date(e.target.value))} />
</label> </label>
<label> <label>
Duree (minutes): Duree (minutes):

View File

@@ -1,52 +1,79 @@
import { useState } from "react"; import { useEffect, useState } from "react";
import { useLocalData } from "../context/useLocalData"; import { useLocalData } from "../context/useLocalData";
import { Activite, Athlete, Coach , Session, Ligne, Admin } from "../classes"; import { Activite, Athlete, Coach , Session, Ligne, Admin } from "../classes";
import {calculTempsDeJeuParLigne} from "../utils/ligneUtils"; import {calculTempsDeJeuParLigne} from "../utils/ligneUtils";
import { keyboard } from "@testing-library/user-event/dist/keyboard"; import { keyboard } from "@testing-library/user-event/dist/keyboard";
import ObjectSession from "./object/session"; import ObjectSession from "./object/session";
import ObjectUser from "./object/user"; import ObjectUser from "./object/user";
import { getAllSessionsAPI } from "../requetes";
import { useKeycloak } from "@react-keycloak/web";
export type keyWord = "athletes" | "activites" | "coachs" | "sessions"| "lignes"; export type keyWord = "athletes" | "activites" | "coachs" | "sessions"| "lignes";
export default function RessourcePanel() { export default function RessourcePanel() {
const { keycloak } = useKeycloak();
const { user } = useLocalData(); const { user } = useLocalData();
//const user = getUserTest(); //TODO //const user = getUserTest(); //TODO
const [value,setValue] = useState<keyWord>("athletes"); const [value,setValue] = useState<keyWord>("sessions");
if (user instanceof Athlete) return null; const[allAthletes,setAllAthletes] = useState<Athlete[]>([]);
const[allCoachs,setAllCoachs] = useState<Coach[]>([]);
const[allSessions,setAllSessions] = useState<Session[]>([]);
const[allLignes,setAllLignes] = useState<Ligne[]>([]);
const allAthletes: Athlete[] = []; async function updateAthletes() {
}
const allActivites: Activite[] = [];
const allCoachs: Coach[] = [];
const allSessions: Session[] = [];
const allLignes: Ligne[] = [];
async function updateCoachs() {
}
async function updateSessions() {
const sessions:Session[] = await getAllSessionsAPI();
}
async function updateLignes() {
}
useEffect(() => {
if(keycloak.authenticated){
updateSessions();
{(user instanceof Admin || user instanceof Coach) &&
updateAthletes();
updateCoachs();
updateLignes();
}
}
},[user])
return ( return (
<div className="ressource_panel"> <div className="ressource_panel">
<div>
Sélectionner une ressource:
</div>
<select
onChange={(e) => {
const v = (e.target as HTMLSelectElement).value;
setValue(v as keyWord)
}}>
<option value="athletes">Athlètes</option>
<option value="activites">Activités</option>
{user instanceof Admin && <option value="coachs"> Coachs</option>}
<option value="sessions"> Sessions</option>
<option value="lignes"> Lignes</option>
</select> {(user instanceof Admin || user instanceof Coach) &&
<div>
<div>
Sélectionner une ressource:
</div>
<select
onChange={(e) => {
const v = (e.target as HTMLSelectElement).value;
setValue(v as keyWord)
}}>
<option value="sessions"> Sessions</option>
{(user instanceof Admin || user instanceof Coach) &&<option value="athletes">Athlètes</option>}
{(user instanceof Admin || user instanceof Coach) &&<option value="activites">Activités</option>}
{(user instanceof Admin || user instanceof Coach) && <option value="coachs"> Coachs</option>}
{(user instanceof Admin || user instanceof Coach) &&<option value="lignes"> Lignes</option>}
</select>
</div>
}
<div className="edt_sessions_panel"> <div className="edt_sessions_panel">
<h3>Liste des {value}</h3> <h3>Liste des {value}</h3>
@@ -81,3 +108,4 @@ import ObjectUser from "./object/user";
</div> </div>
); );
} }

View File

@@ -68,14 +68,7 @@ export async function updateActivitiesOfSessionAPI(session:Session,activities:Ac
try { try {
const session_id = session.id const session_id = session.id
for (const activity of activities) { for (const activity of activities) {
const response = await activiteService.update(activity.id!, { const response = await activiteService.update(activity.id!, activity.toDTO());
name: activity.nom,
duree: activity.duree,
date: activity.data,
theme: activity.theme,
sessionId: session_id,
},
);
} }
// To refresh the activities in the session object // To refresh the activities in the session object
const response = await sessionService.getActivities(session_id!); const response = await sessionService.getActivities(session_id!);
@@ -119,9 +112,10 @@ export async function updateAllUserAPI(){
// POST ///////////////////////////////////////////////////////// // POST /////////////////////////////////////////////////////////
// COACH ADMIN // COACH ADMIN
export async function createSessionAPI(sessionDTO: any): Promise<Session> { export async function createSessionAPI(session: Session): Promise<Session> {
try { try {
const response = await api.post<Session>("/session/create", sessionDTO); const response = await api.post<Session>("/session/create", session.toDTO());
//TODO Activites
return response.data; return response.data;
} catch (error) { } catch (error) {
console.error("Error creating session:", error); console.error("Error creating session:", error);