Добавил все новые поля (fullName, jobTitle, departmentId) для пользователей. Добавил логирование для UserController.java

This commit is contained in:
dipatrik10
2026-03-21 00:20:34 +03:00
parent 6774ebb766
commit b89d1c7f72
4 changed files with 196 additions and 28 deletions

View File

@@ -5,6 +5,10 @@ import com.magistr.app.dto.UserResponse;
import com.magistr.app.model.Role; import com.magistr.app.model.Role;
import com.magistr.app.model.User; import com.magistr.app.model.User;
import com.magistr.app.repository.UserRepository; 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.http.ResponseEntity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -16,6 +20,7 @@ import java.util.Map;
@RequestMapping("/api/users") @RequestMapping("/api/users")
public class UserController { public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
private final UserRepository userRepository; private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder; private final BCryptPasswordEncoder passwordEncoder;
@@ -26,34 +31,94 @@ public class UserController {
@GetMapping @GetMapping
public List<UserResponse> getAllUsers() { public List<UserResponse> getAllUsers() {
return userRepository.findAll().stream() logger.info("Запрос на получение всех пользователей");
.map(u -> new UserResponse(u.getId(), u.getUsername(), u.getRole().name())) try {
List<User> users = userRepository.findAll();
List<UserResponse> response = users.stream()
.map(u -> new UserResponse(
u.getId(),
u.getUsername(),
u.getRole().name(),
u.getFullName(),
u.getJobTitle(),
u.getDepartmentId()
))
.toList(); .toList();
logger.info("Получено {} пользователей", response.size());
return response;
} catch (Exception e) {
logger.error("Ошибка при получении списка пользователей: {}", e.getMessage(),e);
throw e;
}
} }
@GetMapping("/teachers") @GetMapping("/teachers")
public List<UserResponse> getTeachers() { public List<UserResponse> getTeachers() {
return userRepository.findByRole(Role.TEACHER).stream() logger.info("Запрос на получение пользователей с ролью 'Преподаватель'");
.map(u -> new UserResponse(u.getId(), u.getUsername(), u.getRole().name()))
try {
List<User> users = userRepository.findByRole(Role.TEACHER);
List<UserResponse> response = users.stream()
.map(u -> new UserResponse(
u.getId(),
u.getUsername(),
u.getRole().name(),
u.getFullName(),
u.getJobTitle(),
u.getDepartmentId()
))
.toList(); .toList();
logger.info("Получено {} преподавателей", response.size());
return response;
} catch (Exception e) {
logger.error("Ошибка при получении списка преподавателей: {}", e.getMessage(),e);
throw e;
}
} }
@PostMapping @PostMapping
public ResponseEntity<?> createUser(@RequestBody CreateUserRequest request) { public ResponseEntity<?> createUser(@RequestBody CreateUserRequest request) {
logger.info("Получен запрос на создание нового пользователя: username = {}, fullName = {}, jobTitle = {}, departmentId = {}", request.getUsername(), request.getFullName(), request.getJobTitle(), request.getDepartmentId());
try {
if (request.getUsername() == null || request.getUsername().isBlank()) { if (request.getUsername() == null || request.getUsername().isBlank()) {
return ResponseEntity.badRequest().body(Map.of("message", "Имя пользователя обязательно")); String errorMessage = "Имя пользователя обязательно";
logger.error("Ошибка валидации: {}", errorMessage);
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
} }
if (request.getPassword() == null || request.getPassword().length() < 4) { if (request.getPassword() == null || request.getPassword().length() < 4) {
return ResponseEntity.badRequest().body(Map.of("message", "Пароль минимум 4 символа")); String errorMessage = "Пароль минимум 4 символа";
logger.error("Ошибка валидации: {}", errorMessage);
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
} }
if (userRepository.findByUsername(request.getUsername()).isPresent()) { if (userRepository.findByUsername(request.getUsername()).isPresent()) {
return ResponseEntity.badRequest().body(Map.of("message", "Пользователь уже существует")); 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; Role role;
try { try {
role = Role.valueOf(request.getRole()); role = Role.valueOf(request.getRole());
} catch (Exception e) { } catch (Exception e) {
logger.error("Ошибка при преобразовании роли: {}", e.getMessage());
return ResponseEntity.badRequest().body(Map.of("message", "Недопустимая роль")); return ResponseEntity.badRequest().body(Map.of("message", "Недопустимая роль"));
} }
@@ -61,17 +126,30 @@ public class UserController {
user.setUsername(request.getUsername()); user.setUsername(request.getUsername());
user.setPassword(passwordEncoder.encode(request.getPassword())); user.setPassword(passwordEncoder.encode(request.getPassword()));
user.setRole(role); user.setRole(role);
user.setFullName(request.getFullName());
user.setJobTitle(request.getJobTitle());
user.setDepartmentId(request.getDepartmentId());
userRepository.save(user); userRepository.save(user);
return ResponseEntity.ok(new UserResponse(user.getId(), user.getUsername(), user.getRole().name())); 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()));
}
} }
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) { public ResponseEntity<?> deleteUser(@PathVariable Long id) {
logger.info("Получен запрос на удаление пользователя с ID: {}", id);
if (!userRepository.existsById(id)) { if (!userRepository.existsById(id)) {
logger.info("Пользователь с ID - {} не найден", id);
return ResponseEntity.notFound().build(); return ResponseEntity.notFound().build();
} }
userRepository.deleteById(id); userRepository.deleteById(id);
logger.info("Пользователь с ID - {} успешно удалён", id);
return ResponseEntity.ok(Map.of("message", "Пользователь удалён")); return ResponseEntity.ok(Map.of("message", "Пользователь удалён"));
} }
} }

View File

@@ -5,6 +5,9 @@ public class CreateUserRequest {
private String username; private String username;
private String password; private String password;
private String role; private String role;
private String fullName;
private String jobTitle;
private Long departmentId;
public CreateUserRequest() { public CreateUserRequest() {
} }
@@ -32,4 +35,28 @@ public class CreateUserRequest {
public void setRole(String role) { public void setRole(String role) {
this.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;
}
} }

View File

@@ -5,14 +5,20 @@ public class UserResponse {
private Long id; private Long id;
private String username; private String username;
private String role; private String role;
private String fullName;
private String jobTitle;
private Long departmentId;
public UserResponse() { 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.id = id;
this.username = username; this.username = username;
this.role = role; this.role = role;
this.fullName = fullName;
this.jobTitle = jobTitle;
this.departmentId = departmentId;
} }
public Long getId() { public Long getId() {
@@ -38,4 +44,28 @@ public class UserResponse {
public void setRole(String role) { public void setRole(String role) {
this.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;
}
} }

View File

@@ -20,6 +20,15 @@ public class User {
@Column(nullable = false, length = 20) @Column(nullable = false, length = 20)
private Role role = Role.STUDENT; 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() { public User() {
} }
@@ -54,4 +63,28 @@ public class User {
public void setRole(Role role) { public void setRole(Role role) {
this.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;
}
} }