diff --git a/README.md b/README.md index 8a577c8..4a6762c 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,11 @@ npm install npm start #### Docker -sudo docker stop $(sudo docker ps -a -q) \ No newline at end of file +sudo docker stop $(sudo docker ps -a -q) + +#### Pour acceder sur docker +sudo docker exec -it frisbyee-postgres psql -U frisbyee_user -d frisbyee + +#### Voir les données: +\dt +SELECT * FROM session; diff --git a/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java b/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java index bac7b21..77d41e3 100644 --- a/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java +++ b/back_end/src/main/java/hackathon/FrisbYEE/rest/CoachResource.java @@ -14,7 +14,7 @@ import org.springframework.web.server.ResponseStatusException; import java.util.ArrayList; import java.util.List; -@Controller +@RestController @RequestMapping("/coach") public class CoachResource { @Autowired @@ -29,8 +29,8 @@ public class CoachResource { } @GetMapping("/all") - @PreAuthorize("hasRole('Admin') or hasRole('Coach')") public List getAll() { + System.out.println("GET /coach/all called"); List coaches = coachDAO.findAll(); List dtos = new ArrayList<>(); for (Coach coach : coaches) { diff --git a/back_end/src/main/resources/application.properties b/back_end/src/main/resources/application.properties index f81f9e4..a0fc7cf 100644 --- a/back_end/src/main/resources/application.properties +++ b/back_end/src/main/resources/application.properties @@ -7,5 +7,7 @@ spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect server.port=8081 +server.servlet.context-path=/api + spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8080/realms/Frisbyee_realm spring.security.oauth2.resourceserver.jwt.jwk-set-uri: http://localhost:8080/realms/Frisbyee_realm/protocol/openid-connect/certs \ No newline at end of file diff --git a/front_end/src/App.tsx b/front_end/src/App.tsx index c594761..a4b5b7f 100644 --- a/front_end/src/App.tsx +++ b/front_end/src/App.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React from 'react'; import './App.css'; import { ReactKeycloakProvider } from '@react-keycloak/web' import keycloak from './keycloak' @@ -7,9 +7,15 @@ import { LocalDataProvider } from './provider/LocalDataProvider'; import EDT from './components/edt'; import SwitchThemeColor from './components/SwitchThemeColor'; import CreateSession from './components/createSession' +import EdtCoach from './components/edt_coach' +import { Coach } from "./classes"; import RessourcePanel from './components/ressourcePanel'; import TestAPI from './components/test_api'; +// Test +const testCoach = new Coach(); +testCoach.id = 1; +testCoach.nom = "Coach Test"; const keycloakInitOptions = { onLoad: 'login-required', diff --git a/front_end/src/components/edt_coach.tsx b/front_end/src/components/edt_coach.tsx new file mode 100644 index 0000000..0c8b6bd --- /dev/null +++ b/front_end/src/components/edt_coach.tsx @@ -0,0 +1,50 @@ +import { useState } from "react"; +import { coachService } from "../api"; + +export default function EdtCoach() { + const [name, setName] = useState(""); + const [error, setError] = useState(""); + const [statusCode, setStatusCode] = useState(null); + + const handleCreate = async () => { + try { + const response = await coachService.create({ name }); + console.log("Success:", response.status, response.data); + alert(`Coach created! Status: ${response.status}`); + setError(""); + setStatusCode(response.status); + } catch (err: any) { + if (err.response) { + // This is the HTTP response from the server + console.error("HTTP status:", err.response.status); + console.error("Response data:", err.response.data); + setError(`Failed to create coach: ${err.response.data}`); + setStatusCode(err.response.status); + } else if (err.request) { + console.error("No response received", err.request); + setError("No response from server!"); + setStatusCode(null); + } else { + console.error("Error", err.message); + setError(err.message); + setStatusCode(null); + } + } + }; + + return ( +
+

Create Coach

+ setName(e.target.value)} + placeholder="Coach name" + /> + + + {error &&

{error}

} + {statusCode &&

HTTP Status: {statusCode}

} +
+ ); +} diff --git a/front_end/src/requetes.tsx b/front_end/src/requetes.tsx index 626a244..6c00ae1 100644 --- a/front_end/src/requetes.tsx +++ b/front_end/src/requetes.tsx @@ -2,7 +2,8 @@ import api from "./api"; import { Activite, Athlete, Coach, Session, User } from "./classes"; //import { useKeycloak } from '@react-keycloak/web' -//const { keycloak } = useKeycloak() +import { useKeycloak } from '@react-keycloak/web' +import { useAuthHeader } from "./hook/useAuthHeader"; /* const useAuthHeader = () => { return keycloak?.token @@ -72,7 +73,7 @@ export async function subscribeSessionAPI(user:User, session:Session):Promise{ try { - await api.post(`/sessions/${session.id}/unsubscribe`, { userId: user.id }); + await api.post(`/session/${session.id}/unsubscribe`, { userId: user.id }); return true; } catch (error) { console.error("Error unsubscribing from session:", error); @@ -93,9 +94,9 @@ export async function updateAllUserAPI(){ // POST ///////////////////////////////////////////////////////// // COACH ADMIN -export async function createSessionAPI(newSession: Session): Promise { +export async function createSessionAPI(sessionDTO: any): Promise { try { - const response = await api.post("/sessions", newSession); + const response = await api.post("/session/create", sessionDTO); return response.data; } catch (error) { console.error("Error creating session:", error); @@ -105,7 +106,7 @@ export async function createSessionAPI(newSession: Session): Promise { export async function postActivityAPI(session: Session, activity: Activite){ try { - const response = await api.post(`/sessions/${session.id}/activities`, activity); + const response = await api.post(`/session/${session.id}/activities`, activity); return response.data; } catch (error) { console.error("Error creating activity:", error); @@ -131,7 +132,7 @@ export async function setSessionCreneauAPI(session: Session, date:Date){ export async function getSessionsAPI(): Promise { try { - const response = await api.get("/sessions"); + const response = await api.get("/session"); return response.data; } catch (error) { console.error("Error fetching sessions:", error);