Tag rename, project refactor, user fix

This commit is contained in:
redtea committed 2024-07-08 00:44:54 +03:00
1 parent 7d661c52f8
commit a7a003734a
20 files changed
+231 -159

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@ plugins {
} }
group = 'site.easy-startup' group = 'site.easy-startup'
version = '0.0.11-a' version = '0.0.12'
sourceCompatibility = "17" sourceCompatibility = "17"
configurations { configurations {
@@ -57,7 +57,7 @@ public class UserController {
@PutMapping("/user/edit/{username}") @PutMapping("/user/edit/{username}")
public ResponseEntity<Object> userEdit(@PathVariable String username,@Valid @RequestBody UserRequest userRequest, public ResponseEntity<Object> userEdit(@PathVariable String username,@Valid @RequestBody UserRequest userRequest,
BindingResult bindingResult, Principal principal) { BindingResult bindingResult, Principal principal) {
if(!principal.getName().equals(username) && !userService.getUserByPrincipal(principal).isAdmin()) if(!userService.getCurrent().getUsername().equals(username) && !userService.getUserByPrincipal(principal).isAdmin())
throw new NoPermissionException(String.format("User %s can not edit profile of user %s", principal.getName(), throw new NoPermissionException(String.format("User %s can not edit profile of user %s", principal.getName(),
username)); username));
@@ -22,38 +22,38 @@ public class User implements UserDetails {
private String username; private String username;
private String password; private String password;
private boolean active; private boolean active;
private String full_name; private String fullName;
private String status; private String status;
private String iconPath; private String iconPath;
private String email; private String email;
private String about; private String about;
private String country; private String country;
private String city; private String city;
private String birthday;
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER) @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_technologies", joinColumns = @JoinColumn(name = "user_id")) @CollectionTable(name = "technologies", joinColumns = @JoinColumn(name = "user_id"))
private Set<String> technologies; private Set<String> technologies;
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER) @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_profession", joinColumns = @JoinColumn(name = "user_id")) @CollectionTable(name = "profession", joinColumns = @JoinColumn(name = "user_id"))
private Set<String> professions; private Set<String> professions;
@ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER) @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_projects", joinColumns = @JoinColumn(name = "user_id")) @CollectionTable(name = "projects", joinColumns = @JoinColumn(name = "user_id"))
private Set<Long> projects; private Set<Long> projects;
@ManyToMany(mappedBy = "requests") @ManyToMany(mappedBy = "requests")
private List<Participant> requests; private List<Participant> requests;
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER) @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id")) @CollectionTable(name = "role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private Set<Role> roles; private Set<Role> roles;
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER) @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_lang", joinColumns = @JoinColumn(name = "user_id")) @CollectionTable(name = "languages", joinColumns = @JoinColumn(name = "user_id"))
private Set<String> langs; private Set<String> languages;
@ElementCollection @ElementCollection
@CollectionTable(name = "user_contact", @CollectionTable(name = "user_contact",
@@ -18,7 +18,7 @@ public class UserDto implements Serializable {
private String status; private String status;
private String iconPath; private String iconPath;
private String email; private String email;
private Set<String> tags; private Set<String> technologies;
private Set<String> professions; private Set<String> professions;
private Set<Long> projects; private Set<Long> projects;
private List<Participant> requests; private List<Participant> requests;
@@ -26,6 +26,7 @@ public class UserDto implements Serializable {
private String about; private String about;
private String country; private String country;
private String city; private String city;
private Set<String> langs; private String birthday;
private Set<String> languages;
private Map<String, String> contacts; private Map<String, String> contacts;
} }
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/api/project") @RequestMapping("/projects")
@Tag(name = "Проекты", description = "контроллер для работы с проектами") @Tag(name = "Проекты", description = "контроллер для работы с проектами")
public class ProjectController { public class ProjectController {
private final ProjectService projectService; private final ProjectService projectService;
@@ -34,7 +34,20 @@ public class ProjectController {
private final ParticipantService participantService; private final ParticipantService participantService;
// new
//@ //@
@GetMapping
@Operation(summary = "Получение всех проектов для пользователя")
public ResponseEntity<List<ProjectDto>> getAllProjects() {
List<ProjectDto> projects = projectService.getAllProjects()
.stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(projects);
}
@PostMapping @PostMapping
@Operation(summary = "Создание проекта") @Operation(summary = "Создание проекта")
public ResponseEntity<Object> createProject(@Valid @RequestBody ProjectRequest projectRequest, public ResponseEntity<Object> createProject(@Valid @RequestBody ProjectRequest projectRequest,
@@ -48,6 +61,12 @@ public class ProjectController {
} }
//@ //@
@GetMapping("/{projectId}")
@Operation(summary = "получение проекта по id")
public ResponseEntity<ProjectDto> getProject(@PathVariable("projectId") Long projectId) {
return ResponseEntity.ok().body(modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class));
}
@PutMapping("/{projectId}") @PutMapping("/{projectId}")
@Operation(summary = "Изменение проекта") @Operation(summary = "Изменение проекта")
public ResponseEntity<Object> editProject(@Valid @RequestBody ProjectRequest projectRequest, public ResponseEntity<Object> editProject(@Valid @RequestBody ProjectRequest projectRequest,
@@ -61,6 +80,78 @@ public class ProjectController {
return ResponseEntity.ok().body(modelMapper.map(projectUpdated, ProjectDto.class)); return ResponseEntity.ok().body(modelMapper.map(projectUpdated, ProjectDto.class));
} }
//@
@DeleteMapping("/{projectId}")
@Operation(summary = "Удаление проекта")
public ResponseEntity<Object> deleteProject(@PathVariable("projectId") Long projectId,
Principal principal) {
projectService.deleteProject(projectId, principal);
return ResponseEntity.ok(new MessageResponse("Project was deleted!"));
}
//@
@GetMapping("/user/{userId}")
@Operation(summary = "Получение всех проектов для пользователя")
public ResponseEntity<List<ProjectDto>> getAllProjectsForUser(@PathVariable("userId") Long userId) {
List<ProjectDto> projects = projectService.getAllProjectsForUser(userId)
.stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(projects);
}
@GetMapping("/requests")
@Operation(summary = "получение всех проектов для текущего пользователя")
public ResponseEntity<List<ProjectDto>> getAllProjectsForCurrentUser(Principal principal) {
List<ProjectDto> projects = projectService.getAllProjectsForCurrentUser(principal)
.stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(projects);
}
//@
@GetMapping("/{projectId}/requests")
@Operation(summary = "получение всех поданных заявок на проект")
public ResponseEntity<List<ParticipantDto>> getAllRequestsForProject(@PathVariable Long projectId) {
List<ParticipantDto> requests = projectService.getAllRequestsForProject(projectId)
.stream().map(project -> modelMapper.map(project, ParticipantDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(requests);
}
//@
@PostMapping("/requests")
@Operation(summary = "утвердить участника на проект")
public ResponseEntity<ProjectDto> confirmParticipant(
@RequestBody ParticipantRequest participantRequest,
Principal principal) {
Project project;
if(participantRequest.isApproved())
project = projectService.confirmParticipant(participantRequest.getProjectId(),
participantRequest.getNameOfPosition(),
participantRequest.getParticipantId(),
principal);
else {
project = projectService.rejectParticipant(participantRequest.getProjectId(),
participantRequest.getNameOfPosition(),
participantRequest.getParticipantId(),
principal);
}
return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class));
}
// old
//@
//@
//@ //@
@PutMapping("/{projectId}/{partId}/part") @PutMapping("/{projectId}/{partId}/part")
@Operation(summary = "Изменение позиции в проекте: Дизайнер/Ui designer") @Operation(summary = "Изменение позиции в проекте: Дизайнер/Ui designer")
@@ -77,30 +168,15 @@ public class ProjectController {
} }
//@
@DeleteMapping("/{projectId}")
@Operation(summary = "Удаление проекта")
public ResponseEntity<Object> deleteProject(@PathVariable("projectId") Long projectId,
Principal principal) {
projectService.deleteProject(projectId, principal);
return ResponseEntity.ok(new MessageResponse("Project was deleted!"));
}
//@
@GetMapping("/{projectId}")
@Operation(summary = "получение проекта по id")
public ResponseEntity<ProjectDto> getProject(@PathVariable("projectId") Long projectId) {
return ResponseEntity.ok().body(modelMapper.map(projectService.getProjectById(projectId), ProjectDto.class));
}
//@
@GetMapping("/{userId}/all")
@Operation(summary = "Получение всех проектов для пользователя")
public ResponseEntity<List<ProjectDto>> getAllProjectsForUser(@PathVariable("userId") Long userId) {
List<ProjectDto> projects = projectService.getAllProjectsForUser(userId)
.stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(projects);
}
//@ //@
@GetMapping("/{technology}/tech") @GetMapping("/{technology}/tech")
@@ -111,13 +187,7 @@ public class ProjectController {
return ResponseEntity.ok().body(projects); return ResponseEntity.ok().body(projects);
} }
@GetMapping("/my")
@Operation(summary = "получение всех проектов для текущего пользователя")
public ResponseEntity<List<ProjectDto>> getAllProjectsForCurrentUser(Principal principal) {
List<ProjectDto> projects = projectService.getAllProjectsForCurrentUser(principal)
.stream().map(project -> modelMapper.map(project, ProjectDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(projects);
}
//@ //@
@GetMapping("/{nameOfPosition}/positions") @GetMapping("/{nameOfPosition}/positions")
@@ -137,14 +207,7 @@ public class ProjectController {
return ResponseEntity.ok().body(projects); return ResponseEntity.ok().body(projects);
} }
//@
@GetMapping("/requests")
@Operation(summary = "получение всех поданных заявок на проект")
public ResponseEntity<List<ParticipantDto>> getAllRequestsForProject(@RequestBody Long projectId) {
List<ParticipantDto> requests = projectService.getAllRequestsForProject(projectId)
.stream().map(project -> modelMapper.map(project, ParticipantDto.class)).collect(Collectors.toList());
return ResponseEntity.ok().body(requests);
}
//@ //@
@PostMapping("/apply") @PostMapping("/apply")
@@ -156,16 +219,5 @@ public class ProjectController {
return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class)); return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class));
} }
//@
@PostMapping("/participant")
@Operation(summary = "утвердить участница на проект")
public ResponseEntity<ProjectDto> confirmParticipant(@RequestBody ParticipantRequest participantRequest,
Principal principal) {
Project project = projectService.confirmParticipant(participantRequest.getProjectId(),
participantRequest.getNameOfPosition(),
participantRequest.getParticipantId(),
principal);
return ResponseEntity.ok().body(modelMapper.map(project, ProjectDto.class));
}
} }
@@ -16,24 +16,24 @@ import java.util.Objects;
public class Participant { public class Participant {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "participant_id") @Column(name = "participantId")
private Long participantId; private Long participantId;
@ManyToOne @ManyToOne
@JoinColumn(name = "project_id", updatable = false) @JoinColumn(name = "projectId", updatable = false)
private Project project; private Project project;
@Column(name = "name_of_position") @Column(name = "nameOfPosition")
@NotNull @NotNull
private String nameOfPosition; private String nameOfPosition;
@ManyToOne @ManyToOne
@JoinColumn(name = "user_id") @JoinColumn(name = "userId")
private User user; private User user;
@ManyToMany @ManyToMany
@JoinTable(name = "user_request", @JoinTable(name = "userRequest",
joinColumns = @JoinColumn(name = "participant_id"), joinColumns = @JoinColumn(name = "participantId"),
inverseJoinColumns = @JoinColumn(name = "user_id")) inverseJoinColumns = @JoinColumn(name = "userId"))
@ToString.Exclude @ToString.Exclude
private List<User> requests; private List<User> requests;
@@ -2,7 +2,6 @@ package site.easystartup.web.project.domain.model;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate;
import site.easystartup.web.domain.model.User; import site.easystartup.web.domain.model.User;
import javax.persistence.*; import javax.persistence.*;
@@ -10,8 +9,6 @@ import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set;
@Data @Data
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -20,10 +17,10 @@ import java.util.Set;
public class Project { public class Project {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "project_id") @Column(name = "projectId")
private Long projectId; private Long projectId;
@Column(name = "cover_link") @Column(name = "coverLink")
private String coverLink; private String coverLink;
@Column(name = "title") @Column(name = "title")
@@ -36,25 +33,25 @@ public class Project {
@NotNull @NotNull
private String description; private String description;
@Column(name = "commercial_status") // 1 - commercial, 0 - non-commercial @Column(name = "commercialStatus") // 1 - commercial, 0 - non-commercial
private int commercialStatus; private int commercialStatus;
@ManyToMany @ManyToMany
@JoinTable(name = "project_tag", @JoinTable(name = "projectTag",
joinColumns = @JoinColumn(name = "project_id"), joinColumns = @JoinColumn(name = "projectId"),
inverseJoinColumns = @JoinColumn(name = "tag_id") inverseJoinColumns = @JoinColumn(name = "technologyId")
) )
private List<Tag> technology; private List<Technology> technology;
@ManyToOne @ManyToOne
@JoinColumn(name = "owner_id", updatable = false) @JoinColumn(name = "ownerId", updatable = false)
private User owner; private User owner;
@OneToMany(mappedBy = "project", cascade = {CascadeType.ALL}) @OneToMany(mappedBy = "project", cascade = {CascadeType.ALL})
// @ToString.Exclude // @ToString.Exclude
private List<Participant> participants; private List<Participant> participants;
@Column(name = "created_date", updatable = false) @Column(name = "createdDate", updatable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdDate; private LocalDateTime createdDate;
@@ -13,14 +13,14 @@ import java.util.Set;
@RequiredArgsConstructor @RequiredArgsConstructor
@Entity @Entity
@Table(name = "tag") @Table(name = "tag")
public class Tag { public class Technology {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "tag_id") @Column(name = "technologyId")
private Long tagId; private Long technologyId;
@Column(name = "tage_name") @Column(name = "technologyName")
private String tagName; private String technologyName;
@ManyToMany(mappedBy = "technology") @ManyToMany(mappedBy = "technology")
private Set<Project> projects; private Set<Project> projects;
@@ -29,8 +29,8 @@ public class Tag {
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false; if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Tag tag = (Tag) o; Technology technology = (Technology) o;
return tagId != null && Objects.equals(tagId, tag.tagId); return technologyId != null && Objects.equals(technologyId, technology.technologyId);
} }
@Override @Override
@@ -9,4 +9,5 @@ public class ParticipantRequest {
private Long projectId; private Long projectId;
private Long participantId; private Long participantId;
private String nameOfPosition; private String nameOfPosition;
private boolean approved;
} }
@@ -2,9 +2,7 @@ package site.easystartup.web.project.domain.requst;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor; import site.easystartup.web.project.domain.model.Technology;
import org.springframework.web.multipart.MultipartFile;
import site.easystartup.web.project.domain.model.Tag;
import site.easystartup.web.project.dto.ParticipantDto; import site.easystartup.web.project.dto.ParticipantDto;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@@ -25,6 +23,6 @@ public class ProjectRequest {
private String description; private String description;
private int commercialStatus; private int commercialStatus;
@NotNull @NotNull
private List<Tag> technology; private List<Technology> technology;
private List<ParticipantDto> participants; private List<ParticipantDto> participants;
} }
@@ -1,12 +1,10 @@
package site.easystartup.web.project.repo; package site.easystartup.web.project.repo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import site.easystartup.web.domain.model.User; import site.easystartup.web.domain.model.User;
import site.easystartup.web.project.domain.model.Project; import site.easystartup.web.project.domain.model.Project;
import site.easystartup.web.project.domain.model.Tag; import site.easystartup.web.project.domain.model.Technology;
import java.util.List; import java.util.List;
@@ -14,7 +12,7 @@ import java.util.List;
public interface ProjectRepo extends JpaRepository<Project, Long> { public interface ProjectRepo extends JpaRepository<Project, Long> {
List<Project> findAllByOwnerOrderByCreatedDate(User owner); List<Project> findAllByOwnerOrderByCreatedDate(User owner);
List<Project> findAllByTechnology(Tag tag); List<Project> findAllByTechnology(Technology technology);
List<Project> findAllByCommercialStatusOrderByCreatedDateAsc(int commercialStatus); List<Project> findAllByCommercialStatusOrderByCreatedDateAsc(int commercialStatus);
@@ -1,13 +0,0 @@
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<Tag, Long> {
Optional<Tag> findTagByTagNameIgnoreCase(String tagName);
}
@@ -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.Technology;
import java.util.Optional;
@Repository
public interface TechnologyRepo extends JpaRepository<Technology, Long> {
Optional<Technology> findTechnologyByTechnologyName(String technologyName);
}
@@ -15,7 +15,6 @@ import site.easystartup.web.storage.service.StorageService;
import java.security.Principal; import java.security.Principal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -25,7 +24,7 @@ public class ProjectService {
private final ModelMapper modelMapper; private final ModelMapper modelMapper;
private final StorageService storageService; private final StorageService storageService;
private final ParticipantRepo participantRepo; private final ParticipantRepo participantRepo;
private final TagService tagService; private final TechnologyService technologyService;
@@ -79,8 +78,12 @@ public class ProjectService {
return projectRepo.findAllByOwnerOrderByCreatedDate(user); return projectRepo.findAllByOwnerOrderByCreatedDate(user);
} }
public List<Project> getAllProjects() {
return projectRepo.findAll();
}
public List<Project> getAllProjectsWithTechnology(String technology) { public List<Project> getAllProjectsWithTechnology(String technology) {
return projectRepo.findAllByTechnology(tagService.getTechnologyByName(technology.trim())); return projectRepo.findAllByTechnology(technologyService.getTechnologyByName(technology.trim()));
} }
public List<Project> getAllProjectsForCurrentUser(Principal principal) { public List<Project> getAllProjectsForCurrentUser(Principal principal) {
@@ -127,12 +130,28 @@ public class ProjectService {
return projectRepo.save(project); return projectRepo.save(project);
} }
public Project rejectParticipant(Long projectId, String nameOfPosition, Long participantId, Principal principal) {
Project project = getProjectById(projectId);
if (!projectIsBelongUser(project, principal))
throw new RuntimeException("This project cannot be changed");
User user = userService.getUserById(participantId);
project.getParticipants().forEach(participant -> {
if (participant.getNameOfPosition().equals(nameOfPosition)) {
participant.getRequests().remove(user);
}
});
projectRepo.save(project);
return projectRepo.save(project);
}
private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) { private Project projectRequestToProject(ProjectRequest projectRequest, Principal principal) {
Project project = new Project(); Project project = new Project();
project.setTitle(projectRequest.getTitle()); project.setTitle(projectRequest.getTitle());
project.setDescription(projectRequest.getDescription()); project.setDescription(projectRequest.getDescription());
project.setTechnology(tagService.convertTechnology(projectRequest.getTechnology())); project.setTechnology(technologyService.convertTechnology(projectRequest.getTechnology()));
project.setCommercialStatus(project.getCommercialStatus()); project.setCommercialStatus(project.getCommercialStatus());
// project.setCoverLink(projectRequest.getCover().getName()); // project.setCoverLink(projectRequest.getCover().getName());
project.setOwner(userService.getUserByPrincipal(principal)); project.setOwner(userService.getUserByPrincipal(principal));
@@ -1,38 +0,0 @@
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<Tag> getAllTags() {
return tagRepo.findAll();
}
public List<Tag> convertTechnology(List<Tag> technology) {
List<Tag> tags = new ArrayList<>();
technology.forEach(tag -> {
Optional<Tag> 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;
}
public Tag getTechnologyByName(String tag) {
return tagRepo.findTagByTagNameIgnoreCase(tag).orElseThrow(() -> new RuntimeException("Technolohy not found"));
}
}
@@ -0,0 +1,38 @@
package site.easystartup.web.project.service;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import site.easystartup.web.project.domain.model.Technology;
import site.easystartup.web.project.repo.TechnologyRepo;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class TechnologyService {
private final TechnologyRepo technologyRepo;
public List<Technology> getAllTags() {
return technologyRepo.findAll();
}
public List<Technology> convertTechnology(List<Technology> technology) {
List<Technology> technologies = new ArrayList<>();
technology.forEach(tag -> {
Optional<Technology> foundTag = technologyRepo.findTechnologyByTechnologyName(tag.getTechnologyName());
if (foundTag.isPresent()) {
technologies.add(foundTag.get());
}
else {
technologyRepo.save(tag);
technologies.add(technologyRepo.findTechnologyByTechnologyName(tag.getTechnologyName()).get());
}
});
return technologies;
}
public Technology getTechnologyByName(String tag) {
return technologyRepo.findTechnologyByTechnologyName(tag).orElseThrow(() -> new RuntimeException("Technolohy not found"));
}
}
@@ -19,8 +19,7 @@ public class UserRequest {
@NotNull @NotNull
private boolean active; private boolean active;
@NotNull private String fullName;
private String full_name;
@Size(max = 60, message = "Status should be no more 60 signs") @Size(max = 60, message = "Status should be no more 60 signs")
private String status; private String status;
@@ -31,7 +30,7 @@ public class UserRequest {
@NotBlank(message = "Email is required") @NotBlank(message = "Email is required")
private String email; private String email;
private Set<String> tags; private Set<String> technologies;
private Set<String> professions; private Set<String> professions;
private Set<Long> projects; private Set<Long> projects;
private List<Participant> requests; private List<Participant> requests;
@@ -42,6 +41,7 @@ public class UserRequest {
private String country; private String country;
@Size(max = 100, message = "Status should be no more 100 signs") @Size(max = 100, message = "Status should be no more 100 signs")
private String city; private String city;
private Set<String> langs; private String birthday;
private Set<String> languages;
private Map<String, String> contacts; private Map<String, String> contacts;
} }
@@ -41,20 +41,20 @@ public class UserService {
public User editUser(String username, UserRequest userRequest) { public User editUser(String username, UserRequest userRequest) {
User user = userRepo.findByUsername(username); User user = userRepo.findByUsername(username);
user.setActive(userRequest.isActive()); user.setActive(userRequest.isActive());
user.setFull_name(userRequest.getFull_name()); user.setFullName(userRequest.getFullName());
user.setStatus(userRequest.getStatus()); user.setStatus(userRequest.getStatus());
if(userRequest.getIcon() != null) storageService.saveImage(userRequest.getIcon(), username + "-icon"); if(userRequest.getIcon() != null) storageService.saveImage(userRequest.getIcon(), username + "-icon");
user.setIconPath(user.getIconPath() == null ? "" : username + "-icon.jpg"); user.setIconPath(user.getIconPath() == null ? "" : username + "-icon.jpg");
user.setEmail(userRequest.getEmail() == null ? "" : userRequest.getEmail()); user.setEmail(userRequest.getEmail() == null ? "" : userRequest.getEmail());
user.setTechnologies(userRequest.getTags() == null ? Collections.emptySet() : userRequest.getTags()); user.setTechnologies(userRequest.getTechnologies() == null ? Collections.emptySet() : userRequest.getTechnologies());
user.setProfessions(userRequest.getProfessions() == null ? Collections.emptySet() : userRequest.getProfessions()); user.setProfessions(userRequest.getProfessions() == null ? Collections.emptySet() : userRequest.getProfessions());
user.setProjects(userRequest.getProjects() == null ? Collections.emptySet() : userRequest.getProjects()); user.setProjects(userRequest.getProjects() == null ? Collections.emptySet() : userRequest.getProjects());
user.setRequests(userRequest.getRequests() == null ? Collections.emptyList() : userRequest.getRequests()); user.setRequests(userRequest.getRequests() == null ? Collections.emptyList() : userRequest.getRequests());
user.setAbout(userRequest.getAbout() == null ? "" : userRequest.getAbout()); user.setAbout(userRequest.getAbout() == null ? "" : userRequest.getAbout());
user.setCountry(userRequest.getCountry() == null ? "" : userRequest.getCountry()); user.setCountry(userRequest.getCountry() == null ? "" : userRequest.getCountry());
user.setCity(userRequest.getCity() == null ? "" : userRequest.getCity()); user.setCity(userRequest.getCity() == null ? "" : userRequest.getCity());
user.setLangs(userRequest.getLangs() == null ? Collections.emptySet() : userRequest.getLangs()); user.setLanguages(userRequest.getLanguages() == null ? Collections.emptySet() : userRequest.getLanguages());
user.setContacts(userRequest.getContacts() == null ? Collections.emptyMap() : userRequest.getContacts()); user.setContacts(userRequest.getContacts() == null ? Collections.emptyMap() : userRequest.getContacts());
return userRepo.save(user); return userRepo.save(user);
} }
+8 -2
View File
@@ -1,7 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head> <head>
<title>API</title> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>k</title>
</head> </head>
<body> <body>
<h1>API</h1> <h1>API</h1>
Binary file not shown.