Skip to content

Commit

Permalink
Merge pull request #1 from s-chepurnov/lazy
Browse files Browse the repository at this point in the history
Обучающая ошибка 1
  • Loading branch information
funnyDevGirl authored Jul 31, 2024
2 parents 476ef92 + 2a0eeae commit ceafa1e
Show file tree
Hide file tree
Showing 34 changed files with 353 additions and 257 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Set up JDK 20
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '20'
java-version: '21'
distribution: 'temurin'
- name: Test with Gradle
uses: gradle/gradle-build-action@v2
Expand Down
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,7 @@ report:
dev:
./gradlew run

local:
./gradlew bootRun --args='--spring.profiles.active=file'

.PHONY: build
16 changes: 11 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ application {
}

java {
sourceCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_21
}

checkstyle {
Expand Down Expand Up @@ -53,10 +53,6 @@ tasks.sentryBundleSourcesJava {
}

dependencies {
compileOnly("org.projectlombok:lombok:1.18.30")
annotationProcessor("org.projectlombok:lombok:1.18.30")
annotationProcessor("org.projectlombok:lombok")

annotationProcessor("org.projectlombok:lombok-mapstruct-binding:0.2.0")
implementation("org.mapstruct:mapstruct:1.5.5.Final")
annotationProcessor("org.mapstruct:mapstruct-processor:1.5.5.Final")
Expand Down Expand Up @@ -85,6 +81,16 @@ dependencies {
implementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0")
testImplementation("org.springdoc:springdoc-openapi-starter-webmvc-api:2.2.0")

//org.springframework.boot:spring-boot-starter-cache:3.1.5
implementation("org.springframework.boot:spring-boot-starter-cache")
implementation("net.sf.ehcache:ehcache:2.10.6")
implementation("org.ehcache:ehcache:3.10.8")
implementation("org.ehcache:ehcache-transactions:3.10.0")
implementation("javax.cache:cache-api:1.1.1")
implementation("org.springframework:spring-context-support:5.3.25")
//implementation("net.sf.ehcache:ehcache-management:2.6.10")
implementation("net.sf.ehcache:ehcache-core:2.6.10")

}

tasks.withType<Test>() {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/hexlet/code/AppApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ public static void main(String[] args) {
public Faker getFaker() {
return new Faker(Locale.US);
}

}
1 change: 0 additions & 1 deletion src/main/java/hexlet/code/component/DataInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ public class DataInitializer implements ApplicationRunner {
private final TaskStatusService taskStatusService;
private final LabelService labelService;


@Override
public void run(ApplicationArguments args) throws Exception {
var admin = new UserCreateDTO();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/hexlet/code/dto/tasks/TaskDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import java.util.HashSet;
import java.util.Set;


@Getter
@Setter
public class TaskDTO {
Expand Down
1 change: 0 additions & 1 deletion src/main/java/hexlet/code/dto/tasks/TaskUpdateDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.openapitools.jackson.nullable.JsonNullable;
import java.util.Set;


@Getter
@Setter
public class TaskUpdateDTO {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.Getter;
import lombok.Setter;


@Getter
@Setter
public class TaskStatusDTO {
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/hexlet/code/dto/users/UserUpdateDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import lombok.Setter;
import org.openapitools.jackson.nullable.JsonNullable;

@Getter
@Setter
public class UserUpdateDTO {

@Email
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/hexlet/code/handler/GlobalExceptionHandler.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package hexlet.code.handler;

import jakarta.validation.ConstraintViolationException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
Expand All @@ -27,4 +28,9 @@ public ResponseEntity<String> handleOtherExceptions(Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Internal Server Error: " + ex.getMessage());
}

@ExceptionHandler(DataIntegrityViolationException.class)
public ResponseEntity<String> handleDataIntegrityViolationException(DataIntegrityViolationException ex) {
return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
}
}
1 change: 0 additions & 1 deletion src/main/java/hexlet/code/mapper/LabelMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.mapstruct.ReportingPolicy;
import org.mapstruct.MappingTarget;


@Mapper(
uses = {JsonNullableMapper.class, ReferenceMapper.class},
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/hexlet/code/mapper/TaskMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import hexlet.code.model.Label;
import hexlet.code.model.Task;
import hexlet.code.model.TaskStatus;
import hexlet.code.model.User;
import hexlet.code.repository.UserRepository;
import hexlet.code.repository.LabelRepository;
import hexlet.code.repository.TaskStatusRepository;
import org.mapstruct.Mapper;
Expand All @@ -22,7 +24,6 @@
import java.util.Set;
import java.util.stream.Collectors;


@Mapper(
uses = {JsonNullableMapper.class, ReferenceMapper.class},
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
Expand All @@ -37,10 +38,13 @@ public abstract class TaskMapper {
@Autowired
private LabelRepository labelRepository;

@Autowired
private UserRepository userRepository;

@Mapping(source = "title", target = "name")
@Mapping(source = "content", target = "description")
@Mapping(source = "status", target = "taskStatus", qualifiedByName = "slugToTaskStatus")
@Mapping(source = "assigneeId", target = "assignee")
@Mapping(source = "assigneeId", target = "assignee", qualifiedByName = "idToAssignee")
@Mapping(source = "taskLabelIds", target = "labels", qualifiedByName = "labelIdsToLabels")
public abstract Task map(TaskCreateDTO taskCreateDTO);

Expand All @@ -55,15 +59,21 @@ public abstract class TaskMapper {

@Mapping(source = "title", target = "name")
@Mapping(source = "content", target = "description")
@Mapping(source = "assigneeId", target = "assignee")
@Mapping(source = "assigneeId", target = "assignee", qualifiedByName = "idToAssignee")
@Mapping(source = "status", target = "taskStatus", qualifiedByName = "slugToTaskStatus")
@Mapping(source = "taskLabelIds", target = "labels", qualifiedByName = "labelIdsToLabels")
public abstract void update(TaskUpdateDTO taskUpdateDTO, @MappingTarget Task task);


@Named("idToAssignee")
public User idToAssignee(Long assigneeId) {
return userRepository.findById(assigneeId).orElseThrow(
() -> new ResourceNotFoundException("User with id " + assigneeId + " not found"));
}

@Named("slugToTaskStatus")
public TaskStatus slugToTaskStatus(String slug) {
return taskStatusRepository.findBySlug(slug).orElseThrow(
return taskStatusRepository.findBySlugWithEagerUpload(slug).orElseThrow(
() -> new ResourceNotFoundException("TaskStatus with slug " + slug + " not found"));
}

Expand Down
11 changes: 3 additions & 8 deletions src/main/java/hexlet/code/model/Label.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import jakarta.persistence.ManyToMany;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.EqualsAndHashCode;
Expand Down Expand Up @@ -42,21 +41,17 @@ public class Label implements BaseEntity {
@CreatedDate
private LocalDate createdAt;

// @ManyToMany
// @JoinTable(name="label_task",
// joinColumns = @JoinColumn(name="label_id", referencedColumnName="id"),
// inverseJoinColumns = @JoinColumn(name="task_id", referencedColumnName="id") )
@ManyToMany(mappedBy = "labels", fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@ManyToMany(mappedBy = "labels", cascade = CascadeType.MERGE)
private Set<Task> tasks = new HashSet<>();


public void addTask(Task task) {
tasks.add(task);
this.getTasks().add(task);
task.getLabels().add(this);
}

public void removeTask(Task task) {
tasks.remove(task);
this.getTasks().remove(task);
task.getLabels().remove(this);
}
}
27 changes: 4 additions & 23 deletions src/main/java/hexlet/code/model/Task.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package hexlet.code.model;

import jakarta.persistence.CascadeType;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.Entity;
Expand All @@ -9,14 +8,14 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.JoinColumn;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;
Expand Down Expand Up @@ -47,30 +46,12 @@ public class Task implements BaseEntity {
@CreatedDate
private LocalDate createdAt;

@JoinColumn(name = "status_id", nullable = false)
@ManyToOne(fetch = FetchType.EAGER)
@ManyToOne(fetch = FetchType.LAZY)
private TaskStatus taskStatus;

@JoinColumn(name = "assignee_id")
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)//у меня
@ManyToOne(fetch = FetchType.LAZY)
private User assignee;


// @ManyToMany
// @JoinTable(name="label_task",
// joinColumns = @JoinColumn(name="task_id", referencedColumnName="id"),
// inverseJoinColumns = @JoinColumn(name="label_id", referencedColumnName="id") )
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@ManyToMany
private Set<Label> labels = new HashSet<>();


// public void addLabel(Label label) {
// labels.add(label);
// label.getTasks().add(this);
// }
//
// public void removeLabel(Label label) {
// labels.remove(label);
// label.getTasks().remove(this);
// }
}
15 changes: 8 additions & 7 deletions src/main/java/hexlet/code/model/TaskStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static jakarta.persistence.GenerationType.IDENTITY;
import jakarta.persistence.CascadeType;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
Expand All @@ -12,20 +11,22 @@
import jakarta.persistence.OneToMany;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;


@Entity
@Table(name = "statuses")
@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
@EqualsAndHashCode(of = {"name", "slug"})
public class TaskStatus implements BaseEntity {

@Id
Expand All @@ -45,17 +46,17 @@ public class TaskStatus implements BaseEntity {
@CreatedDate
private LocalDate createdAt;

@OneToMany(mappedBy = "taskStatus", cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
private List<Task> tasks = new ArrayList<>();
@OneToMany(mappedBy = "taskStatus", cascade = CascadeType.MERGE)
private Set<Task> tasks = new HashSet<>();


public void addTask(Task task) {
tasks.add(task);
this.getTasks().add(task);
task.setTaskStatus(this);
}

public void removeTask(Task task) {
tasks.remove(task);
this.getTasks().remove(task);
task.setTaskStatus(null);
}
}
14 changes: 8 additions & 6 deletions src/main/java/hexlet/code/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.CascadeType;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
Expand All @@ -13,6 +12,7 @@
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
Expand All @@ -25,7 +25,8 @@
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.HashSet;
import java.util.Set;


@Entity
Expand All @@ -34,6 +35,7 @@
@ToString(includeFieldNames = true, onlyExplicitlyIncluded = true)
@Getter
@Setter
@EqualsAndHashCode(of = "email")
public class User implements UserDetails, BaseEntity {

@Id
Expand Down Expand Up @@ -66,17 +68,17 @@ public class User implements UserDetails, BaseEntity {
@Column(name = "updated_at")
private LocalDate updatedAt;

@OneToMany(mappedBy = "assignee", fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
private List<Task> tasks = new ArrayList<>();
@OneToMany(mappedBy = "assignee", cascade = CascadeType.MERGE)
private Set<Task> tasks = new HashSet<>();


public void addTask(Task task) {
tasks.add(task);
this.getTasks().add(task);
task.setAssignee(this);
}

public void removeTask(Task task) {
tasks.remove(task);
this.getTasks().remove(task);
task.setAssignee(null);
}

Expand Down
Loading

0 comments on commit ceafa1e

Please sign in to comment.