merge
This commit is contained in:
@@ -6,6 +6,7 @@ import Login from './components/login';
|
||||
import { LocalDataProvider } from './provider/LocalDataProvider';
|
||||
import ENT from './components/ent';
|
||||
import SwitchThemeColor from './components/SwitchThemeColor';
|
||||
import CreateSession from './components/createSession'
|
||||
|
||||
|
||||
const keycloakInitOptions = {
|
||||
@@ -22,6 +23,7 @@ function App() {
|
||||
<h1>Frisbyee</h1>
|
||||
<Login/>
|
||||
<ENT/>
|
||||
<CreateSession/>
|
||||
</div>
|
||||
</LocalDataProvider>
|
||||
</ReactKeycloakProvider>
|
||||
|
||||
15
front_end/src/api.ts
Normal file
15
front_end/src/api.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import axios from "axios";
|
||||
import keycloak from "./keycloak";
|
||||
|
||||
const api = axios.create({
|
||||
baseURL: "http://localhost:8081/api",
|
||||
});
|
||||
|
||||
api.interceptors.request.use((config) => {
|
||||
if (keycloak?.token) {
|
||||
config.headers.Authorization = `Bearer ${keycloak.token}`;
|
||||
}
|
||||
return config;
|
||||
});
|
||||
|
||||
export default api;
|
||||
@@ -1,4 +1,4 @@
|
||||
export type Groupe = "Entrainement" | "Competition" | "Loisir";
|
||||
export type Groupe = "Entrainement" | "Competition" | "Loisir"| "";
|
||||
|
||||
export class User{
|
||||
id!: number;
|
||||
@@ -21,6 +21,7 @@ export class Coach extends User{
|
||||
|
||||
export class Session{
|
||||
id!: number;
|
||||
name!: String;
|
||||
activites!: Activite[];
|
||||
isRecurent! : Boolean;
|
||||
creneau!: Date;
|
||||
|
||||
106
front_end/src/components/createSession.tsx
Normal file
106
front_end/src/components/createSession.tsx
Normal file
@@ -0,0 +1,106 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { Session, User, Coach, Activite, Groupe } from "../classes";
|
||||
import { useLocalData } from "../context/useLocalData";
|
||||
|
||||
|
||||
export const CreateSession = () => {
|
||||
const {user} = useLocalData()
|
||||
const [name,setName] = useState("");
|
||||
const [groupe, setGroupe] = useState<Groupe>("");
|
||||
const [creneau, setCreneau] = useState("");
|
||||
const [duree, setDuree] = useState<number>(0);
|
||||
const [activities, setActivities] = useState<Activite[]>([]);
|
||||
const [activiteNom, setActiviteNom] = useState("");
|
||||
const [activiteTheme, setActiviteTheme] = useState("");
|
||||
const [activiteDuree, setActiviteDuree] = useState(0);
|
||||
const [isRecurent, setIsRecurent] = useState(false);
|
||||
|
||||
function addAcitivte(){
|
||||
if (!activiteNom) return;
|
||||
|
||||
const newActivite = new Activite();
|
||||
newActivite.nom= activiteNom;
|
||||
newActivite.theme=activiteTheme;
|
||||
newActivite.duree= activiteDuree;
|
||||
newActivite.data= new Map<String,String>();
|
||||
setActivities([...activities, newActivite]);
|
||||
|
||||
setActiviteNom("");
|
||||
setActiviteTheme("");
|
||||
setActiviteDuree(0);
|
||||
}
|
||||
|
||||
async function handleCreateSession(){
|
||||
const newSession = new Session();
|
||||
newSession.name = name;
|
||||
newSession.activites= activities;
|
||||
newSession.groupe = groupe;
|
||||
newSession.creneau = new Date(creneau);
|
||||
newSession.duree= duree;
|
||||
newSession.isRecurent= isRecurent;
|
||||
newSession.coach= user as Coach;
|
||||
newSession.athletes= [];
|
||||
newSession.activites= activities;
|
||||
|
||||
try{
|
||||
//reset
|
||||
setName("");
|
||||
setGroupe("");
|
||||
setCreneau("");
|
||||
setDuree(0);
|
||||
setIsRecurent(false);
|
||||
setActivities([]);
|
||||
}catch (err){
|
||||
console.error(err)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="ent">
|
||||
<h2>Activité</h2>
|
||||
<label>
|
||||
Name:
|
||||
<input type="text" value={activiteNom} onChange={e => setActiviteNom(e.target.value)} />
|
||||
</label>
|
||||
<label>
|
||||
Theme:
|
||||
<input type="text" value={activiteTheme} onChange={e => setActiviteTheme(e.target.value)} />
|
||||
</label>
|
||||
<label>
|
||||
Duree (minutes):
|
||||
<input type="number" value={activiteDuree} onChange={e => setActiviteDuree(Number(e.target.value))} />
|
||||
</label>
|
||||
<button type="button" onClick={addAcitivte}>Add Activite</button>
|
||||
|
||||
<ul>
|
||||
{activities.map((act, idx) => (
|
||||
<li key={idx}>{act.nom} - {act.theme} ({act.duree} min)</li>
|
||||
))}
|
||||
</ul>
|
||||
<h2>Create Session</h2>
|
||||
<label>
|
||||
Name:
|
||||
<input type="text" value={name} onChange={e => setName(e.target.value)} />
|
||||
</label>
|
||||
<label>
|
||||
Groupe:
|
||||
</label>
|
||||
<label>
|
||||
Creneau:
|
||||
<input type="datetime-local" value={creneau} onChange={e => setCreneau(e.target.value)} />
|
||||
</label>
|
||||
<label>
|
||||
Duree (minutes):
|
||||
<input type="number" value={duree} onChange={e => setDuree(Number(e.target.value))} />
|
||||
</label>
|
||||
<label>
|
||||
Recurrent:
|
||||
<input type="checkbox" checked={isRecurent} onChange={e => setIsRecurent(e.target.checked)} />
|
||||
</label>
|
||||
|
||||
<button type="button" onClick={handleCreateSession}>Create Session</button>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CreateSession;
|
||||
@@ -2,7 +2,7 @@ import { useEffect, useState } from "react"
|
||||
import { getUserTest, Session, User } from "../classes"
|
||||
import { useLocalData } from "../context/useLocalData"
|
||||
import './style/ent.css';
|
||||
import {updateSessionsOfUser } from "../requetes";
|
||||
import {updateSessionsOfUserAPI } from "../requetes";
|
||||
|
||||
export const ENT =() =>{
|
||||
const {user,setUser} = useLocalData()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import api from "./api";
|
||||
import { Activite, Athlete, Coach, Session, User } from "./classes";
|
||||
import { useKeycloak } from '@react-keycloak/web'
|
||||
|
||||
@@ -16,50 +17,95 @@ const useAuthHeader = () => {
|
||||
/*
|
||||
retourne l'utilisateur lié à l'identifiant keyloack
|
||||
*/
|
||||
export async function getUser(id:number): Promise<boolean>{
|
||||
//keycloak.id;
|
||||
return true;
|
||||
export async function getUser(id:number): Promise<User|null>{
|
||||
try {
|
||||
const response = await api.get<User>(`/users/${id}`);
|
||||
return response.data;
|
||||
}
|
||||
catch (error) {
|
||||
console.error("Error fetching user:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/*
|
||||
retourne toutes les Session dont l'user est inscrit
|
||||
*/
|
||||
export async function updateSessionsOfUser(user:Coach|Athlete, min: Date|null, max: Date|null){
|
||||
//TODO
|
||||
export async function updateSessionsOfUserAPI(user:Coach|Athlete, min: Date|null, max: Date|null){
|
||||
try {
|
||||
const response = await api.get<Session[]>(`/users/${user.id}/sessions`, {
|
||||
params: {
|
||||
minDate: min ? min.toISOString() : undefined,
|
||||
maxDate: max ? max.toISOString() : undefined
|
||||
}
|
||||
});
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error fetching sessions for user:", error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export async function updateActivitiesOfSession(session:Session){
|
||||
//TODO
|
||||
export async function updateActivitiesOfSessionAPI(session:Session){
|
||||
try {
|
||||
const response = await api.get<Activite[]>(`/sessions/${session.id}/activities`);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error fetching activities for session:", error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export async function subscribeSession(user:User, session:Session):Promise<boolean>{
|
||||
return true;
|
||||
export async function subscribeSessionAPI(user:User, session:Session):Promise<boolean>{
|
||||
try {
|
||||
await api.post(`/sessions/${session.id}/subscribe`, { userId: user.id });
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error("Error subscribing to session:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function unsubscribeSession(user:User, session:Session):Promise<boolean>{
|
||||
return true;
|
||||
export async function unsubscribeSessionAPI(user:User, session:Session):Promise<boolean>{
|
||||
try {
|
||||
await api.post(`/sessions/${session.id}/unsubscribe`, { userId: user.id });
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error("Error unsubscribing from session:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ADMIN :
|
||||
|
||||
export async function updateAllSession(min: Date, max: Date){
|
||||
export async function updateAllSessionAPI(min: Date, max: Date){
|
||||
//TODO
|
||||
}
|
||||
|
||||
export async function updateAllUser(){
|
||||
export async function updateAllUserAPI(){
|
||||
|
||||
}
|
||||
|
||||
// POST /////////////////////////////////////////////////////////
|
||||
|
||||
// COACH ADMIN
|
||||
export async function postSession(session: Session){
|
||||
|
||||
export async function createSessionAPI(newSession: Session): Promise<Session> {
|
||||
try {
|
||||
const response = await api.post<Session>("/sessions", newSession);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error creating session:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function postActivity(session: Session, activity: Activite){
|
||||
//post nouvelle activitée
|
||||
|
||||
//associer la nouvelle activité à la session
|
||||
export async function postActivityAPI(session: Session, activity: Activite){
|
||||
try {
|
||||
const response = await api.post<Activite>(`/sessions/${session.id}/activities`, activity);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error creating activity:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function postUser(user: User):Promise<boolean>{
|
||||
@@ -69,11 +115,30 @@ export async function postUser(user: User):Promise<boolean>{
|
||||
// SET /////////////////////////////////////////////////////////
|
||||
|
||||
//ADMIN
|
||||
export async function setUserName(user: User, name: string){
|
||||
export async function setUserNameAPI(user: User, name: string){
|
||||
|
||||
}
|
||||
|
||||
//COACH
|
||||
export async function setSessionCreneau(session: Session, date:Date){
|
||||
export async function setSessionCreneauAPI(session: Session, date:Date){
|
||||
|
||||
}
|
||||
|
||||
export async function getSessionsAPI(): Promise<Session[]> {
|
||||
try {
|
||||
const response = await api.get<Session[]>("/sessions");
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error fetching sessions:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
export async function getUsersAPI(): Promise<User[]> {
|
||||
try {
|
||||
const response = await api.get<User[]>("/users");
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("Error fetching users:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user