diff --git a/NauJava/pom.xml b/NauJava/pom.xml index 26e9ab9..5e6e9d6 100644 --- a/NauJava/pom.xml +++ b/NauJava/pom.xml @@ -1,12 +1,12 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot spring-boot-starter-parent 4.0.3 - + ru.andrmuratov NauJava @@ -37,7 +37,18 @@ org.springframework.boot - spring-boot-starter-actuator-test + spring-boot-starter-data-jpa + + + + org.postgresql + postgresql + runtime + + + + org.springframework.boot + spring-boot-starter-test test @@ -51,4 +62,4 @@ - + \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/config/Config.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/config/Config.java index cf505fd..14b469a 100644 --- a/NauJava/src/main/java/ru/andrmuratov/NauJava/config/Config.java +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/config/Config.java @@ -4,7 +4,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; -import org.springframework.boot.CommandLineRunner; +//import org.springframework.boot.CommandLineRunner; import org.springframework.beans.factory.annotation.Value; import jakarta.annotation.PostConstruct; import ru.andrmuratov.NauJava.entity.Task; @@ -33,8 +33,8 @@ public List taskContainer() { return new ArrayList<>(); } - @Bean - public CommandLineRunner run(CommandProcessor processor) { - return args -> processor.start(); - } +// @Bean +// public CommandLineRunner run(CommandProcessor processor) { +// return args -> processor.start(); +// } } \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/CrudRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/CrudRepository.java deleted file mode 100644 index 2fbaf77..0000000 --- a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/CrudRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.andrmuratov.NauJava.dao; - -public interface CrudRepository { - void create(T entity); - T read(ID id); - void update(T entity); - void delete(ID id); -} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/TaskRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/TaskRepository.java deleted file mode 100644 index 379cec9..0000000 --- a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/TaskRepository.java +++ /dev/null @@ -1,53 +0,0 @@ -package ru.andrmuratov.NauJava.dao; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.andrmuratov.NauJava.entity.Task; - -import java.util.List; - -@Component -public class TaskRepository implements CrudRepository { - - private final List taskContainer; - - @Autowired - public TaskRepository(List taskContainer) { - this.taskContainer = taskContainer; - } - - @Override - public void create(Task task) { - taskContainer.add(task); - } - - @Override - public Task read(Long id) { - for (Task task : taskContainer) { - if (task.getId().equals(id)) { - return task; - } - } - return null; - } - - @Override - public void update(Task task) { - for (int i = 0; i < taskContainer.size(); i++) { - if (taskContainer.get(i).getId().equals(task.getId())) { - taskContainer.set(i, task); - return; - } - } - } - - @Override - public void delete(Long id) { - taskContainer.removeIf(task -> task.getId().equals(id)); - } - - // Дополнительный метод для получения всех задач - public List findAll() { - return taskContainer; - } -} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryCustom.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryCustom.java new file mode 100644 index 0000000..bac4a79 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryCustom.java @@ -0,0 +1,9 @@ +package ru.andrmuratov.NauJava.dao; + +import ru.andrmuratov.NauJava.entity.User; +import java.util.List; + +public interface UserRepositoryCustom { + List findByNameCriteria(String name); + List findByRoleCriteria(String role); +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryImpl.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryImpl.java new file mode 100644 index 0000000..ff7e2b7 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/dao/UserRepositoryImpl.java @@ -0,0 +1,43 @@ +package ru.andrmuratov.NauJava.dao; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import ru.andrmuratov.NauJava.entity.User; + +import java.util.List; + +@Repository +public class UserRepositoryImpl implements UserRepositoryCustom { + + private final EntityManager entityManager; + + @Autowired + public UserRepositoryImpl(EntityManager entityManager) { + this.entityManager = entityManager; + } + + @Override + public List findByNameCriteria(String name) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(User.class); + Root root = cq.from(User.class); + Predicate predicate = cb.equal(root.get("name"), name); + cq.select(root).where(predicate); + return entityManager.createQuery(cq).getResultList(); + } + + @Override + public List findByRoleCriteria(String role) { + CriteriaBuilder cb = entityManager.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(User.class); + Root root = cq.from(User.class); + Predicate predicate = cb.equal(root.get("role"), role); + cq.select(root).where(predicate); + return entityManager.createQuery(cq).getResultList(); + } +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Category.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Category.java new file mode 100644 index 0000000..f3e8e95 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Category.java @@ -0,0 +1,30 @@ +package ru.andrmuratov.NauJava.entity; + +import jakarta.persistence.*; +import java.util.List; + +@Entity +@Table(name = "categories") +public class Category { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true) + private String name; + + private String description; + + @OneToMany(mappedBy = "category") + private List tasks; + + public Category() {} + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getDescription() { return description; } + public void setDescription(String description) { this.description = description; } + public List getTasks() { return tasks; } + public void setTasks(List tasks) { this.tasks = tasks; } +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Comment.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Comment.java new file mode 100644 index 0000000..092070c --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Comment.java @@ -0,0 +1,31 @@ +package ru.andrmuratov.NauJava.entity; + +import jakarta.persistence.*; +import java.time.LocalDateTime; + +@Entity +@Table(name = "comments") +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, length = 1000) + private String text; + + private LocalDateTime createdAt; + + @ManyToOne + @JoinColumn(name = "task_id", nullable = false) + private Task task; + + public Comment() {} + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getText() { return text; } + public void setText(String text) { this.text = text; } + public LocalDateTime getCreatedAt() { return createdAt; } + public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; } + public Task getTask() { return task; } + public void setTask(Task task) { this.task = task; } +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Tag.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Tag.java new file mode 100644 index 0000000..0292a28 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Tag.java @@ -0,0 +1,26 @@ +package ru.andrmuratov.NauJava.entity; + +import jakarta.persistence.*; +import java.util.Set; + +@Entity +@Table(name = "tags") +public class Tag { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true) + private String name; + + @ManyToMany(mappedBy = "tags") + private Set tasks; + + public Tag() {} + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public Set getTasks() { return tasks; } + public void setTasks(Set tasks) { this.tasks = tasks; } +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Task.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Task.java index de62452..abc3fb5 100644 --- a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Task.java +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/Task.java @@ -1,66 +1,77 @@ package ru.andrmuratov.NauJava.entity; +import jakarta.persistence.*; import java.time.LocalDateTime; +import java.util.List; +import java.util.Set; +@Entity +@Table(name = "tasks") public class Task { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + + @Column(nullable = false) private String title; + private String description; - private Priority priority; - private Status status; + + @Column(nullable = false) + private String status; + + private String priority; + private LocalDateTime deadline; + @ManyToOne + @JoinColumn(name = "user_id", nullable = false) + private User user; - public Task() {} + @ManyToOne + @JoinColumn(name = "category_id") + private Category category; + @OneToMany(mappedBy = "task", cascade = CascadeType.ALL, orphanRemoval = true) + private List comments; - public Task(Long id, String title, String description, Priority priority, Status status, LocalDateTime deadline) { - this.id = id; - this.title = title; - this.description = description; - this.priority = priority; - this.status = status; - this.deadline = deadline; - } + @ManyToMany + @JoinTable( + name = "task_tag", + joinColumns = @JoinColumn(name = "task_id"), + inverseJoinColumns = @JoinColumn(name = "tag_id") + ) + private Set tags; + + public Task() {} public Long getId() { return id; } public void setId(Long id) { this.id = id; } - public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } - public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } - - public Priority getPriority() { return priority; } - public void setPriority(Priority priority) { this.priority = priority; } - - public Status getStatus() { return status; } - public void setStatus(Status status) { this.status = status; } - + public String getStatus() { return status; } + public void setStatus(String status) { this.status = status; } + public String getPriority() { return priority; } + public void setPriority(String priority) { this.priority = priority; } public LocalDateTime getDeadline() { return deadline; } public void setDeadline(LocalDateTime deadline) { this.deadline = deadline; } - + public User getUser() { return user; } + public void setUser(User user) { this.user = user; } + public Category getCategory() { return category; } + public void setCategory(Category category) { this.category = category; } + public List getComments() { return comments; } + public void setComments(List comments) { this.comments = comments; } + public Set getTags() { return tags; } + public void setTags(Set tags) { this.tags = tags; } public enum Priority { LOW, MEDIUM, HIGH } - public enum Status { TODO, IN_PROGRESS, DONE } - - - @Override - public String toString() { - return "Task{" + - "id=" + id + - ", title='" + title + '\'' + - ", priority=" + priority + - ", status=" + status + - ", deadline=" + deadline + - '}'; - } } \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/User.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/User.java new file mode 100644 index 0000000..27ee2d9 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/entity/User.java @@ -0,0 +1,37 @@ +package ru.andrmuratov.NauJava.entity; + +import jakarta.persistence.*; +import java.util.List; + +@Entity +@Table(name = "users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String name; + + @Column(unique = true, nullable = false) + private String email; + + @Column(nullable = false) + private String role; + + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) + private List tasks; + + + public User() {} + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getEmail() { return email; } + public void setEmail(String email) { this.email = email; } + public String getRole() { return role; } + public void setRole(String role) { this.role = role; } + public List getTasks() { return tasks; } + public void setTasks(List tasks) { this.tasks = tasks; } +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CategoryRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CategoryRepository.java new file mode 100644 index 0000000..bbc866b --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CategoryRepository.java @@ -0,0 +1,7 @@ +package ru.andrmuratov.NauJava.repository; + +import org.springframework.data.repository.CrudRepository; +import ru.andrmuratov.NauJava.entity.Category; + +public interface CategoryRepository extends CrudRepository { +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CommentRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CommentRepository.java new file mode 100644 index 0000000..220888f --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/CommentRepository.java @@ -0,0 +1,7 @@ +package ru.andrmuratov.NauJava.repository; + +import org.springframework.data.repository.CrudRepository; +import ru.andrmuratov.NauJava.entity.Comment; + +public interface CommentRepository extends CrudRepository { +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TagRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TagRepository.java new file mode 100644 index 0000000..2678372 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TagRepository.java @@ -0,0 +1,7 @@ +package ru.andrmuratov.NauJava.repository; + +import org.springframework.data.repository.CrudRepository; +import ru.andrmuratov.NauJava.entity.Tag; + +public interface TagRepository extends CrudRepository { +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TaskRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TaskRepository.java new file mode 100644 index 0000000..fc93244 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/TaskRepository.java @@ -0,0 +1,14 @@ +package ru.andrmuratov.NauJava.repository; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ru.andrmuratov.NauJava.entity.Task; +import java.util.List; + +public interface TaskRepository extends CrudRepository { + List findByStatus(String status); + List findByUserId(Long userId); + + @Query("SELECT t FROM Task t WHERE t.user.email = :email") + List findByUserEmailJPQL(String email); +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/UserRepository.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/UserRepository.java new file mode 100644 index 0000000..ec6ff16 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/repository/UserRepository.java @@ -0,0 +1,15 @@ +package ru.andrmuratov.NauJava.repository; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import ru.andrmuratov.NauJava.dao.UserRepositoryCustom; +import ru.andrmuratov.NauJava.entity.User; +import java.util.List; + +public interface UserRepository extends CrudRepository, UserRepositoryCustom { + List findByName(String name); + List findByRoleAndEmailContaining(String role, String emailDomain); + + @Query("SELECT u FROM User u WHERE u.role = :role") + List findByRoleJPQL(String role); +} \ No newline at end of file diff --git a/NauJava/src/main/java/ru/andrmuratov/NauJava/service/TaskServiceImpl.java b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/TaskServiceImpl.java index 72450cc..ea56f28 100644 --- a/NauJava/src/main/java/ru/andrmuratov/NauJava/service/TaskServiceImpl.java +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/TaskServiceImpl.java @@ -2,18 +2,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ru.andrmuratov.NauJava.dao.TaskRepository; +import ru.andrmuratov.NauJava.repository.TaskRepository; import ru.andrmuratov.NauJava.entity.Task; import java.time.LocalDateTime; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.StreamSupport; @Service public class TaskServiceImpl implements TaskService { private final TaskRepository taskRepository; - private final AtomicLong idGenerator = new AtomicLong(1); @Autowired public TaskServiceImpl(TaskRepository taskRepository) { @@ -23,46 +22,44 @@ public TaskServiceImpl(TaskRepository taskRepository) { @Override public void createTask(String title, String description, Task.Priority priority, Task.Status status) { Task task = new Task(); - task.setId(idGenerator.getAndIncrement()); task.setTitle(title); task.setDescription(description); - task.setPriority(priority); - task.setStatus(status); + task.setPriority(priority.name()); + task.setStatus(status.name()); task.setDeadline(LocalDateTime.now().plusDays(7)); - taskRepository.create(task); + taskRepository.save(task); } @Override public Task findById(Long id) { - return taskRepository.read(id); + return taskRepository.findById(id).orElse(null); } @Override public void deleteById(Long id) { - taskRepository.delete(id); + taskRepository.deleteById(id); } @Override public void updateTask(Long id, String title, String description, Task.Priority priority, Task.Status status) { - Task task = taskRepository.read(id); + Task task = taskRepository.findById(id).orElse(null); if (task != null) { task.setTitle(title); task.setDescription(description); - task.setPriority(priority); - task.setStatus(status); - taskRepository.update(task); + task.setPriority(priority.name()); + task.setStatus(status.name()); + taskRepository.save(task); } } @Override public List findAll() { - return taskRepository.findAll(); + return StreamSupport.stream(taskRepository.findAll().spliterator(), false) + .toList(); } @Override public List 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..6142745 --- /dev/null +++ b/NauJava/src/main/java/ru/andrmuratov/NauJava/service/UserServiceImpl.java @@ -0,0 +1,47 @@ +package ru.andrmuratov.NauJava.service; + +import org.springframework.beans.factory.annotation.Autowired; +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; + + @Autowired + public UserServiceImpl(UserRepository userRepository, TaskRepository taskRepository) { + this.userRepository = userRepository; + this.taskRepository = taskRepository; + } + + @Override + @Transactional + public void createUserWithTask(String name, String email, String role, String taskTitle) { + User user = new User(); + user.setName(name); + user.setEmail(email); + user.setRole(role); + 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/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