From 90871685e9d23098ba9c2ef2075210935449a07e Mon Sep 17 00:00:00 2001 From: GokaPek Date: Fri, 14 Feb 2025 12:49:13 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- schedule/pom.xml | 6 +++++- .../unive/schedule/ScheduleApplication.java | 2 ++ .../edu/unive/schedule/domain/Classroom.java | 18 ++++++++++++++++++ schedule/src/main/resources/application.yml | 6 ++++++ 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/Classroom.java create mode 100644 schedule/src/main/resources/application.yml diff --git a/schedule/pom.xml b/schedule/pom.xml index 3cdb671..77b9578 100644 --- a/schedule/pom.xml +++ b/schedule/pom.xml @@ -68,7 +68,11 @@ spring-kafka-test test - + + org.springframework.boot + spring-boot-starter-data-jpa + + diff --git a/schedule/src/main/java/edu/unive/schedule/ScheduleApplication.java b/schedule/src/main/java/edu/unive/schedule/ScheduleApplication.java index 6e21ec8..5a563da 100644 --- a/schedule/src/main/java/edu/unive/schedule/ScheduleApplication.java +++ b/schedule/src/main/java/edu/unive/schedule/ScheduleApplication.java @@ -2,8 +2,10 @@ package edu.unive.schedule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application.yml") public class ScheduleApplication { public static void main(String[] args) { diff --git a/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java b/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java new file mode 100644 index 0000000..a48d7d1 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java @@ -0,0 +1,18 @@ +package edu.unive.schedule.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Data; + +@Data +@Entity +public class Classroom { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; + private String type; +} diff --git a/schedule/src/main/resources/application.yml b/schedule/src/main/resources/application.yml new file mode 100644 index 0000000..40df211 --- /dev/null +++ b/schedule/src/main/resources/application.yml @@ -0,0 +1,6 @@ +spring: + application.name: spring + datasource: + url: jdbc:postgresql://localhost:5432/u_schedule + username: postgres + password: postgres \ No newline at end of file From 7b2cfb24a134eea26652f5df09afdc2d6cbc22b0 Mon Sep 17 00:00:00 2001 From: GokaPek Date: Fri, 14 Feb 2025 14:58:50 +0400 Subject: [PATCH 2/4] =?UTF-8?q?=D0=A2=D1=80=D0=B0=D0=B1=D0=BB=20=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B7=D0=B0=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- schedule/pom.xml | 33 ++++++++++++++- .../schedule/controller/ClassroomApi.java | 14 +++++++ .../controller/ClassroomController.java | 24 +++++++++++ .../schedule/controller/ScheduleApi.java | 18 ++++++++ .../controller/ScheduleController.java | 33 +++++++++++++++ .../edu/unive/schedule/domain/Classroom.java | 12 ++---- .../edu/unive/schedule/domain/Schedule.java | 15 +++++++ .../domain/entity/ClassroomEntity.java | 18 ++++++++ .../schedule/domain/entity/ClassroomType.java | 6 +++ .../domain/entity/ScheduleEntity.java | 27 ++++++++++++ .../domain/mapper/ClassroomEntityMapper.java | 10 +++++ .../domain/mapper/ClassroomMapper.java | 10 +++++ .../domain/mapper/ScheduleEntityMapper.java | 12 ++++++ .../domain/mapper/ScheduleMapper.java | 12 ++++++ .../repository/ClassroomRepository.java | 10 +++++ .../repository/ScheduleRepository.java | 9 ++++ .../schedule/service/ClassroomService.java | 11 +++++ .../service/ClassroomServiceImpl.java | 31 ++++++++++++++ .../schedule/service/ScheduleService.java | 11 +++++ .../schedule/service/ScheduleServiceImpl.java | 41 +++++++++++++++++++ .../src/main/resources/application.properties | 1 - schedule/src/main/resources/application.yml | 15 ++++++- .../main/resources/db/migration/V1__Init.sql | 15 +++++++ ...va => ScheduleEntityApplicationTests.java} | 2 +- 24 files changed, 376 insertions(+), 14 deletions(-) create mode 100644 schedule/src/main/java/edu/unive/schedule/controller/ClassroomApi.java create mode 100644 schedule/src/main/java/edu/unive/schedule/controller/ClassroomController.java create mode 100644 schedule/src/main/java/edu/unive/schedule/controller/ScheduleApi.java create mode 100644 schedule/src/main/java/edu/unive/schedule/controller/ScheduleController.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/Schedule.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomEntity.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomType.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomEntityMapper.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomMapper.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleEntityMapper.java create mode 100644 schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleMapper.java create mode 100644 schedule/src/main/java/edu/unive/schedule/repository/ClassroomRepository.java create mode 100644 schedule/src/main/java/edu/unive/schedule/repository/ScheduleRepository.java create mode 100644 schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java create mode 100644 schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java create mode 100644 schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java create mode 100644 schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java delete mode 100644 schedule/src/main/resources/application.properties create mode 100644 schedule/src/main/resources/db/migration/V1__Init.sql rename schedule/src/test/java/edu/unive/schedule/{ScheduleApplicationTests.java => ScheduleEntityApplicationTests.java} (82%) diff --git a/schedule/pom.xml b/schedule/pom.xml index 77b9578..7dce915 100644 --- a/schedule/pom.xml +++ b/schedule/pom.xml @@ -31,6 +31,10 @@ 2024.0.0 + + org.springframework.boot + spring-boot-starter-web + org.flywaydb flyway-core @@ -72,7 +76,29 @@ org.springframework.boot spring-boot-starter-data-jpa - + + org.mapstruct + mapstruct + 1.5.5.Final + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + provided + + + org.springframework.boot + spring-boot-starter-actuator + + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.7.0 + + @@ -96,6 +122,11 @@ org.projectlombok lombok + + org.mapstruct + mapstruct-processor + 1.5.5.Final + diff --git a/schedule/src/main/java/edu/unive/schedule/controller/ClassroomApi.java b/schedule/src/main/java/edu/unive/schedule/controller/ClassroomApi.java new file mode 100644 index 0000000..c9c46ee --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/controller/ClassroomApi.java @@ -0,0 +1,14 @@ +package edu.unive.schedule.controller; + +import edu.unive.schedule.domain.Classroom; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RequestMapping("/api/classrooms") +public interface ClassroomApi { + @PostMapping + ResponseEntity createClassroom(@RequestBody Classroom classroomDTO); + + @GetMapping("/{id}") + ResponseEntity getClassroom(@PathVariable Long id); +} diff --git a/schedule/src/main/java/edu/unive/schedule/controller/ClassroomController.java b/schedule/src/main/java/edu/unive/schedule/controller/ClassroomController.java new file mode 100644 index 0000000..e3e76bc --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/controller/ClassroomController.java @@ -0,0 +1,24 @@ +package edu.unive.schedule.controller; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.service.ClassroomService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class ClassroomController implements ClassroomApi{ + + private final ClassroomService classroomService; + + public ResponseEntity createClassroom(Classroom classroomDTO) { + classroomService.createClassroom(classroomDTO); + return ResponseEntity.ok().build(); + } + + public ResponseEntity getClassroom(Long id) { + var dto = classroomService.getClassroomById(id); + return ResponseEntity.ok(dto); + } +} diff --git a/schedule/src/main/java/edu/unive/schedule/controller/ScheduleApi.java b/schedule/src/main/java/edu/unive/schedule/controller/ScheduleApi.java new file mode 100644 index 0000000..de2b7f3 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/controller/ScheduleApi.java @@ -0,0 +1,18 @@ +package edu.unive.schedule.controller; + +import edu.unive.schedule.domain.Schedule; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RequestMapping("/api/schedules") +public interface ScheduleApi { + + @PostMapping + ResponseEntity createSchedule(@RequestBody Schedule scheduleDTO); + + @PutMapping("/{id}") + ResponseEntity updateSchedule(@PathVariable Long id, @RequestBody Schedule scheduleDTO); + + @DeleteMapping("/{id}") + ResponseEntity deleteSchedule(@PathVariable Long id); +} diff --git a/schedule/src/main/java/edu/unive/schedule/controller/ScheduleController.java b/schedule/src/main/java/edu/unive/schedule/controller/ScheduleController.java new file mode 100644 index 0000000..ec1ebe6 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/controller/ScheduleController.java @@ -0,0 +1,33 @@ +package edu.unive.schedule.controller; + +import edu.unive.schedule.domain.Schedule; +import edu.unive.schedule.service.ScheduleService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +public class ScheduleController implements ScheduleApi { + + private final ScheduleService scheduleService; + + @Override + public ResponseEntity createSchedule(Schedule scheduleDTO) { + scheduleService.createSchedule(scheduleDTO); + + return ResponseEntity.ok().build(); + } + + @Override + public ResponseEntity updateSchedule(Long id, Schedule scheduleDTO) { + scheduleService.updateSchedule(id, scheduleDTO); + return ResponseEntity.ok().build(); + } + + @Override + public ResponseEntity deleteSchedule(@PathVariable Long id) { + scheduleService.deleteSchedule(id); + return ResponseEntity.ok().build(); + } +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java b/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java index a48d7d1..ec76b62 100644 --- a/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java +++ b/schedule/src/main/java/edu/unive/schedule/domain/Classroom.java @@ -1,18 +1,12 @@ package edu.unive.schedule.domain; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; + +import edu.unive.schedule.domain.entity.ClassroomType; import lombok.Data; @Data -@Entity public class Classroom { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String name; - private String type; + private ClassroomType type; } diff --git a/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java b/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java new file mode 100644 index 0000000..c6dc310 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java @@ -0,0 +1,15 @@ +package edu.unive.schedule.domain; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class Schedule { + private Long id; + private LocalDateTime startTime; + private LocalDateTime endTime; + private Long classroomId; + private Long courseId; // ID курса из внешнего микросервиса + private Long teacherId; // ID преподавателя из внешнего микросервиса +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomEntity.java b/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomEntity.java new file mode 100644 index 0000000..1e6f2f0 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomEntity.java @@ -0,0 +1,18 @@ +package edu.unive.schedule.domain.entity; + +import jakarta.persistence.*; +import lombok.Data; + +@Data +@Entity +@Table(name = "classroom") +public class ClassroomEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", nullable = false, unique = true) + private Long id; + @Column(name = "name", nullable = false) + private String name; + @Column(name = "type", nullable = false) + private ClassroomType type; +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomType.java b/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomType.java new file mode 100644 index 0000000..4042d6f --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/entity/ClassroomType.java @@ -0,0 +1,6 @@ +package edu.unive.schedule.domain.entity; + +public enum ClassroomType { + LECTURE, + LAB +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java b/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java new file mode 100644 index 0000000..479cb3e --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java @@ -0,0 +1,27 @@ +package edu.unive.schedule.domain.entity; + +import jakarta.persistence.*; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Entity +@Table(name = "schedule") +public class ScheduleEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id", nullable = false, unique = true) + private Long id; + @Column(name = "start_time", nullable = false) + private LocalDateTime startTime; + @Column(name = "end_time", nullable = false) + private LocalDateTime endTime; + + @ManyToOne + @JoinColumn(name = "classroom_id") + private ClassroomEntity classroom; + + private Long courseId; // ID курса из внешнего микросервиса + private Long teacherId; // ID преподавателя из внешнего микросервиса +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomEntityMapper.java b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomEntityMapper.java new file mode 100644 index 0000000..28ee429 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomEntityMapper.java @@ -0,0 +1,10 @@ +package edu.unive.schedule.domain.mapper; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.domain.entity.ClassroomEntity; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface ClassroomEntityMapper { + ClassroomEntity ToEntity(Classroom classroom); +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomMapper.java b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomMapper.java new file mode 100644 index 0000000..2fd90dd --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ClassroomMapper.java @@ -0,0 +1,10 @@ +package edu.unive.schedule.domain.mapper; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.domain.entity.ClassroomEntity; +import org.mapstruct.Mapper; + +@Mapper(componentModel = "spring") +public interface ClassroomMapper { + Classroom toDTO(ClassroomEntity classroomEntity); +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleEntityMapper.java b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleEntityMapper.java new file mode 100644 index 0000000..8099416 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleEntityMapper.java @@ -0,0 +1,12 @@ +package edu.unive.schedule.domain.mapper; + +import edu.unive.schedule.domain.Schedule; +import edu.unive.schedule.domain.entity.ScheduleEntity; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface ScheduleEntityMapper { + @Mapping(source = "classroomId", target = "classroom.id") + ScheduleEntity toEntity(Schedule schedule); +} diff --git a/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleMapper.java b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleMapper.java new file mode 100644 index 0000000..b1aa00d --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/domain/mapper/ScheduleMapper.java @@ -0,0 +1,12 @@ +package edu.unive.schedule.domain.mapper; + +import edu.unive.schedule.domain.Schedule; +import edu.unive.schedule.domain.entity.ScheduleEntity; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper(componentModel = "spring") +public interface ScheduleMapper { + @Mapping(source = "classroomEntity.id", target = "classroomId") + Schedule toDTO(ScheduleEntity classroomEntity); +} diff --git a/schedule/src/main/java/edu/unive/schedule/repository/ClassroomRepository.java b/schedule/src/main/java/edu/unive/schedule/repository/ClassroomRepository.java new file mode 100644 index 0000000..8d5665e --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/repository/ClassroomRepository.java @@ -0,0 +1,10 @@ +package edu.unive.schedule.repository; + +import edu.unive.schedule.domain.entity.ClassroomEntity; +import edu.unive.schedule.domain.entity.ScheduleEntity; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ClassroomRepository extends JpaRepository { +} + diff --git a/schedule/src/main/java/edu/unive/schedule/repository/ScheduleRepository.java b/schedule/src/main/java/edu/unive/schedule/repository/ScheduleRepository.java new file mode 100644 index 0000000..a358429 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/repository/ScheduleRepository.java @@ -0,0 +1,9 @@ +package edu.unive.schedule.repository; + +import edu.unive.schedule.domain.entity.ScheduleEntity; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface ScheduleRepository extends JpaRepository { +} + diff --git a/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java b/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java new file mode 100644 index 0000000..1b72dc8 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java @@ -0,0 +1,11 @@ +package edu.unive.schedule.service; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.domain.entity.ClassroomEntity; +import org.springframework.stereotype.Service; + +@Service +public interface ClassroomService { + void createClassroom(Classroom classroom); + Classroom getClassroomById(Long id); +} diff --git a/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java b/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java new file mode 100644 index 0000000..b9f2427 --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java @@ -0,0 +1,31 @@ +package edu.unive.schedule.service; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.domain.entity.ClassroomEntity; +import edu.unive.schedule.domain.mapper.ClassroomEntityMapper; +import edu.unive.schedule.domain.mapper.ClassroomMapper; +import edu.unive.schedule.repository.ClassroomRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class ClassroomServiceImpl implements ClassroomService { + + private final ClassroomRepository classroomRepository; + private final ClassroomEntityMapper classroomEntityMapper; + private final ClassroomMapper classroomMapper; + + @Override + @Transactional + public void createClassroom(Classroom classroomDTO) { + ClassroomEntity entity = classroomEntityMapper.ToEntity(classroomDTO); + classroomRepository.save(entity); + } + + @Override + public Classroom getClassroomById(Long id) { + return classroomMapper.toDTO(classroomRepository.findById(id).orElse(null)); + } +} \ No newline at end of file diff --git a/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java b/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java new file mode 100644 index 0000000..d9d375c --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java @@ -0,0 +1,11 @@ +package edu.unive.schedule.service; + +import edu.unive.schedule.domain.Schedule; +import org.springframework.stereotype.Service; + +@Service +public interface ScheduleService { + void createSchedule(Schedule schedule); + void updateSchedule(Long id, Schedule schedule); + void deleteSchedule(Long id); +} diff --git a/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java b/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java new file mode 100644 index 0000000..496d99c --- /dev/null +++ b/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java @@ -0,0 +1,41 @@ +package edu.unive.schedule.service; + +import edu.unive.schedule.domain.Classroom; +import edu.unive.schedule.domain.Schedule; +import edu.unive.schedule.domain.entity.ClassroomEntity; +import edu.unive.schedule.domain.entity.ScheduleEntity; +import edu.unive.schedule.domain.mapper.ScheduleEntityMapper; +import edu.unive.schedule.domain.mapper.ScheduleMapper; +import edu.unive.schedule.repository.ClassroomRepository; +import edu.unive.schedule.repository.ScheduleRepository; +import jakarta.transaction.Transactional; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ScheduleServiceImpl implements ScheduleService { + + private final ScheduleRepository scheduleRepository; + + private final ScheduleEntityMapper scheduleEntityMapper; + + @Transactional + @Override + public void createSchedule(Schedule scheduleDTO) { + ScheduleEntity entity = scheduleEntityMapper.toEntity(scheduleDTO); + scheduleRepository.save(entity); + } + + @Transactional + @Override + public void updateSchedule(Long id, Schedule scheduleDTO) { + ScheduleEntity entity = scheduleEntityMapper.toEntity(scheduleDTO); + scheduleRepository.save(entity); + } + + @Override + public void deleteSchedule(Long id) { + scheduleRepository.deleteById(id); + } +} diff --git a/schedule/src/main/resources/application.properties b/schedule/src/main/resources/application.properties deleted file mode 100644 index 27e3fba..0000000 --- a/schedule/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=schedule diff --git a/schedule/src/main/resources/application.yml b/schedule/src/main/resources/application.yml index 40df211..0cfa47c 100644 --- a/schedule/src/main/resources/application.yml +++ b/schedule/src/main/resources/application.yml @@ -1,6 +1,17 @@ +server: + port: 8280 spring: - application.name: spring + application.name: schedule datasource: url: jdbc:postgresql://localhost:5432/u_schedule username: postgres - password: postgres \ No newline at end of file + password: postgres + flyway: + enabled: true + locations: classpath:db/migration + baseline-on-migrate: true + jpa: + show-sql: true + properties: + hibernate: + format_sql: true \ No newline at end of file diff --git a/schedule/src/main/resources/db/migration/V1__Init.sql b/schedule/src/main/resources/db/migration/V1__Init.sql new file mode 100644 index 0000000..1d43e9f --- /dev/null +++ b/schedule/src/main/resources/db/migration/V1__Init.sql @@ -0,0 +1,15 @@ +CREATE TABLE classroom ( + id BIGINT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + type VARCHAR(50) NOT NULL +); + +CREATE TABLE schedule ( + id BIGINT PRIMARY KEY, + start_time TIMESTAMP NOT NULL, + end_time TIMESTAMP NOT NULL, + classroom_id BIGINT, + course_id BIGINT, + teacher_id BIGINT, + FOREIGN KEY (classroom_id) REFERENCES classroom(id) +); \ No newline at end of file diff --git a/schedule/src/test/java/edu/unive/schedule/ScheduleApplicationTests.java b/schedule/src/test/java/edu/unive/schedule/ScheduleEntityApplicationTests.java similarity index 82% rename from schedule/src/test/java/edu/unive/schedule/ScheduleApplicationTests.java rename to schedule/src/test/java/edu/unive/schedule/ScheduleEntityApplicationTests.java index 776a6df..6be2a53 100644 --- a/schedule/src/test/java/edu/unive/schedule/ScheduleApplicationTests.java +++ b/schedule/src/test/java/edu/unive/schedule/ScheduleEntityApplicationTests.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class ScheduleApplicationTests { +class ScheduleEntityApplicationTests { @Test void contextLoads() { From 663df6a3132c447612faa34dda4ff54e961cd95e Mon Sep 17 00:00:00 2001 From: GokaPek Date: Fri, 14 Feb 2025 22:19:27 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=BD=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../edu/unive/schedule/service/ClassroomService.java | 3 --- .../edu/unive/schedule/service/ClassroomServiceImpl.java | 6 +++--- .../java/edu/unive/schedule/service/ScheduleService.java | 2 -- .../edu/unive/schedule/service/ScheduleServiceImpl.java | 9 +++------ schedule/src/main/resources/application.yml | 3 ++- schedule/src/main/resources/db/migration/V1__Init.sql | 6 ++++-- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java b/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java index 1b72dc8..ab084b3 100644 --- a/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java +++ b/schedule/src/main/java/edu/unive/schedule/service/ClassroomService.java @@ -1,10 +1,7 @@ package edu.unive.schedule.service; import edu.unive.schedule.domain.Classroom; -import edu.unive.schedule.domain.entity.ClassroomEntity; -import org.springframework.stereotype.Service; -@Service public interface ClassroomService { void createClassroom(Classroom classroom); Classroom getClassroomById(Long id); diff --git a/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java b/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java index b9f2427..0debffb 100644 --- a/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java +++ b/schedule/src/main/java/edu/unive/schedule/service/ClassroomServiceImpl.java @@ -1,13 +1,12 @@ package edu.unive.schedule.service; import edu.unive.schedule.domain.Classroom; -import edu.unive.schedule.domain.entity.ClassroomEntity; import edu.unive.schedule.domain.mapper.ClassroomEntityMapper; import edu.unive.schedule.domain.mapper.ClassroomMapper; import edu.unive.schedule.repository.ClassroomRepository; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -20,7 +19,8 @@ public class ClassroomServiceImpl implements ClassroomService { @Override @Transactional public void createClassroom(Classroom classroomDTO) { - ClassroomEntity entity = classroomEntityMapper.ToEntity(classroomDTO); + var entity = classroomEntityMapper.ToEntity(classroomDTO); + entity.setId(null); classroomRepository.save(entity); } diff --git a/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java b/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java index d9d375c..fcf4f4f 100644 --- a/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java +++ b/schedule/src/main/java/edu/unive/schedule/service/ScheduleService.java @@ -1,9 +1,7 @@ package edu.unive.schedule.service; import edu.unive.schedule.domain.Schedule; -import org.springframework.stereotype.Service; -@Service public interface ScheduleService { void createSchedule(Schedule schedule); void updateSchedule(Long id, Schedule schedule); diff --git a/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java b/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java index 496d99c..0723a88 100644 --- a/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java +++ b/schedule/src/main/java/edu/unive/schedule/service/ScheduleServiceImpl.java @@ -1,19 +1,15 @@ package edu.unive.schedule.service; -import edu.unive.schedule.domain.Classroom; import edu.unive.schedule.domain.Schedule; -import edu.unive.schedule.domain.entity.ClassroomEntity; import edu.unive.schedule.domain.entity.ScheduleEntity; import edu.unive.schedule.domain.mapper.ScheduleEntityMapper; -import edu.unive.schedule.domain.mapper.ScheduleMapper; -import edu.unive.schedule.repository.ClassroomRepository; import edu.unive.schedule.repository.ScheduleRepository; import jakarta.transaction.Transactional; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @Service -@AllArgsConstructor +@RequiredArgsConstructor public class ScheduleServiceImpl implements ScheduleService { private final ScheduleRepository scheduleRepository; @@ -24,6 +20,7 @@ public class ScheduleServiceImpl implements ScheduleService { @Override public void createSchedule(Schedule scheduleDTO) { ScheduleEntity entity = scheduleEntityMapper.toEntity(scheduleDTO); + entity.setId(null); scheduleRepository.save(entity); } diff --git a/schedule/src/main/resources/application.yml b/schedule/src/main/resources/application.yml index 0cfa47c..5c6d1be 100644 --- a/schedule/src/main/resources/application.yml +++ b/schedule/src/main/resources/application.yml @@ -14,4 +14,5 @@ spring: show-sql: true properties: hibernate: - format_sql: true \ No newline at end of file + format_sql: true + use_sql_comments: true \ No newline at end of file diff --git a/schedule/src/main/resources/db/migration/V1__Init.sql b/schedule/src/main/resources/db/migration/V1__Init.sql index 1d43e9f..08cb2cc 100644 --- a/schedule/src/main/resources/db/migration/V1__Init.sql +++ b/schedule/src/main/resources/db/migration/V1__Init.sql @@ -1,11 +1,13 @@ CREATE TABLE classroom ( - id BIGINT PRIMARY KEY, + id BIGSERIAL + CONSTRAINT classroom_pk PRIMARY KEY, name VARCHAR(255) NOT NULL, type VARCHAR(50) NOT NULL ); CREATE TABLE schedule ( - id BIGINT PRIMARY KEY, + id BIGSERIAL + CONSTRAINT schedule_pk PRIMARY KEY, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP NOT NULL, classroom_id BIGINT, From b83d88f442311a5236a38780583126d0705ccbb9 Mon Sep 17 00:00:00 2001 From: GokaPek Date: Fri, 14 Feb 2025 22:28:08 +0400 Subject: [PATCH 4/4] =?UTF-8?q?=D0=A2=D0=BE=D1=87=D0=BD=D0=BE=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=82=20=D0=BE=D0=BA=D0=BE=D0=BD=D1=87=D0=B5?= =?UTF-8?q?=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/edu/unive/schedule/domain/Schedule.java | 4 +--- .../edu/unive/schedule/domain/entity/ScheduleEntity.java | 6 ++---- schedule/src/main/resources/db/migration/V1__Init.sql | 3 +-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java b/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java index c6dc310..13ff3c9 100644 --- a/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java +++ b/schedule/src/main/java/edu/unive/schedule/domain/Schedule.java @@ -2,13 +2,11 @@ package edu.unive.schedule.domain; import lombok.Data; -import java.time.LocalDateTime; @Data public class Schedule { private Long id; - private LocalDateTime startTime; - private LocalDateTime endTime; + private int pairNumber; private Long classroomId; private Long courseId; // ID курса из внешнего микросервиса private Long teacherId; // ID преподавателя из внешнего микросервиса diff --git a/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java b/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java index 479cb3e..cb93bff 100644 --- a/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java +++ b/schedule/src/main/java/edu/unive/schedule/domain/entity/ScheduleEntity.java @@ -13,10 +13,8 @@ public class ScheduleEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false, unique = true) private Long id; - @Column(name = "start_time", nullable = false) - private LocalDateTime startTime; - @Column(name = "end_time", nullable = false) - private LocalDateTime endTime; + @Column(name = "pair_number", nullable = false) + private int pairNumber; @ManyToOne @JoinColumn(name = "classroom_id") diff --git a/schedule/src/main/resources/db/migration/V1__Init.sql b/schedule/src/main/resources/db/migration/V1__Init.sql index 08cb2cc..4d37083 100644 --- a/schedule/src/main/resources/db/migration/V1__Init.sql +++ b/schedule/src/main/resources/db/migration/V1__Init.sql @@ -8,8 +8,7 @@ CREATE TABLE classroom ( CREATE TABLE schedule ( id BIGSERIAL CONSTRAINT schedule_pk PRIMARY KEY, - start_time TIMESTAMP NOT NULL, - end_time TIMESTAMP NOT NULL, + pair_number INT, classroom_id BIGINT, course_id BIGINT, teacher_id BIGINT,