From 71358a25dd2a53caaed1d8f6187499d459b71cad Mon Sep 17 00:00:00 2001 From: Viktoria Date: Tue, 30 Aug 2022 10:36:34 +0200 Subject: [PATCH 1/2] ViSnezh --- .../easystartup/web/project/controller/ProjectController.java | 4 ++-- .../site/easystartup/web/project/service/ProjectService.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/site/easystartup/web/project/controller/ProjectController.java b/src/main/java/site/easystartup/web/project/controller/ProjectController.java index a8998e2..4ebf411 100644 --- a/src/main/java/site/easystartup/web/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/web/project/controller/ProjectController.java @@ -140,12 +140,12 @@ public class ProjectController { } @PostMapping("/{projectId}/{nameOfPosition}/applay") - public ModelAndView applayOnProject(@PathVariable("projectId") Long projectId, + public ModelAndView applyOnProject(@PathVariable("projectId") Long projectId, @PathVariable("nameOfPosition") String nameOfPosition, Principal principal) { ModelAndView modelAndView = new ModelAndView(); - modelAndView.addObject("message", projectService.applayOnProject(projectId, nameOfPosition, principal)); + modelAndView.addObject("message", projectService.applyOnProject(projectId, nameOfPosition, principal)); modelAndView.addObject("project", modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class)); modelAndView.setViewName("project"); diff --git a/src/main/java/site/easystartup/web/project/service/ProjectService.java b/src/main/java/site/easystartup/web/project/service/ProjectService.java index 5c4efe3..369a3ec 100644 --- a/src/main/java/site/easystartup/web/project/service/ProjectService.java +++ b/src/main/java/site/easystartup/web/project/service/ProjectService.java @@ -77,7 +77,7 @@ public class ProjectService { return participantRepo.findAllByNameOfPosition(nameOfPosition.trim()); } - public Project applayOnProject(Long projectId, String nameOfPosition, Principal principal) { + public Project applyOnProject(Long projectId, String nameOfPosition, Principal principal) { Project project = getProjectById(projectId); project.getParticipants().stream().forEach(participant -> { if (participant.getNameOfPosition().equals(nameOfPosition)) From 44c7887c8fccb00548eb15fc35200da343242a76 Mon Sep 17 00:00:00 2001 From: Viktoria Date: Tue, 30 Aug 2022 11:20:13 +0200 Subject: [PATCH 2/2] ViSnezh --- .../project/controller/ProjectController.java | 2 +- .../web/project/domain/model/Participant.java | 4 --- .../web/project/domain/model/Project.java | 10 ++++-- .../web/project/domain/model/Tag.java | 22 ++++++++++++ .../domain/payload/requst/ProjectRequest.java | 6 ++-- .../easystartup/web/project/repo/TagRepo.java | 13 +++++++ .../web/project/service/ProjectService.java | 12 +++---- .../web/project/service/TagService.java | 34 +++++++++++++++++++ 8 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 src/main/java/site/easystartup/web/project/domain/model/Tag.java create mode 100644 src/main/java/site/easystartup/web/project/repo/TagRepo.java create mode 100644 src/main/java/site/easystartup/web/project/service/TagService.java diff --git a/src/main/java/site/easystartup/web/project/controller/ProjectController.java b/src/main/java/site/easystartup/web/project/controller/ProjectController.java index 4ebf411..53c8c9e 100644 --- a/src/main/java/site/easystartup/web/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/web/project/controller/ProjectController.java @@ -139,7 +139,7 @@ public class ProjectController { return modelAndView; } - @PostMapping("/{projectId}/{nameOfPosition}/applay") + @PostMapping("/{projectId}/{nameOfPosition}/apply") public ModelAndView applyOnProject(@PathVariable("projectId") Long projectId, @PathVariable("nameOfPosition") String nameOfPosition, Principal principal) { diff --git a/src/main/java/site/easystartup/web/project/domain/model/Participant.java b/src/main/java/site/easystartup/web/project/domain/model/Participant.java index 221af93..d1ae890 100644 --- a/src/main/java/site/easystartup/web/project/domain/model/Participant.java +++ b/src/main/java/site/easystartup/web/project/domain/model/Participant.java @@ -21,10 +21,6 @@ public class Participant { @JoinColumn(name = "project_id", updatable = false) private Project project; - @Column(name = "technology") - @NotNull - private String technology; - @Column(name = "name_of_position") private String nameOfPosition; @ManyToOne diff --git a/src/main/java/site/easystartup/web/project/domain/model/Project.java b/src/main/java/site/easystartup/web/project/domain/model/Project.java index e9bc34a..6e3a314 100644 --- a/src/main/java/site/easystartup/web/project/domain/model/Project.java +++ b/src/main/java/site/easystartup/web/project/domain/model/Project.java @@ -9,6 +9,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; @Data @Entity @@ -35,9 +36,12 @@ public class Project { @Column(name = "commercial_status") // 1 - commercial, 0 - non-commercial private int commercialStatus; - @Column(name = "technology") - @NotNull - private String technology; + @ManyToMany + @JoinTable( + joinColumns = @JoinColumn(name = "project_id"), + inverseJoinColumns = @JoinColumn(name = "tag_id") + ) + private List technology; @ManyToOne @JoinColumn(name = "owner_id", updatable = false) diff --git a/src/main/java/site/easystartup/web/project/domain/model/Tag.java b/src/main/java/site/easystartup/web/project/domain/model/Tag.java new file mode 100644 index 0000000..45cc3b9 --- /dev/null +++ b/src/main/java/site/easystartup/web/project/domain/model/Tag.java @@ -0,0 +1,22 @@ +package site.easystartup.web.project.domain.model; + +import lombok.Data; + +import javax.persistence.*; +import java.util.Set; + +@Data +@Entity +@Table(name = "tag") +public class Tag { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "tag_id") + private Long tagId; + + @Column(name = "tage_name") + private String tagName; + + @ManyToMany(mappedBy = "technology") + private Set projects; +} diff --git a/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java b/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java index be4ee9e..cf01441 100644 --- a/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java +++ b/src/main/java/site/easystartup/web/project/domain/payload/requst/ProjectRequest.java @@ -1,11 +1,13 @@ package site.easystartup.web.project.domain.payload.requst; + import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.multipart.MultipartFile; +import site.easystartup.web.project.domain.model.Tag; import site.easystartup.web.project.dto.ParticipantDto; + import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.time.LocalDateTime; import java.util.List; @Data @@ -22,6 +24,6 @@ public class ProjectRequest { private String description; private int commercialStatus; @NotNull - private String technology; + private List technology; private List participants; } diff --git a/src/main/java/site/easystartup/web/project/repo/TagRepo.java b/src/main/java/site/easystartup/web/project/repo/TagRepo.java new file mode 100644 index 0000000..9aa29aa --- /dev/null +++ b/src/main/java/site/easystartup/web/project/repo/TagRepo.java @@ -0,0 +1,13 @@ +package site.easystartup.web.project.repo; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import site.easystartup.web.project.domain.model.Tag; + +import java.util.Optional; + +@Repository +public interface TagRepo extends JpaRepository { + + Optional findTagByTagNameIgnoreCase(String tagName); +} diff --git a/src/main/java/site/easystartup/web/project/service/ProjectService.java b/src/main/java/site/easystartup/web/project/service/ProjectService.java index 369a3ec..6c999f6 100644 --- a/src/main/java/site/easystartup/web/project/service/ProjectService.java +++ b/src/main/java/site/easystartup/web/project/service/ProjectService.java @@ -7,6 +7,7 @@ import site.easystartup.web.domain.User; import site.easystartup.web.project.domain.exeption.ProjectNotFoundException; import site.easystartup.web.project.domain.model.Participant; import site.easystartup.web.project.domain.model.Project; +import site.easystartup.web.project.domain.model.Tag; import site.easystartup.web.project.domain.payload.requst.ProjectRequest; import site.easystartup.web.project.repo.ParticipantRepo; import site.easystartup.web.project.repo.ProjectRepo; @@ -14,6 +15,7 @@ import site.easystartup.web.service.UserService; import site.easystartup.web.storage.service.StorageService; import java.security.Principal; +import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; @@ -27,6 +29,7 @@ public class ProjectService { private final ModelMapper modelMapper; private final StorageService storageService; private final ParticipantRepo participantRepo; + private final TagService tagService; public Project createProject(ProjectRequest projectRequest, Principal principal) { @@ -108,13 +111,6 @@ public class ProjectService { return projectRepo.save(project); } - - private String formatTechnology(String technology) { - StringBuilder result = new StringBuilder(); - Arrays.stream(technology.split(",")).forEach(tech -> result.append(tech.trim()).append(" ")); - return result.toString(); - } - private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) { Project project = new Project(); @@ -122,7 +118,7 @@ public class ProjectService { .stream().map(part -> modelMapper.map(part, Participant.class)).collect(Collectors.toList())); project.setTitle(projectRequest.getTitle()); project.setDescription(projectRequest.getDescription()); - project.setTechnology(formatTechnology(projectRequest.getTechnology())); + project.setTechnology(tagService.convertTechnology(projectRequest.getTechnology())); project.setCommercialStatus(project.getCommercialStatus()); project.setCoverLink(projectRequest.getCover().getName()); project.setOwner(userService.getUserByPrincipal(principal)); diff --git a/src/main/java/site/easystartup/web/project/service/TagService.java b/src/main/java/site/easystartup/web/project/service/TagService.java new file mode 100644 index 0000000..c1d5051 --- /dev/null +++ b/src/main/java/site/easystartup/web/project/service/TagService.java @@ -0,0 +1,34 @@ +package site.easystartup.web.project.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import site.easystartup.web.project.domain.model.Tag; +import site.easystartup.web.project.repo.TagRepo; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class TagService { + private final TagRepo tagRepo; + + public List getAllTags() { + return tagRepo.findAll(); + } + public List convertTechnology(List technology) { + List tags = new ArrayList<>(); + technology.forEach(tag -> { + Optional foundTag = tagRepo.findTagByTagNameIgnoreCase(tag.getTagName()); + if (foundTag.isPresent()) { + tags.add(foundTag.get()); + } + else { + tagRepo.save(tag); + tags.add(tagRepo.findTagByTagNameIgnoreCase(tag.getTagName()).get()); + } + }); + return tags; + } +}