commit 80b7e8e22fbd8e90c4a2620feaa52604886f09cc Author: Andrey Limasov Date: Tue Nov 4 14:25:40 2025 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d769462 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/libs/NTO-2025-Encoder-1.0-SNAPSHOT-obf.jar b/libs/NTO-2025-Encoder-1.0-SNAPSHOT-obf.jar new file mode 100644 index 0000000..4a2cb86 Binary files /dev/null and b/libs/NTO-2025-Encoder-1.0-SNAPSHOT-obf.jar differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..05ea605 --- /dev/null +++ b/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + org.example + NTO-2025-Individual-Task + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + + org.springframework.boot + spring-boot-starter-parent + 3.5.5 + + + + + com.h2database + h2 + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.liquibase + liquibase-core + + + org.example + NTO-2025-Encoder + 1.0-SNAPSHOT + system + ${project.basedir}/libs/NTO-2025-Encoder-1.0-SNAPSHOT-obf.jar + + + + \ No newline at end of file diff --git a/src/main/java/ru/example/nto/App.java b/src/main/java/ru/example/nto/App.java new file mode 100644 index 0000000..87bb934 --- /dev/null +++ b/src/main/java/ru/example/nto/App.java @@ -0,0 +1,9 @@ +package ru.example.nto; + +import org.springframework.boot.SpringApplication; + +public class App { + public static void main(String[] args) { + SpringApplication.run(App.class, args); + } +} diff --git a/src/main/java/ru/example/nto/controller/CodeController.java b/src/main/java/ru/example/nto/controller/CodeController.java new file mode 100644 index 0000000..0b17d14 --- /dev/null +++ b/src/main/java/ru/example/nto/controller/CodeController.java @@ -0,0 +1,35 @@ +package ru.example.nto.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ru.example.nto.service.DepartmentService; +import ru.nto.security.Encoder; +import ru.nto.security.EncoderApi; + +@RestController +@RequestMapping("code") +public class CodeController { + private final DepartmentService departmentService; + private final EncoderApi encoderApi = Encoder.create(); + + public CodeController(DepartmentService departmentService) { + this.departmentService = departmentService; + } + + @GetMapping("/task1/{id}") + public int getTask1Code(@PathVariable long id) { + return encoderApi.encode(null, id); + } + + @GetMapping("/task2/{id}") + public int getTask2Code(@PathVariable long id) { + return encoderApi.encode(departmentService.getAll(), id); + } + + @GetMapping("/task3/{id}") + public int getTask3Code(@PathVariable long id) { + return encoderApi.encode(departmentService.getByName("Департамент аналитики"), id); + } +} diff --git a/src/main/java/ru/example/nto/controller/DepartmentController.java b/src/main/java/ru/example/nto/controller/DepartmentController.java new file mode 100644 index 0000000..8290262 --- /dev/null +++ b/src/main/java/ru/example/nto/controller/DepartmentController.java @@ -0,0 +1,31 @@ +package ru.example.nto.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.example.nto.entity.Department; +import ru.example.nto.service.DepartmentService; + +import java.util.List; + +@RestController +@RequestMapping("api/v1/department") +public class DepartmentController { + + private final DepartmentService departmentService; + + public DepartmentController(DepartmentService departmentService) { + this.departmentService = departmentService; + } + + @GetMapping + @ResponseStatus(code = HttpStatus.OK) + public List getAll() { + return departmentService.getAll(); + } + + @GetMapping("/{name}") + @ResponseStatus(HttpStatus.OK) + public Department getByName(@PathVariable String name) { + return departmentService.getByName(name); + } +} diff --git a/src/main/java/ru/example/nto/entity/Department.java b/src/main/java/ru/example/nto/entity/Department.java new file mode 100644 index 0000000..c9bf32b --- /dev/null +++ b/src/main/java/ru/example/nto/entity/Department.java @@ -0,0 +1,56 @@ +package ru.example.nto.entity; + +import java.util.Objects; + +//TODO: Задание 2 +// Добавьте все необходимые аннотации для класса-сущности Department. +public class Department { + + private long id; + + private String name; + + public Department() { + } + + public Department(long id, String name) { + this.id = id; + this.name = name; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setId(long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Department{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + Department that = (Department) o; + return id == that.id && Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } +} diff --git a/src/main/java/ru/example/nto/exception/DepartmentNotFoundException.java b/src/main/java/ru/example/nto/exception/DepartmentNotFoundException.java new file mode 100644 index 0000000..d0fe942 --- /dev/null +++ b/src/main/java/ru/example/nto/exception/DepartmentNotFoundException.java @@ -0,0 +1,7 @@ +package ru.example.nto.exception; + +public class DepartmentNotFoundException extends RuntimeException { + public DepartmentNotFoundException(String msg) { + super(msg); + } +} diff --git a/src/main/java/ru/example/nto/repository/DepartmentRepository.java b/src/main/java/ru/example/nto/repository/DepartmentRepository.java new file mode 100644 index 0000000..92330e6 --- /dev/null +++ b/src/main/java/ru/example/nto/repository/DepartmentRepository.java @@ -0,0 +1,11 @@ +package ru.example.nto.repository; + +//TODO: Задание 2 +// Опишите интерфейс DepartmentRepository, +// так чтобы он обеспечивал корректную работу со всеми CRUD-операциями сущности Department. +public interface DepartmentRepository { + + //TODO: Задание 3 + // Добавьте метод для получения из базы данных департамента по его наименованию. + +} diff --git a/src/main/java/ru/example/nto/service/DepartmentService.java b/src/main/java/ru/example/nto/service/DepartmentService.java new file mode 100644 index 0000000..012a9a8 --- /dev/null +++ b/src/main/java/ru/example/nto/service/DepartmentService.java @@ -0,0 +1,11 @@ +package ru.example.nto.service; + +import ru.example.nto.entity.Department; + +import java.util.List; + +public interface DepartmentService { + List getAll(); + + Department getByName(String name); +} diff --git a/src/main/java/ru/example/nto/service/impl/DepartmentServiceImpl.java b/src/main/java/ru/example/nto/service/impl/DepartmentServiceImpl.java new file mode 100644 index 0000000..bc99cb7 --- /dev/null +++ b/src/main/java/ru/example/nto/service/impl/DepartmentServiceImpl.java @@ -0,0 +1,37 @@ +package ru.example.nto.service.impl; + +import org.springframework.stereotype.Service; +import ru.example.nto.entity.Department; +import ru.example.nto.repository.DepartmentRepository; +import ru.example.nto.service.DepartmentService; + +import java.util.List; + +@Service +public class DepartmentServiceImpl implements DepartmentService { + + private final DepartmentRepository departmentRepository; + + //TODO: Задание 2 + // Исправьте конструктор так, чтобы он корректно инициализировал поле departmentRepository. + public DepartmentServiceImpl() { + this.departmentRepository = null; + } + + @Override + public List getAll() { + //TODO: Задание 2 + // Реализуйте метод, который возвращает всех департаментов, которые есть в базе данных. + return null; + } + + @Override + public Department getByName(String name) { + //TODO: Задание 3 + // Реализуйте метод, который получает департамент по его наименованию + // и обрабатывает результат слоя repository. + // Если департамента с указанным наименованием в базе данных нет, + // то необходимо выбрасывать DepartmentNotFoundException + return null; + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..2246a16 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,26 @@ +spring: + datasource: + url: jdbc:h2:mem:testdb + + h2: + console: + #enabled: false + enabled: true + + jpa: + generate-ddl: false + #generate-ddl: true + + hibernate: + ddl-auto: none + #ddl-auto: create-drop + + # Показываем запросы + show-sql: true + + liquibase: + enabled: true + change-log: classpath:db.changelog/db.changelog-master.xml + +server: + port: 8083 \ No newline at end of file diff --git a/src/main/resources/db.changelog/1.0/2025-10-12--0001-department.xml b/src/main/resources/db.changelog/1.0/2025-10-12--0001-department.xml new file mode 100644 index 0000000..8451c4d --- /dev/null +++ b/src/main/resources/db.changelog/1.0/2025-10-12--0001-department.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/2025-10-12--0001-department-data.xml b/src/main/resources/db.changelog/data/2025-10-12--0001-department-data.xml new file mode 100644 index 0000000..bcbae22 --- /dev/null +++ b/src/main/resources/db.changelog/data/2025-10-12--0001-department-data.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/data/csv/2025-10-12--0001-department-data.csv b/src/main/resources/db.changelog/data/csv/2025-10-12--0001-department-data.csv new file mode 100644 index 0000000..3ca7be3 --- /dev/null +++ b/src/main/resources/db.changelog/data/csv/2025-10-12--0001-department-data.csv @@ -0,0 +1,4 @@ +id;name +1;Департамент по работе с персоналом +2;Департамент информационных технологий +3;Департамент аналитики \ No newline at end of file diff --git a/src/main/resources/db.changelog/db.changelog-master.xml b/src/main/resources/db.changelog/db.changelog-master.xml new file mode 100644 index 0000000..d945125 --- /dev/null +++ b/src/main/resources/db.changelog/db.changelog-master.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file