change in athlete and getkeycloak
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user