Добавил возможность создавать, просматривать и удалять данные дисциплин и кафедр.
This commit is contained in:
@@ -0,0 +1,106 @@
|
|||||||
|
package com.magistr.app.controller;
|
||||||
|
|
||||||
|
import com.magistr.app.dto.CreateDepartmentRequest;
|
||||||
|
import com.magistr.app.dto.DepartmentResponse;
|
||||||
|
import com.magistr.app.model.Department;
|
||||||
|
import com.magistr.app.repository.DepartmentRepository;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/departments")
|
||||||
|
public class DepartmentController {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(DepartmentController.class);
|
||||||
|
|
||||||
|
private final DepartmentRepository departmentRepository;
|
||||||
|
|
||||||
|
public DepartmentController(DepartmentRepository departmentRepository) {
|
||||||
|
this.departmentRepository = departmentRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<Department> getAllDepartments() {
|
||||||
|
logger.info("Получен запрос на получение списка кафедр");
|
||||||
|
try {
|
||||||
|
List<Department> departments = departmentRepository.findAll();
|
||||||
|
List<Department> response = departments.stream()
|
||||||
|
.map( d -> new Department(
|
||||||
|
d.getId(),
|
||||||
|
d.getDepartmentName(),
|
||||||
|
d.getDepartmentCode()
|
||||||
|
))
|
||||||
|
.toList();
|
||||||
|
logger.info("Получено {} кафедр", response.size());
|
||||||
|
return response;
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Ошибка при получении списка кафедр: {}", e.getMessage(), e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public ResponseEntity<?> createDepartment(@RequestBody CreateDepartmentRequest request) {
|
||||||
|
logger.info("Получен запрос на создание кафедры: name = {}, code = {}", request.getDepartmentName(), request.getDepartmentCode());
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (request.getDepartmentName() == null || request.getDepartmentName().isBlank()){
|
||||||
|
String errorMessage = "Название кафедры обязательно";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (departmentRepository.findByDepartmentName(request.getDepartmentName().trim()).isPresent()) {
|
||||||
|
String errorMessage = "Кафедра с таким названием уже существует";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (request.getDepartmentCode() == null || request.getDepartmentCode() == 0) {
|
||||||
|
String errorMessage = "Код кафедры обязателен";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (departmentRepository.findByDepartmentCode(request.getDepartmentCode()).isPresent()) {
|
||||||
|
String errorMessage = "Кафедра с таким кодом уже существует";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
|
||||||
|
Department department = new Department();
|
||||||
|
department.setDepartmentName(request.getDepartmentName());
|
||||||
|
department.setDepartmentCode(request.getDepartmentCode());
|
||||||
|
departmentRepository.save(department);
|
||||||
|
|
||||||
|
logger.info("Кафедра успешно создана с ID: {}", department.getId());
|
||||||
|
|
||||||
|
return ResponseEntity.ok(
|
||||||
|
new DepartmentResponse(
|
||||||
|
department.getId(),
|
||||||
|
department.getDepartmentName(),
|
||||||
|
department.getDepartmentCode()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Ошибка при создании кафедры: {}", e.getMessage(), e);
|
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
.body(Map.of("message", "Произошла ошибка при создании кафедры " + e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/id")
|
||||||
|
public ResponseEntity<?> deleteDepartment(@PathVariable Long id) {
|
||||||
|
logger.info("Получен запрос на удаление кафедры с ID: {}", id);
|
||||||
|
if (!departmentRepository.existsById(id)) {
|
||||||
|
logger.info("Кафедра с ID - {} не найдена", id);
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
departmentRepository.deleteById(id);
|
||||||
|
logger.info("Кафедра с ID - {} успешно удалена", id);
|
||||||
|
return ResponseEntity.ok(Map.of("message", "Кафедра удалена"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
package com.magistr.app.controller;
|
||||||
|
|
||||||
|
import com.magistr.app.dto.CreateSpecialityRequest;
|
||||||
|
import com.magistr.app.dto.SpecialityResponse;
|
||||||
|
import com.magistr.app.model.Speciality;
|
||||||
|
import com.magistr.app.repository.SpecialtiesRepository;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/specialties")
|
||||||
|
public class SpecialityController {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(SpecialityController.class);
|
||||||
|
|
||||||
|
private final SpecialtiesRepository specialtiesRepository;
|
||||||
|
|
||||||
|
public SpecialityController(SpecialtiesRepository specialtiesRepository) {
|
||||||
|
this.specialtiesRepository = specialtiesRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<Speciality> getAllSpecialties() {
|
||||||
|
logger.info("Получен запрос на получение списка специальностей");
|
||||||
|
try {
|
||||||
|
List<Speciality> specialities = specialtiesRepository.findAll();
|
||||||
|
List<Speciality> response = specialities.stream()
|
||||||
|
.map( s -> new Speciality(
|
||||||
|
s.getId(),
|
||||||
|
s.getSpecialityName(),
|
||||||
|
s.getSpecialityCode()
|
||||||
|
))
|
||||||
|
.toList();
|
||||||
|
logger.info("Получено {} специальностей", response.size());
|
||||||
|
return response;
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Ошибка при получении списка специальностей: {}", e.getMessage(), e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public ResponseEntity<?> createSpeciality(@RequestBody CreateSpecialityRequest request) {
|
||||||
|
logger.info("Получен запрос на создание специальности: name = {}, code = {}", request.getSpecialityName(), request.getSpecialityCode());
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (request.getSpecialityName() == null || request.getSpecialityName().isBlank()) {
|
||||||
|
String errorMessage = "Название специальности обязательно";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (specialtiesRepository.findBySpecialityName(request.getSpecialityName().trim()).isPresent()) {
|
||||||
|
String errorMessage = "Специальность с таким названием уже существует";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (request.getSpecialityCode() == null || request.getSpecialityCode().isBlank()) {
|
||||||
|
String errorMessage = "Код специальности обязателен";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
if (specialtiesRepository.findBySpecialityCode(request.getSpecialityCode().trim()).isPresent()) {
|
||||||
|
String errorMessage = "Специальность с таким кодом уже существует";
|
||||||
|
logger.error("Ошибка валидации: {}", errorMessage);
|
||||||
|
return ResponseEntity.badRequest().body(Map.of("message", errorMessage));
|
||||||
|
}
|
||||||
|
|
||||||
|
Speciality speciality = new Speciality();
|
||||||
|
speciality.setSpecialityName(request.getSpecialityName());
|
||||||
|
speciality.setSpecialityCode(request.getSpecialityCode());
|
||||||
|
specialtiesRepository.save(speciality);
|
||||||
|
|
||||||
|
logger.info("Специальность успешно создана с ID: {}", speciality.getId());
|
||||||
|
|
||||||
|
return ResponseEntity.ok(
|
||||||
|
new SpecialityResponse(
|
||||||
|
speciality.getId(),
|
||||||
|
speciality.getSpecialityName(),
|
||||||
|
speciality.getSpecialityCode()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Ошибка при создании специальности: {}", e.getMessage(), e);
|
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
.body(Map.of("message", "Произошла ошибка при создании специальности " + e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/id")
|
||||||
|
public ResponseEntity<?> deleteSpeciality(@PathVariable Long id) {
|
||||||
|
logger.info("Получен запрос на удаление специальности с ID: {}", id);
|
||||||
|
if (!specialtiesRepository.existsById(id)) {
|
||||||
|
logger.info("Специальность с ID - {} не найдена", id);
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
specialtiesRepository.deleteById(id);
|
||||||
|
logger.info("Специальность с ID - {} успешно удалена", id);
|
||||||
|
return ResponseEntity.ok(Map.of("message", "Специальнсть удалена"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.magistr.app.dto;
|
||||||
|
|
||||||
|
public class CreateDepartmentRequest {
|
||||||
|
|
||||||
|
private String departmentName;
|
||||||
|
private Long departmentCode;
|
||||||
|
|
||||||
|
public CreateDepartmentRequest() {}
|
||||||
|
|
||||||
|
public String getDepartmentName() {
|
||||||
|
return departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentName(String departmentName) {
|
||||||
|
this.departmentName = departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getDepartmentCode() {
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode(Long departmentCode) {
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.magistr.app.dto;
|
||||||
|
|
||||||
|
public class CreateSpecialityRequest {
|
||||||
|
|
||||||
|
private String specialityName;
|
||||||
|
private String specialityCode;
|
||||||
|
|
||||||
|
public CreateSpecialityRequest() {}
|
||||||
|
|
||||||
|
public String getSpecialityName() {
|
||||||
|
return specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityName(String specialityName) {
|
||||||
|
this.specialityName = specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialityCode() {
|
||||||
|
return specialityCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityCode(String specialityCode) {
|
||||||
|
this.specialityCode = specialityCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.magistr.app.dto;
|
||||||
|
|
||||||
|
public class DepartmentResponse {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String departmentName;
|
||||||
|
private Long departmentCode;
|
||||||
|
|
||||||
|
public DepartmentResponse(Long id, String departmentName, Long departmentCode) {
|
||||||
|
this.id = id;
|
||||||
|
this.departmentName = departmentName;
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepartmentName() {
|
||||||
|
return departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentName(String departmentName) {
|
||||||
|
this.departmentName = departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getDepartmentCode() {
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode(Long departmentCode) {
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.magistr.app.dto;
|
||||||
|
|
||||||
|
public class SpecialityResponse {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String specialityName;
|
||||||
|
private String specialityCode;
|
||||||
|
|
||||||
|
public SpecialityResponse(Long id, String specialityName, String specialityCode) {
|
||||||
|
this.id = id;
|
||||||
|
this.specialityName = specialityName;
|
||||||
|
this.specialityCode = specialityCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialityName() {
|
||||||
|
return specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityName(String specialityName) {
|
||||||
|
this.specialityName = specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialityCode() {
|
||||||
|
return specialityCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityCode(String specialityCode) {
|
||||||
|
this.specialityCode = specialityCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
50
backend/src/main/java/com/magistr/app/model/Department.java
Normal file
50
backend/src/main/java/com/magistr/app/model/Department.java
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
package com.magistr.app.model;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="departments")
|
||||||
|
public class Department {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column(name = "name", nullable = false)
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
|
@Column(name = "code", nullable = false)
|
||||||
|
private Long departmentCode;
|
||||||
|
|
||||||
|
public Department() {}
|
||||||
|
|
||||||
|
public Department(Long id, String departmentName, Long departmentCode) {
|
||||||
|
this.id = id;
|
||||||
|
this.departmentName = departmentName;
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepartmentName() {
|
||||||
|
return departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentName(String departmentName) {
|
||||||
|
this.departmentName = departmentName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getDepartmentCode() {
|
||||||
|
return departmentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDepartmentCode(Long departmentCode) {
|
||||||
|
this.departmentCode = departmentCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
50
backend/src/main/java/com/magistr/app/model/Speciality.java
Normal file
50
backend/src/main/java/com/magistr/app/model/Speciality.java
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
package com.magistr.app.model;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="specialties")
|
||||||
|
public class Speciality {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column(name="name", nullable = false)
|
||||||
|
private String specialityName;
|
||||||
|
|
||||||
|
@Column(name="specialty_code",nullable = false)
|
||||||
|
private String specialityCode;
|
||||||
|
|
||||||
|
public Speciality() {}
|
||||||
|
|
||||||
|
public Speciality(Long id, String specialityName, String specialityCode) {
|
||||||
|
this.id = id;
|
||||||
|
this.specialityName = specialityName;
|
||||||
|
this.specialityCode = specialityCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialityName() {
|
||||||
|
return specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityName(String specialityName) {
|
||||||
|
this.specialityName = specialityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSpecialityCode() {
|
||||||
|
return specialityCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpecialityCode(String specialityCode) {
|
||||||
|
this.specialityCode = specialityCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.magistr.app.repository;
|
||||||
|
|
||||||
|
import com.magistr.app.model.Department;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface DepartmentRepository extends JpaRepository<Department, Long> {
|
||||||
|
|
||||||
|
Optional<Department> findByDepartmentName(String departmentName);
|
||||||
|
|
||||||
|
Optional<Department> findByDepartmentCode(Long departmentCode);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.magistr.app.repository;
|
||||||
|
|
||||||
|
import com.magistr.app.model.Speciality;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface SpecialtiesRepository extends JpaRepository<Speciality, Long> {
|
||||||
|
|
||||||
|
Optional<Speciality> findBySpecialityName(String specialityName);
|
||||||
|
|
||||||
|
Optional<Speciality> findBySpecialityCode(String specialityCode);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user