From 169f7435b13080cea339faf062e375c12ec4f4c8 Mon Sep 17 00:00:00 2001 From: ProstoDenya01 Date: Wed, 4 Mar 2026 22:49:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B2=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BD=D1=8F=D1=82=D0=B8=D1=8F=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=B3=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controller/LessonsController.java | 49 ++++++++++++++++++- .../magistr/app/dto/CreateLessonRequest.java | 27 ++++++++++ .../com/magistr/app/dto/LessonResponse.java | 41 +++++++++++++++- .../java/com/magistr/app/model/Lesson.java | 33 +++++++++++++ .../utils/TypeAndFormatLessonValidator.java | 30 ++++++++++++ db/init/init.sql | 3 ++ 6 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/java/com/magistr/app/utils/TypeAndFormatLessonValidator.java diff --git a/backend/src/main/java/com/magistr/app/controller/LessonsController.java b/backend/src/main/java/com/magistr/app/controller/LessonsController.java index f124e97..3bfc334 100644 --- a/backend/src/main/java/com/magistr/app/controller/LessonsController.java +++ b/backend/src/main/java/com/magistr/app/controller/LessonsController.java @@ -5,6 +5,7 @@ import com.magistr.app.dto.LessonResponse; import com.magistr.app.model.*; import com.magistr.app.repository.*; import com.magistr.app.utils.DayAndWeekValidator; +import com.magistr.app.utils.TypeAndFormatLessonValidator; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -25,13 +26,15 @@ public class LessonsController { private final GroupRepository groupRepository; private final SubjectRepository subjectRepository; private final EducationFormRepository educationFormRepository; + private final ClassroomRepository classroomRepository; - public LessonsController(LessonRepository lessonRepository, UserRepository teacherRepository, GroupRepository groupRepository, SubjectRepository subjectRepository, EducationFormRepository educationForm) { + public LessonsController(LessonRepository lessonRepository, UserRepository teacherRepository, GroupRepository groupRepository, SubjectRepository subjectRepository, EducationFormRepository educationForm, ClassroomRepository classroomRepository) { this.lessonRepository = lessonRepository; this.teacherRepository = teacherRepository; this.groupRepository = groupRepository; this.subjectRepository = subjectRepository; this.educationFormRepository = educationForm; + this.classroomRepository = classroomRepository; } @PostMapping("/create") @@ -54,13 +57,42 @@ public class LessonsController { return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); } - //Проверка lessonTypeId + //Проверка subjectId if (request.getSubjectId() == null || request.getSubjectId() == 0) { String errorMessage = "ID предмета обязателен"; logger.info("Ошибка валидации: {}", errorMessage); return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); } + //Проверка lessonFormat + if (request.getLessonFormat() == null || request.getLessonFormat().isBlank()) { + String errorMessage = "Выбор формата занятия обязателен"; + logger.info("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } else if(!TypeAndFormatLessonValidator.isValidFormat(request.getLessonFormat())){ + String errorMessage = "Некорректный формат занятий. " + TypeAndFormatLessonValidator.getValidFormatsMessage(); + logger.info("Ошибка валидации формата: '{}' - {}", request.getLessonFormat(), errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + + //Проверка typeLesson + if (request.getTypeLesson() == null || request.getTypeLesson().isBlank()) { + String errorMessage = "Выбор типа занятия обязателен"; + logger.info("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } else if(!TypeAndFormatLessonValidator.isValidType(request.getTypeLesson())){ + String errorMessage = "Некорректный тип занятия. " + TypeAndFormatLessonValidator.getValidTypesMessage(); + logger.info("Ошибка валидации типа: '{}' - {}", request.getTypeLesson(), errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + + //Проверка classroomId + if (request.getClassroomId() == null || request.getClassroomId() == 0) { + String errorMessage = "ID аудитории обязателен"; + logger.info("Ошибка валидации: {}", errorMessage); + return ResponseEntity.badRequest().body(Map.of("message", errorMessage)); + } + //Проверка day if (request.getDay() == null || request.getDay().isBlank()) { String errorMessage = "Выбор дня обязателен"; @@ -96,6 +128,9 @@ public class LessonsController { lesson.setTeacherId(request.getTeacherId()); lesson.setSubjectId(request.getSubjectId()); lesson.setGroupId(request.getGroupId()); + lesson.setLessonFormat(request.getLessonFormat()); + lesson.setTypeLesson(request.getTypeLesson()); + lesson.setClassroomId(request.getClassroomId()); lesson.setDay(request.getDay()); lesson.setWeek(request.getWeek()); lesson.setTime(request.getTime()); @@ -107,6 +142,9 @@ public class LessonsController { response.put("teacherId", savedLesson.getTeacherId()); response.put("groupId", savedLesson.getGroupId()); response.put("subjectId", savedLesson.getSubjectId()); + response.put("formatLesson", savedLesson.getLessonFormat()); + response.put("typeLesson", savedLesson.getTypeLesson()); + response.put("classroomId", savedLesson.getClassroomId()); response.put("day", savedLesson.getDay()); response.put("week", savedLesson.getWeek()); response.put("time", savedLesson.getTime()); @@ -152,12 +190,19 @@ public class LessonsController { .map(Subject::getName) .orElse("Неизвестно"); + String classroomName = classroomRepository.findById(lesson.getClassroomId()) + .map(Classroom::getName) + .orElse("Неизвестно"); + return new LessonResponse( lesson.getId(), teacherName, groupName, + classroomName, educationFormName, subjectName, + lesson.getTypeLesson(), + lesson.getLessonFormat(), lesson.getDay(), lesson.getWeek(), lesson.getTime() diff --git a/backend/src/main/java/com/magistr/app/dto/CreateLessonRequest.java b/backend/src/main/java/com/magistr/app/dto/CreateLessonRequest.java index bb9a3ed..8276857 100644 --- a/backend/src/main/java/com/magistr/app/dto/CreateLessonRequest.java +++ b/backend/src/main/java/com/magistr/app/dto/CreateLessonRequest.java @@ -5,6 +5,9 @@ public class CreateLessonRequest { private Long teacherId; private Long groupId; private Long subjectId; + private String lessonFormat; + private String typeLesson; + private Long classroomId; private String day; private String week; private String time; @@ -36,6 +39,30 @@ public class CreateLessonRequest { this.subjectId = subjectId; } + public String getLessonFormat() { + return lessonFormat; + } + + public void setLessonFormat(String lessonFormat) { + this.lessonFormat = lessonFormat; + } + + public String getTypeLesson() { + return typeLesson; + } + + public void setTypeLesson(String typeLesson) { + this.typeLesson = typeLesson; + } + + public Long getClassroomId() { + return classroomId; + } + + public void setClassroomId(Long classroomId) { + this.classroomId = classroomId; + } + public String getDay() { return day; } diff --git a/backend/src/main/java/com/magistr/app/dto/LessonResponse.java b/backend/src/main/java/com/magistr/app/dto/LessonResponse.java index b718edc..c1ba061 100644 --- a/backend/src/main/java/com/magistr/app/dto/LessonResponse.java +++ b/backend/src/main/java/com/magistr/app/dto/LessonResponse.java @@ -14,6 +14,10 @@ public class LessonResponse { private String educationFormName; private Long subjectId; private String subjectName; + private String lessonFormat; + private String typeLesson; + private Long classroomId; + private String classroomName; private String day; private String week; private String time; @@ -31,12 +35,15 @@ public class LessonResponse { this.time = time; } - public LessonResponse(Long id, String teacherName, String groupName, String educationFormName, String subjectName, String day, String week, String time) { + public LessonResponse(Long id, String teacherName, String groupName, String classroomName, String educationFormName, String subjectName, String typeLesson, String lessonFormat, String day, String week, String time) { this.id = id; this.teacherName = teacherName; this.groupName = groupName; + this.classroomName = classroomName; this.educationFormName = educationFormName; this.subjectName = subjectName; + this.typeLesson = typeLesson; + this.lessonFormat = lessonFormat; this.day = day; this.week = week; this.time = time; @@ -82,6 +89,38 @@ public class LessonResponse { this.groupName = groupName; } + public String getTypeLesson() { + return typeLesson; + } + + public void setTypeLesson(String typeLesson) { + this.typeLesson = typeLesson; + } + + public String getLessonFormat() { + return lessonFormat; + } + + public void setLessonFormat(String lessonFormat) { + this.lessonFormat = lessonFormat; + } + + public Long getClassroomId() { + return classroomId; + } + + public void setClassroomId(Long classroomId) { + this.classroomId = classroomId; + } + + public String getClassroomName() { + return classroomName; + } + + public void setClassroomName(String classroomName) { + this.classroomName = classroomName; + } + public String getEducationFormName() { return educationFormName; } diff --git a/backend/src/main/java/com/magistr/app/model/Lesson.java b/backend/src/main/java/com/magistr/app/model/Lesson.java index 5d89202..b28d27b 100644 --- a/backend/src/main/java/com/magistr/app/model/Lesson.java +++ b/backend/src/main/java/com/magistr/app/model/Lesson.java @@ -19,6 +19,15 @@ public class Lesson { @Column(name = "subject_id", nullable = false) private Long subjectId; + @Column(name = "lesson_format", nullable = false, length = 255) + private String lessonFormat; + + @Column(name = "type_lesson", nullable = false, length = 255) + private String typeLesson; + + @Column(name = "classroom_id", nullable = false) + private Long classroomId; + @Column(name = "day", nullable = false, length = 255) private String day; @@ -63,6 +72,30 @@ public class Lesson { this.subjectId = subjectId; } + public String getLessonFormat() { + return lessonFormat; + } + + public void setLessonFormat(String lessonFormat) { + this.lessonFormat = lessonFormat; + } + + public String getTypeLesson() { + return typeLesson; + } + + public void setTypeLesson(String typeLesson) { + this.typeLesson = typeLesson; + } + + public Long getClassroomId() { + return classroomId; + } + + public void setClassroomId(Long classroomId) { + this.classroomId = classroomId; + } + public String getDay() { return day; } diff --git a/backend/src/main/java/com/magistr/app/utils/TypeAndFormatLessonValidator.java b/backend/src/main/java/com/magistr/app/utils/TypeAndFormatLessonValidator.java new file mode 100644 index 0000000..91c7d71 --- /dev/null +++ b/backend/src/main/java/com/magistr/app/utils/TypeAndFormatLessonValidator.java @@ -0,0 +1,30 @@ +package com.magistr.app.utils; + +import java.util.Set; + +public class TypeAndFormatLessonValidator { + + private static final Set VALID_TYPES = Set.of( + "Лекция", "Лабораторная работа", "Практическая" + ); + + private static final Set VALID_FORMATS = Set.of( + "Онлайн", "Очно" + ); + + public static boolean isValidType(String type) { + return type != null && VALID_TYPES.contains(type); + } + + public static boolean isValidFormat(String format) { + return format != null && VALID_FORMATS.contains(format); + } + + public static String getValidTypesMessage() { + return "Допустимые типы: " + String.join(", ", VALID_TYPES); + } + + public static String getValidFormatsMessage() { + return "Допустимые форматы: " + String.join(", ", VALID_FORMATS); + } +} diff --git a/db/init/init.sql b/db/init/init.sql index eb434fb..eac8590 100644 --- a/db/init/init.sql +++ b/db/init/init.sql @@ -186,6 +186,9 @@ CREATE TABLE IF NOT EXISTS lessons ( teacher_id BIGINT NOT NULL REFERENCES users(id), group_id BIGINT NOT NULL REFERENCES student_groups(id), subject_id BIGINT NOT NULL REFERENCES subjects(id), + lesson_format VARCHAR(255) NOT NULL, + type_lesson VARCHAR(255) NOT NULL, + classroom_id BIGINT NOT NULL REFERENCES classrooms(id), day VARCHAR(255) NOT NULL, week VARCHAR(255) NOT NULL, time VARCHAR(255) NOT NULL