This commit is contained in:
trochas
2026-01-08 16:30:35 +01:00
6 changed files with 64 additions and 6 deletions

View File

@@ -1,4 +1,5 @@
package hackathon.FrisbYEE.jpa.dto;
import hackathon.FrisbYEE.jpa.metier.Role;
import lombok.Data;
@Data
@@ -7,4 +8,5 @@ public class AdminDTO {
private Integer id;
private String name;
private String prenom;
private Role role;
}

View File

@@ -1,10 +1,13 @@
package hackathon.FrisbYEE.jpa.service;
import hackathon.FrisbYEE.jpa.metier.Admin;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AdminDAO extends JpaRepository<Admin, Integer> {
Optional<Admin> findByKeycloakId(String keycloakId);
}

View File

@@ -1,6 +1,5 @@
package hackathon.FrisbYEE.jpa.service;
import hackathon.FrisbYEE.jpa.metier.Coach;
import hackathon.FrisbYEE.jpa.metier.User;
import java.util.Optional;
@@ -10,5 +9,5 @@ import org.springframework.stereotype.Repository;
@Repository
public interface UserDAO extends JpaRepository<User, Integer> {
Optional<Coach> findByKeycloakId(String keycloakId);
Optional<User> findByKeycloakId(String keycloakId);
}

View File

@@ -0,0 +1,48 @@
package hackathon.FrisbYEE.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import hackathon.FrisbYEE.jpa.dto.AdminDTO;
import hackathon.FrisbYEE.jpa.metier.Admin;
import hackathon.FrisbYEE.jpa.service.AdminDAO;
@RestController
@RequestMapping("/admin")
@CrossOrigin(origins = "http://localhost:3000")
public class AdminResource {
@Autowired
private AdminDAO adminDAO;
@GetMapping("/{id}")
@PreAuthorize("hasRole('admin')")
public ResponseEntity<AdminDTO> getAdmin(@PathVariable Integer id) {
Admin admin = adminDAO.findById(id).get();
return ResponseEntity.ok(mapToDTO(admin));
}
@GetMapping("/keycloak/{keycloak_id}")
@PreAuthorize("hasRole('admin')")
public ResponseEntity<AdminDTO> getByKeycloakId(@PathVariable String keycloak_id) {
Admin admin = adminDAO.findByKeycloakId(keycloak_id).get();
return ResponseEntity.ok(mapToDTO(admin));
}
private AdminDTO mapToDTO(Admin admin) {
AdminDTO dto = new AdminDTO();
dto.setId(admin.getId());
dto.setId_keycloak(admin.getKeycloakId());
dto.setName(admin.getName());
dto.setPrenom(admin.getPrenom());
dto.setRole(admin.getRole());
return dto;
}
}

View File

@@ -54,8 +54,8 @@ public class UserResource {
})
@GetMapping("/{id}")
@PreAuthorize("hasRole('admin') or hasRole('coach') or hasRole('athlete')")
public ResponseEntity<UserDTO> getById(@PathVariable String id) {
User user = userDAO.findByKeycloakId(id).get();
public ResponseEntity<UserDTO> getById(@PathVariable Integer id) {
User user = userDAO.findById(id).get();
return ResponseEntity.ok(mapToDTO(user));
}

View File

@@ -94,9 +94,15 @@ export const coachService = {
};
export const userService = {
getByKeycloakId: (keycloak_id: string) => api.get(`/users/${keycloak_id}`),
getById: (id: number) => api.get(`/users/${id}`),
getByKeycloakId: (keycloak_id: string) => api.get(`/users/keycloak/${keycloak_id}`),
getAll: () => api.get(`/users/all`),
sync: () => api.post(`/users/sync`),
};
export const adminService = {
getByKeycloakId: (keycloak_id: string) => api.get(`/admin/keycloak/${keycloak_id}`),
getById: (id: number | string) => api.get(`/admin/${id}`),
};
export default api;