change in athlete and getkeycloak

This commit is contained in:
tuanvu
2026-01-08 11:27:18 +01:00
parent 41f574bc94
commit e28b126838
11 changed files with 50 additions and 54 deletions

View File

@@ -43,16 +43,6 @@ public class Admin extends User{
super.setPrenom(prenom); super.setPrenom(prenom);
} }
@Override
public String getId_keycloak() {
return super.getId_keycloak();
}
@Override
public void setId_keycloak(String id_keycloak) {
super.setId_keycloak(id_keycloak);
}
@Override @Override
public Role getRole() { public Role getRole() {
return super.getRole(); return super.getRole();

View File

@@ -56,17 +56,6 @@ public class Athlete extends User{
public void setPrenom(String prenom) { public void setPrenom(String prenom) {
super.setPrenom(prenom); super.setPrenom(prenom);
} }
@Override
public String getId_keycloak() {
return super.getId_keycloak();
}
@Override
public void setId_keycloak(String id_keycloak) {
super.setId_keycloak(id_keycloak);
}
@Override @Override
public Role getRole() { public Role getRole() {
return super.getRole(); return super.getRole();

View File

@@ -49,16 +49,6 @@ public class Coach extends User{
super.setPrenom(prenom); super.setPrenom(prenom);
} }
@Override
public String getId_keycloak() {
return super.getId_keycloak();
}
@Override
public void setId_keycloak(String id_keycloak) {
super.setId_keycloak(id_keycloak);
}
@Override @Override
public Role getRole() { public Role getRole() {
return super.getRole(); return super.getRole();

View File

@@ -26,8 +26,8 @@ public class User implements Serializable {
@GeneratedValue @GeneratedValue
@Column(unique = true, nullable = false) @Column(unique = true, nullable = false)
private Integer id; private Integer id;
@Column(nullable = false, unique = true) @Column(name = "id_keycloak", unique = true, nullable = false)
private String id_keycloak; private String keycloakId;
private String name; private String name;
private String prenom; private String prenom;
@@ -38,7 +38,7 @@ public class User implements Serializable {
public User(String name, String id_keycloak, String prenom, Role role) { public User(String name, String id_keycloak, String prenom, Role role) {
this.name = name; this.name = name;
this.id_keycloak = id_keycloak; this.keycloakId = id_keycloak;
this.prenom = prenom; this.prenom = prenom;
this.role = role; this.role = role;
} }

View File

@@ -1,11 +1,12 @@
package hackathon.FrisbYEE.jpa.service; package hackathon.FrisbYEE.jpa.service;
import hackathon.FrisbYEE.jpa.metier.Athlete; import hackathon.FrisbYEE.jpa.metier.Athlete;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@Repository @Repository
public interface AthleteDAO extends JpaRepository<Athlete, Integer> { public interface AthleteDAO extends JpaRepository<Athlete, Integer> {
boolean existsByKeycloakId(String keycloakId);
Optional<Athlete> findByKeycloakId(String keycloakId);
} }

View File

@@ -32,7 +32,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.responses.ApiResponses;
@Controller @RestController
@RequestMapping("/athlete") @RequestMapping("/athlete")
public class AthleteResource { public class AthleteResource {
@Autowired @Autowired
@@ -124,8 +124,9 @@ public class AthleteResource {
private AthleteDTO mapToDTO(Athlete athlete) { private AthleteDTO mapToDTO(Athlete athlete) {
AthleteDTO dto = new AthleteDTO(); AthleteDTO dto = new AthleteDTO();
dto.setId_keycloak(athlete.getId_keycloak()); dto.setId_keycloak(athlete.getKeycloakId());
dto.setName(athlete.getName()); dto.setName(athlete.getName());
dto.setPrenom(athlete.getPrenom());
dto.setCategorie(athlete.getCategorie()); dto.setCategorie(athlete.getCategorie());
dto.setNiveau(athlete.getNiveau()); dto.setNiveau(athlete.getNiveau());
return dto; return dto;
@@ -133,6 +134,12 @@ public class AthleteResource {
private Athlete mapToEntity(AthleteDTO dto) { private Athlete mapToEntity(AthleteDTO dto) {
Athlete athlete = new Athlete(); Athlete athlete = new Athlete();
athlete.setName(dto.getName());
athlete.setPrenom(dto.getPrenom());
athlete.setKeycloakId(dto.getId_keycloak());
athlete.setCategorie(dto.getCategorie());
athlete.setNiveau(dto.getNiveau());
athlete.setRole(hackathon.FrisbYEE.jpa.metier.Role.ATHLETE);
return athlete; return athlete;
} }

View File

@@ -70,14 +70,14 @@ public class CoachResource {
private CoachDTO mapToDTO(Coach coach) { private CoachDTO mapToDTO(Coach coach) {
CoachDTO dto = new CoachDTO(); CoachDTO dto = new CoachDTO();
dto.setId_keycloak(coach.getId_keycloak()); dto.setId_keycloak(coach.getKeycloakId());
dto.setName(coach.getName()); dto.setName(coach.getName());
return dto; return dto;
} }
private Coach mapToEntity(CoachDTO dto) { private Coach mapToEntity(CoachDTO dto) {
Coach coach = new Coach(); Coach coach = new Coach();
coach.setId_keycloak(dto.getId_keycloak()); coach.setKeycloakId(dto.getId_keycloak());
coach.setName(dto.getName()); coach.setName(dto.getName());
return coach; return coach;
} }

View File

@@ -8,6 +8,5 @@ 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 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

@@ -11,7 +11,7 @@ import EdtCoach from './components/edt_coach'
import { Coach } from "./classes"; 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';
import EdtAthlete from './components/edt_athlete';
// Test // Test
const testCoach = new Coach(); const testCoach = new Coach();
testCoach.id = 1; testCoach.id = 1;
@@ -36,7 +36,7 @@ function App() {
<RessourcePanel/> <RessourcePanel/>
<EDT/> <EDT/>
<CreateSession/> <CreateSession/>
<EdtAthlete/>
<TestAPI/> <TestAPI/>
</div> </div>
</LocalDataProvider> </LocalDataProvider>

View File

@@ -3,6 +3,7 @@ export type Role = "Admin" | "Athlete" | "Coach";
export class User{ export class User{
id!: number; id!: number;
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 /!\
@@ -19,21 +20,17 @@ export class Ligne{
export class Admin extends User{ export class Admin extends User{
role!: Role; role!: Role;
} }
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{

View File

@@ -3,20 +3,42 @@ import { useEffect } from 'react';
import { getUserTest, User } from '../classes'; import { getUserTest, User } from '../classes';
import { useLocalData } from '../context/useLocalData'; import { useLocalData } from '../context/useLocalData';
export const Login =() =>{ export const Login =() =>{
const {user,setUser} = useLocalData() const {user,setUser} = useLocalData()
const { keycloak } = useKeycloak(); const { keycloak } = useKeycloak();
useEffect(() => { useEffect(() => {
if (keycloak.authenticated) { const syncUser = async () => {
fetch("http://localhost:8080/api/athlete/create", { if (keycloak.authenticated && keycloak.token) {
console.log("Attempting to sync user with backend...");
try {
const response = await fetch("http://localhost:8081/api/users/sync", {
method: "POST",
headers: {
"Authorization": `Bearer ${keycloak.token}`,
"Content-Type": "application/json"
},
});
console.log("Sync status:", response.status);
} catch (error) {
console.error("Sync fetch failed:", error);
}
}
};
syncUser();
}, [keycloak.authenticated, keycloak.token]);
useEffect(() => {
if (keycloak.authenticated && keycloak.token) {
fetch("http://localhost:8081/api/users/sync", {
method: "POST", method: "POST",
headers: { headers: {
Authorization: `Bearer ${keycloak.token}`, Authorization: `Bearer ${keycloak.token}`,
}, },
}); })
.then(res => console.log("Sync response status:", res.status))
.catch(err => console.error("Sync error:", err));;
} }
}, [keycloak.authenticated]); }, [keycloak.authenticated]);
@@ -24,7 +46,8 @@ export const Login =() =>{
if (keycloak.authenticated) { if (keycloak.authenticated) {
const tokenParsed = keycloak.tokenParsed; const tokenParsed = keycloak.tokenParsed;
setUser({ setUser({
id: tokenParsed?.id, id: 0,
keycloakId: tokenParsed!.sub!,
email: tokenParsed?.email, email: tokenParsed?.email,
nom: tokenParsed?.family_name, nom: tokenParsed?.family_name,
prenom: tokenParsed?.given_name, prenom: tokenParsed?.given_name,