From 0cac9c872e6c3fe5d9633078ccf5a76ccb24e202 Mon Sep 17 00:00:00 2001 From: Viktoria Date: Mon, 29 Aug 2022 13:23:36 +0200 Subject: [PATCH] ViSnezh --- build.gradle | 1 + .../EasyStartupApplication.java | 1 + .../easystartupcore/config/AppConfig.java | 5 ++ .../project/controller/ProjectController.java | 80 ++++++++++++++++++- .../project/domain/model/Participant.java | 2 +- .../project/domain/model/Project.java | 1 + .../validation/ResponseErrorValidation.java | 33 ++++++++ .../project/dto/ParticipantDto.java | 17 ++++ .../project/dto/ProjectDto.java | 26 ++++++ .../easystartupcore/project/dto/UserDto.java | 23 ++++++ .../project/service/ProjectService.java | 8 +- src/main/resources/application.properties | 4 +- src/main/resources/templates/project.html | 10 +++ 13 files changed, 205 insertions(+), 6 deletions(-) create mode 100644 src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java create mode 100644 src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java create mode 100644 src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java create mode 100644 src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java create mode 100644 src/main/resources/templates/project.html diff --git a/build.gradle b/build.gradle index f7dfd69..50a7a80 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ repositories { } dependencies { + implementation 'org.modelmapper:modelmapper:3.1.0' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'com.google.guava:guava:31.1-jre' implementation 'org.springframework.data:spring-data-jpa' diff --git a/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java b/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java index 72b71fb..cc79914 100644 --- a/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java +++ b/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java @@ -2,6 +2,7 @@ package site.easystartup.easystartupcore; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java b/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java index cc55bf2..c2925ce 100644 --- a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java +++ b/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java @@ -1,5 +1,6 @@ package site.easystartup.easystartupcore.config; +import org.modelmapper.ModelMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -16,4 +17,8 @@ public class AppConfig { public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } + @Bean + public ModelMapper modelMapper(){ + return new ModelMapper(); + } } diff --git a/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java b/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java index 10d98bc..4839cf0 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java @@ -1,13 +1,91 @@ package site.easystartup.easystartupcore.project.controller; import lombok.RequiredArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import site.easystartup.easystartupcore.project.domain.model.Project; +import site.easystartup.easystartupcore.project.domain.validation.ResponseErrorValidation; +import site.easystartup.easystartupcore.project.dto.ProjectDto; +import site.easystartup.easystartupcore.project.service.ProjectService; + +import java.security.Principal; +import java.util.Map; @Controller @RequiredArgsConstructor @RequestMapping("/project") public class ProjectController { + private final ProjectService projectService; + private final ResponseErrorValidation responseErrorValidation; + private final ModelMapper modelMapper; + +// @PostMapping("/create") +// public ModelAndView createProject(@ModelAttribute("project") ProjectDto projectDto, +// BindingResult bindingResult, +// Principal principal) { +// ModelAndView modelAndView = new ModelAndView(); +// +// if (bindingResult.hasErrors()) { +// Map errors = responseErrorValidation.mapValidationService(bindingResult); +// return modelAndView.addObject("errors", errors); +// } +// +// Project project = projectService.createProject(modelMapper.map(projectDto, Project.class), principal); +// modelAndView.addObject("project", project); +// modelAndView.setViewName("project"); +// return modelAndView; +// } +// +// @PatchMapping("/{projectId}/update") +// public ModelAndView updateProject() { +// ModelAndView modelAndView = new ModelAndView(); +// +// return modelAndView; +// } +// +// @DeleteMapping("/{projectId}/delete") +// public ModelAndView deleteProject() { +// ModelAndView modelAndView = new ModelAndView(); +// +// return modelAndView; +// } +// +// @GetMapping("/{projectId}") +// public ModelAndView getProject() { +// ModelAndView modelAndView = new ModelAndView(); +// +// return modelAndView; +// } +// +// @GetMapping("/{userId}") +// public ModelAndView getAllProjectsForUser() { +// } +// +// @GetMapping("/{technology}") +// public ModelAndView getAllProjectsWithTechnology() { +// } +// +// @GetMapping("/my") +// public ModelAndView getAllProjectsForCurrentUser() { +// } +// +// @PostMapping("/{projectId}/applay") +// public ModelAndView applayOnProject() { +// ModelAndView modelAndView = new ModelAndView(); +// +// return modelAndView; +// } +// +// @PostMapping("/{projectId}/{participantId}") +// public ModelAndView confirmParticipant() { +// ModelAndView modelAndView = new ModelAndView(); +// +// return modelAndView; +// } } diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java b/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java index c837b65..fb04e30 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java +++ b/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java @@ -17,7 +17,7 @@ public class Participant { private Long participantId; @ManyToOne - @JoinColumn(name = "project_id") + @JoinColumn(name = "project_id", updatable = false) private Project project; @Column(name = "technology") diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java b/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java index abf64a0..b922ff3 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java +++ b/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java @@ -29,6 +29,7 @@ public class Project { @Column(name = "description") @Size(min = 50, message = "Description should be no less 50 signs") + @NotNull private String description; @Column(name = "commercial_status") // 1 - commercial, 0 - non-commercial diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java b/src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java new file mode 100644 index 0000000..9cc04e8 --- /dev/null +++ b/src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java @@ -0,0 +1,33 @@ +package site.easystartup.easystartupcore.project.domain.validation; + +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.validation.ObjectError; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class ResponseErrorValidation { + + public Map mapValidationService(BindingResult result) { + if (result.hasErrors()) { + Map errorMap = new HashMap<>(); + + if (!CollectionUtils.isEmpty(result.getAllErrors())) { + for (ObjectError error : result.getAllErrors()) { + errorMap.put(error.getCode(), error.getDefaultMessage()); + } + } + + for (FieldError error : result.getFieldErrors()) { + errorMap.put(error.getCode(), error.getDefaultMessage()); + } + + return errorMap; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java b/src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java new file mode 100644 index 0000000..153636f --- /dev/null +++ b/src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java @@ -0,0 +1,17 @@ +package site.easystartup.easystartupcore.project.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Set; + +@Data +public class ParticipantDto implements Serializable { + private final Long participantId; + @NotNull + private final String technology; + private final String nameOfPosition; + private final UserDto userId; + private final Set requests; +} diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java b/src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java new file mode 100644 index 0000000..fad3467 --- /dev/null +++ b/src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java @@ -0,0 +1,26 @@ +package site.easystartup.easystartupcore.project.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class ProjectDto implements Serializable { + private final Long projectId; + private final String coverLink; + @Size(min = 3, max = 100, message = "Title should be no less 3 and no more 100 signs") + @NotNull + private final String title; + @Size(min = 50, message = "Description should be no less 50 signs") + @NotNull + private final String description; + private final int commercialStatus; + @NotNull + private final String technology; + private final List participants; + private final LocalDateTime createdDate; +} diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java b/src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java new file mode 100644 index 0000000..200c7a3 --- /dev/null +++ b/src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java @@ -0,0 +1,23 @@ +package site.easystartup.easystartupcore.project.dto; + +import lombok.Data; +import site.easystartup.easystartupcore.domain.Role; + +import java.io.Serializable; +import java.util.Set; + +@Data +public class UserDto implements Serializable { + private final long id; + private final String username; + private final String password; + private final boolean active; + private final String full_name; + private final String status; + private final String iconPath; + private final String email; + private final Set tags; + private final Set professions; + private final Set projects; + private final Set roles; +} diff --git a/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java b/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java index 341eb14..7d5e903 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java +++ b/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java @@ -2,14 +2,18 @@ package site.easystartup.easystartupcore.project.service; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import site.easystartup.easystartupcore.project.domain.model.Project; import site.easystartup.easystartupcore.project.repo.ProjectRepo; +import java.security.Principal; + @Service @RequiredArgsConstructor public class ProjectService { private final ProjectRepo projectRepo; - - + public Project createProject(Project project, Principal principal) { + return null; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 15705f3..dd54a6b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,6 +7,6 @@ spring.sql.init.mode=always spring.sql.init.platform=postgres spring.datasource.url=jdbc:postgresql://localhost:5432/testdb spring.datasource.username=postgres -#spring.datasource.password=root -spring.datasource.password=postgres +spring.datasource.password=root +#spring.datasource.password=postgres diff --git a/src/main/resources/templates/project.html b/src/main/resources/templates/project.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/src/main/resources/templates/project.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file