findByStatus(Task.Status status) {
- return taskRepository.findAll().stream()
- .filter(task -> task.getStatus() == status)
- .toList();
+ return taskRepository.findByStatus(status.name());
}
}
\ No newline at end of file
diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserService.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserService.java
new file mode 100644
index 0000000..41a49e0
--- /dev/null
+++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserService.java
@@ -0,0 +1,6 @@
+package ru.andrmuratov.NauJava.service;
+
+public interface UserService {
+ void createUserWithTask(String name, String email, String role, String taskTitle);
+ void deleteUserWithTasks(Long userId);
+}
\ No newline at end of file
diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserServiceImpl.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserServiceImpl.java
new file mode 100644
index 0000000..7da364b
--- /dev/null
+++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserServiceImpl.java
@@ -0,0 +1,53 @@
+package ru.andrmuratov.NauJava.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import ru.andrmuratov.NauJava.entity.Task;
+import ru.andrmuratov.NauJava.entity.User;
+import ru.andrmuratov.NauJava.repository.TaskRepository;
+import ru.andrmuratov.NauJava.repository.UserRepository;
+
+import java.time.LocalDateTime;
+
+@Service
+public class UserServiceImpl implements UserService {
+
+ private final UserRepository userRepository;
+ private final TaskRepository taskRepository;
+ private final PasswordEncoder passwordEncoder;
+
+ @Autowired
+ public UserServiceImpl(UserRepository userRepository,
+ TaskRepository taskRepository,
+ PasswordEncoder passwordEncoder) {
+ this.userRepository = userRepository;
+ this.taskRepository = taskRepository;
+ this.passwordEncoder = passwordEncoder;
+ }
+
+ @Override
+ @Transactional
+ public void createUserWithTask(String username, String email, String role, String taskTitle) {
+ User user = new User();
+ user.setUsername(username);
+ user.setEmail(email);
+ user.setRole(role);
+ user.setPassword(passwordEncoder.encode("defaultPassword"));
+ userRepository.save(user);
+
+ Task task = new Task();
+ task.setTitle(taskTitle);
+ task.setStatus("TODO");
+ task.setDeadline(LocalDateTime.now().plusDays(7));
+ task.setUser(user);
+ taskRepository.save(task);
+ }
+
+ @Override
+ @Transactional
+ public void deleteUserWithTasks(Long userId) {
+ userRepository.deleteById(userId);
+ }
+}
\ No newline at end of file
diff --git a/NauJava/src/main/resources/application.properties b/NauJava/src/main/resources/application.properties
index 8eb9f8b..b9c2b85 100644
--- a/NauJava/src/main/resources/application.properties
+++ b/NauJava/src/main/resources/application.properties
@@ -1,3 +1,14 @@
app.name=TaskFlow
-app.version=1.0.0
+app.version=2.0.0
+
+spring.datasource.url=jdbc:postgresql://localhost:5432/taskflow
+spring.datasource.username=postgres
+spring.datasource.password=naumen
+spring.datasource.driver-class-name=org.postgresql.Driver
+
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.properties.hibernate.format_sql=true
+
management.endpoints.web.exposure.include=*
\ No newline at end of file
diff --git a/NauJava/src/main/resources/templates/login.html b/NauJava/src/main/resources/templates/login.html
new file mode 100644
index 0000000..47baec9
--- /dev/null
+++ b/NauJava/src/main/resources/templates/login.html
@@ -0,0 +1,34 @@
+
+
+
+
+ Login
+
+
+
+Login
+Invalid username or password
+You have been logged out
+
+Don't have an account? Register
+
+
\ No newline at end of file
diff --git a/NauJava/src/main/resources/templates/registration.html b/NauJava/src/main/resources/templates/registration.html
new file mode 100644
index 0000000..a84ad35
--- /dev/null
+++ b/NauJava/src/main/resources/templates/registration.html
@@ -0,0 +1,43 @@
+
+
+
+
+ Registration
+
+
+
+Registration
+
+
+Already have an account? Login
+
+
\ No newline at end of file
diff --git a/NauJava/src/main/resources/templates/user-list.html b/NauJava/src/main/resources/templates/user-list.html
new file mode 100644
index 0000000..a6c4590
--- /dev/null
+++ b/NauJava/src/main/resources/templates/user-list.html
@@ -0,0 +1,40 @@
+
+
+
+
+ User List
+
+
+
+User List
+
+
+
+
+
+
+
+ | ID |
+ Name |
+ Email |
+ Role |
+
+
+ |
+ |
+ |
+ |
+
+
+
+Swagger UI |
+Actuator
+
+
\ No newline at end of file
diff --git a/NauJava/src/test/java/ru/andrmuratov/NauJava/UserRepositoryTest.java b/NauJava/src/test/java/ru/andrmuratov/NauJava/UserRepositoryTest.java
new file mode 100644
index 0000000..9980a16
--- /dev/null
+++ b/NauJava/src/test/java/ru/andrmuratov/NauJava/UserRepositoryTest.java
@@ -0,0 +1,46 @@
+package ru.andrmuratov.NauJava;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import ru.andrmuratov.NauJava.entity.User;
+import ru.andrmuratov.NauJava.repository.UserRepository;
+
+import java.util.List;
+import java.util.UUID;
+
+@SpringBootTest
+class UserRepositoryTest {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Test
+ void testFindByName() {
+ String name = UUID.randomUUID().toString();
+ User user = new User();
+ user.setName(name);
+ user.setEmail(name + "@test.com");
+ user.setRole("USER");
+ userRepository.save(user);
+
+ List found = userRepository.findByName(name);
+ Assertions.assertFalse(found.isEmpty());
+ Assertions.assertEquals(name, found.get(0).getName());
+ }
+
+ @Test
+ void testCriteriaAPI() {
+ String name = UUID.randomUUID().toString();
+ User user = new User();
+ user.setName(name);
+ user.setEmail(name + "@test.com");
+ user.setRole("ADMIN");
+ userRepository.save(user);
+
+ List found = userRepository.findByNameCriteria(name);
+ Assertions.assertFalse(found.isEmpty());
+ Assertions.assertEquals(name, found.get(0).getName());
+ }
+}
\ No newline at end of file
diff --git a/NauJava/src/test/java/ru/andrmuratov/NauJava/UserServiceTest.java b/NauJava/src/test/java/ru/andrmuratov/NauJava/UserServiceTest.java
new file mode 100644
index 0000000..8f766db
--- /dev/null
+++ b/NauJava/src/test/java/ru/andrmuratov/NauJava/UserServiceTest.java
@@ -0,0 +1,35 @@
+package ru.andrmuratov.NauJava;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import ru.andrmuratov.NauJava.entity.User;
+import ru.andrmuratov.NauJava.repository.UserRepository;
+import ru.andrmuratov.NauJava.service.UserService;
+
+import java.util.UUID;
+
+@SpringBootTest
+class UserServiceTest {
+
+ @Autowired
+ private UserService userService;
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Test
+ void testCreateUserWithTask() {
+ String name = UUID.randomUUID().toString();
+ String email = name + "@test.com";
+ userService.createUserWithTask(name, email, "USER", "Test Task");
+
+ User found = userRepository.findByRoleJPQL("USER").stream()
+ .filter(u -> u.getEmail().equals(email))
+ .findFirst()
+ .orElse(null);
+ Assertions.assertNotNull(found);
+ Assertions.assertEquals(name, found.getName());
+ }
+}
\ No newline at end of file