diff --git a/backend/src/main/java/com/magistr/app/controller/UserController.java b/backend/src/main/java/com/magistr/app/controller/UserController.java index 2dfad6b..0f97426 100755 --- a/backend/src/main/java/com/magistr/app/controller/UserController.java +++ b/backend/src/main/java/com/magistr/app/controller/UserController.java @@ -5,6 +5,10 @@ import com.magistr.app.dto.UserResponse; import com.magistr.app.model.Role; import com.magistr.app.model.User; import com.magistr.app.repository.UserRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; @@ -16,6 +20,7 @@ import java.util.Map; @RequestMapping("/api/users") public class UserController { + private static final Logger logger = LoggerFactory.getLogger(UserController.class); private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; @@ -26,52 +31,125 @@ public class UserController { @GetMapping public List getAllUsers() { - return userRepository.findAll().stream() - .map(u -> new UserResponse(u.getId(), u.getUsername(), u.getRole().name())) - .toList(); + logger.info("Запрос на получение всех пользователей"); + try { + List users = userRepository.findAll(); + + List response = users.stream() + .map(u -> new UserResponse( + u.getId(), + u.getUsername(), + u.getRole().name(), + u.getFullName(), + u.getJobTitle(), + u.getDepartmentId() + )) + .toList(); + logger.info("Получено {} пользователей", response.size()); + return response; + } catch (Exception e) { + logger.error("Ошибка при получении списка пользователей: {}", e.getMessage(),e); + throw e; + } + } @GetMapping("/teachers") public List getTeachers() { - return userRepository.findByRole(Role.TEACHER).stream() - .map(u -> new UserResponse(u.getId(), u.getUsername(), u.getRole().name())) - .toList(); + logger.info("Запрос на получение пользователей с ролью 'Преподаватель'"); + + try { + List users = userRepository.findByRole(Role.TEACHER); + + List response = users.stream() + .map(u -> new UserResponse( + u.getId(), + u.getUsername(), + u.getRole().name(), + u.getFullName(), + u.getJobTitle(), + u.getDepartmentId() + )) + .toList(); + logger.info("Получено {} преподавателей", response.size()); + return response; + } catch (Exception e) { + logger.error("Ошибка при получении списка преподавателей: {}", e.getMessage(),e); + throw e; + } } @PostMapping public ResponseEntity createUser(@RequestBody CreateUserRequest request) { - if (request.getUsername() == null || request.getUsername().isBlank()) { - return ResponseEntity.badRequest().body(Map.of("message", "Имя пользователя обязательно")); - } - if (request.getPassword() == null || request.getPassword().length() < 4) { - return ResponseEntity.badRequest().body(Map.of("message", "Пароль минимум 4 символа")); - } - if (userRepository.findByUsername(request.getUsername()).isPresent()) { - return ResponseEntity.badRequest().body(Map.of("message", "Пользователь уже существует")); - } + logger.info("Получен запрос на создание нового пользователя: username = {}, fullName = {}, jobTitle = {}, departmentId = {}", request.getUsername(), request.getFullName(), request.getJobTitle(), request.getDepartmentId()); - Role role; try { - role = Role.valueOf(request.getRole()); - } catch (Exception e) { - return ResponseEntity.badRequest().body(Map.of("message", "Недопустимая роль")); + if (request.getUsername() == null || request.getUsername().isBlank()) { + String errorMessage = "Имя пользователя обязательно"; + logger.error("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + if (request.getPassword() == null || request.getPassword().length() < 4) { + String errorMessage = "Пароль минимум 4 символа"; + logger.error("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + if (userRepository.findByUsername(request.getUsername()).isPresent()) { + String errorMessage = "Пользователь уже существует"; + logger.error("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + if (request.getFullName() == null || request.getFullName().isBlank()) { + String errorMessage = "Имя пользователя обязательно"; + logger.error("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + if (request.getJobTitle() == null || request.getJobTitle().isBlank()) { + logger.info("Должность не была указана, установлено значение по умолчанию: 'Не указано'"); + request.setJobTitle("Не указано"); + } + if (request.getDepartmentId() == null || request.getDepartmentId() == 0) { + String errorMessage = "ID кафедры не может быть равен 0 или пустым"; + logger.error("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + + Role role; + try { + role = Role.valueOf(request.getRole()); + } catch (Exception e) { + logger.error("Ошибка при преобразовании роли: {}", e.getMessage()); + return ResponseEntity.badRequest().body(Map.of("message", "Недопустимая роль")); + } + + User user = new User(); + user.setUsername(request.getUsername()); + user.setPassword(passwordEncoder.encode(request.getPassword())); + user.setRole(role); + user.setFullName(request.getFullName()); + user.setJobTitle(request.getJobTitle()); + user.setDepartmentId(request.getDepartmentId()); + userRepository.save(user); + + logger.info("Пользователь успешно создан с ID: {}", user.getId()); + + return ResponseEntity.ok(new UserResponse(user.getId(), user.getUsername(), user.getRole().name(), user.getFullName(), user.getJobTitle(), user.getDepartmentId())); + } catch (Exception e ) { + logger.error("Ошибка при создании пользователя: {}", e.getMessage(), e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("message", "Произошла ошибка при создании пользователя: " + e.getMessage())); } - - User user = new User(); - user.setUsername(request.getUsername()); - user.setPassword(passwordEncoder.encode(request.getPassword())); - user.setRole(role); - userRepository.save(user); - - return ResponseEntity.ok(new UserResponse(user.getId(), user.getUsername(), user.getRole().name())); } @DeleteMapping("/{id}") public ResponseEntity deleteUser(@PathVariable Long id) { + logger.info("Получен запрос на удаление пользователя с ID: {}", id); if (!userRepository.existsById(id)) { + logger.info("Пользователь с ID - {} не найден", id); return ResponseEntity.notFound().build(); } userRepository.deleteById(id); + logger.info("Пользователь с ID - {} успешно удалён", id); return ResponseEntity.ok(Map.of("message", "Пользователь удалён")); } } diff --git a/backend/src/main/java/com/magistr/app/dto/CreateUserRequest.java b/backend/src/main/java/com/magistr/app/dto/CreateUserRequest.java index 1493eaa..0bc9f1e 100755 --- a/backend/src/main/java/com/magistr/app/dto/CreateUserRequest.java +++ b/backend/src/main/java/com/magistr/app/dto/CreateUserRequest.java @@ -5,6 +5,9 @@ public class CreateUserRequest { private String username; private String password; private String role; + private String fullName; + private String jobTitle; + private Long departmentId; public CreateUserRequest() { } @@ -32,4 +35,28 @@ public class CreateUserRequest { public void setRole(String role) { this.role = role; } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getJobTitle() { + return jobTitle; + } + + public void setJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + } + + public Long getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(Long departmentId) { + this.departmentId = departmentId; + } } diff --git a/backend/src/main/java/com/magistr/app/dto/UserResponse.java b/backend/src/main/java/com/magistr/app/dto/UserResponse.java index b1d3cdb..d4d30de 100755 --- a/backend/src/main/java/com/magistr/app/dto/UserResponse.java +++ b/backend/src/main/java/com/magistr/app/dto/UserResponse.java @@ -5,14 +5,20 @@ public class UserResponse { private Long id; private String username; private String role; + private String fullName; + private String jobTitle; + private Long departmentId; public UserResponse() { } - public UserResponse(Long id, String username, String role) { + public UserResponse(Long id, String username, String role, String fullName, String jobTitle, Long departmentId) { this.id = id; this.username = username; this.role = role; + this.fullName = fullName; + this.jobTitle = jobTitle; + this.departmentId = departmentId; } public Long getId() { @@ -38,4 +44,28 @@ public class UserResponse { public void setRole(String role) { this.role = role; } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getJobTitle() { + return jobTitle; + } + + public void setJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + } + + public Long getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(Long departmentId) { + this.departmentId = departmentId; + } } diff --git a/backend/src/main/java/com/magistr/app/model/User.java b/backend/src/main/java/com/magistr/app/model/User.java index eb2ba7e..73e41c1 100755 --- a/backend/src/main/java/com/magistr/app/model/User.java +++ b/backend/src/main/java/com/magistr/app/model/User.java @@ -20,6 +20,15 @@ public class User { @Column(nullable = false, length = 20) private Role role = Role.STUDENT; + @Column(name = "full_name", nullable = false) + private String fullName; + + @Column(name="job_title", nullable = false) + private String jobTitle; + + @Column(name="department_id", nullable = false) + private Long departmentId; + public User() { } @@ -54,4 +63,28 @@ public class User { public void setRole(Role role) { this.role = role; } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getJobTitle() { + return jobTitle; + } + + public void setJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + } + + public Long getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(Long departmentId) { + this.departmentId = departmentId; + } }