update curl api

This commit is contained in:
tuanvu
2026-01-07 13:10:18 +01:00
parent bb4c0f67ad
commit a4536d85a4
6 changed files with 76 additions and 10 deletions

View File

@@ -28,3 +28,10 @@ npm start
#### Docker #### Docker
sudo docker stop $(sudo docker ps -a -q) 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;

View File

@@ -14,7 +14,7 @@ import org.springframework.web.server.ResponseStatusException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Controller @RestController
@RequestMapping("/coach") @RequestMapping("/coach")
public class CoachResource { public class CoachResource {
@Autowired @Autowired
@@ -29,8 +29,8 @@ public class CoachResource {
} }
@GetMapping("/all") @GetMapping("/all")
@PreAuthorize("hasRole('Admin') or hasRole('Coach')")
public List<CoachDTO> getAll() { public List<CoachDTO> getAll() {
System.out.println("GET /coach/all called");
List<Coach> coaches = coachDAO.findAll(); List<Coach> coaches = coachDAO.findAll();
List<CoachDTO> dtos = new ArrayList<>(); List<CoachDTO> dtos = new ArrayList<>();
for (Coach coach : coaches) { for (Coach coach : coaches) {

View File

@@ -7,5 +7,7 @@ spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
server.port=8081 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.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 spring.security.oauth2.resourceserver.jwt.jwk-set-uri: http://localhost:8080/realms/Frisbyee_realm/protocol/openid-connect/certs

View File

@@ -1,4 +1,4 @@
import React, { useEffect } from 'react'; import React from 'react';
import './App.css'; import './App.css';
import { ReactKeycloakProvider } from '@react-keycloak/web' import { ReactKeycloakProvider } from '@react-keycloak/web'
import keycloak from './keycloak' import keycloak from './keycloak'
@@ -7,9 +7,15 @@ import { LocalDataProvider } from './provider/LocalDataProvider';
import EDT from './components/edt'; import EDT from './components/edt';
import SwitchThemeColor from './components/SwitchThemeColor'; import SwitchThemeColor from './components/SwitchThemeColor';
import CreateSession from './components/createSession' import CreateSession from './components/createSession'
import EdtCoach from './components/edt_coach'
import { Coach } from "./classes";
import RessourcePanel from './components/ressourcePanel'; import RessourcePanel from './components/ressourcePanel';
import TestAPI from './components/test_api'; import TestAPI from './components/test_api';
// Test
const testCoach = new Coach();
testCoach.id = 1;
testCoach.nom = "Coach Test";
const keycloakInitOptions = { const keycloakInitOptions = {
onLoad: 'login-required', onLoad: 'login-required',

View File

@@ -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<number | null>(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 (
<div>
<h2>Create Coach</h2>
<input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
placeholder="Coach name"
/>
<button onClick={handleCreate}>Create</button>
{error && <p style={{ color: "red" }}>{error}</p>}
{statusCode && <p>HTTP Status: {statusCode}</p>}
</div>
);
}

View File

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