pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -83,6 +83,7 @@ .antMatchers("/api/activate").permitAll() .antMatchers("/api/account/reset-password/init").permitAll() .antMatchers("/api/account/reset-password/finish").permitAll() .antMatchers("/api/consultant/recommend").permitAll() .antMatchers("/api/admin/**").hasAuthority(AuthoritiesConstants.ADMIN) .antMatchers("/api/**").authenticated() .antMatchers("/websocket/**").authenticated() pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
比對新檔案 @@ -0,0 +1,14 @@ package com.pollex.pam.enums; import com.fasterxml.jackson.annotation.JsonProperty; public enum ContactStatusEnum { @JsonProperty("picked") PICKED, @JsonProperty("reserved") RESERVED, @JsonProperty("contacted") CONTACTED } pamapi/src/main/java/com/pollex/pam/repository/ConsultantRepository.java
比對新檔案 @@ -0,0 +1,14 @@ package com.pollex.pam.repository; import com.pollex.pam.domain.Consultant; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Optional; @Repository public interface ConsultantRepository extends JpaRepository<Consultant, Long> { Optional<Consultant> findFirstByAgentNo(String agentNo); List<Consultant> findAllByRecommendIsTrue(); } pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java
比對新檔案 @@ -0,0 +1,49 @@ package com.pollex.pam.service; import com.pollex.pam.domain.Consultant; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.service.dto.*; import com.pollex.pam.service.mapper.ConsultantMapper; import com.pollex.pam.web.rest.errors.ConsultantNotFoundException; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; @Service public class ConsultantService { private final ConsultantRepository consultantRepository; private final ConsultantMapper consultantMapper; public ConsultantService(ConsultantRepository consultantRepository, ConsultantMapper consultantMapper) { this.consultantRepository = consultantRepository; this.consultantMapper = consultantMapper; } public List<ConsultantDTO> getMyConsultantList() { return Collections.emptyList(); } public List<ConsultantDTO> getRecommendConsultantList() { List<Consultant> recommendConsultantList = consultantRepository.findAllByRecommendIsTrue(); return consultantMapper.toDto(recommendConsultantList); } public void addConsultantToOwnList(AddConsultantParam param) { List<String> agentNoList = param.getAgentNoList(); } public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) { return Collections.emptyList(); } public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) { return Collections.emptyList(); } public ConsultantDetailDTO getConsultantDetail(String agentNo) { Consultant consultant = consultantRepository.findFirstByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new); return consultantMapper.toDetailDto(consultant); } } pamapi/src/main/java/com/pollex/pam/service/dto/AddConsultantParam.java
比對新檔案 @@ -0,0 +1,15 @@ package com.pollex.pam.service.dto; import java.util.List; public class AddConsultantParam { List<String> agentNoList; public List<String> getAgentNoList() { return agentNoList; } public void setAgentNoList(List<String> agentNoList) { this.agentNoList = agentNoList; } } pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java
比對新檔案 @@ -0,0 +1,93 @@ package com.pollex.pam.service.dto; import com.fasterxml.jackson.annotation.JsonProperty; import com.pollex.pam.enums.ContactStatusEnum; import java.time.Instant; import java.util.List; public class ConsultantDTO { @JsonProperty("new") private boolean newConsultant; private String agentNo; private String name; private String img; private List<String> expertise; private Float avgScore; private ContactStatusEnum contactStatus; private Instant updateTime; private String seniority; public boolean isNewConsultant() { return newConsultant; } public void setNewConsultant(boolean newConsultant) { this.newConsultant = newConsultant; } public String getAgentNo() { return agentNo; } public void setAgentNo(String agentNo) { this.agentNo = agentNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getImg() { return img; } public void setImg(String img) { this.img = img; } public List<String> getExpertise() { return expertise; } public void setExpertise(List<String> expertise) { this.expertise = expertise; } public Float getAvgScore() { return avgScore; } public void setAvgScore(Float avgScore) { this.avgScore = avgScore; } public ContactStatusEnum getContactStatus() { return contactStatus; } public void setContactStatus(ContactStatusEnum contactStatus) { this.contactStatus = contactStatus; } public Instant getUpdateTime() { return updateTime; } public void setUpdateTime(Instant updateTime) { this.updateTime = updateTime; } public String getSeniority() { return seniority; } public void setSeniority(String seniority) { this.seniority = seniority; } } pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java
比對新檔案 @@ -0,0 +1,165 @@ package com.pollex.pam.service.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import java.time.Instant; import java.util.List; public class ConsultantDetailDTO { private String name; private String agentNo; private String role; private String image; private Float avgScore; private String title; private String phoneNumber; private String serveArea; private String companyAddress; private Instant latestLoginTime; private String seniority; private Number suitability; private Number evaluation; private List<String> expertises; private String concept; private List<String> experiences; private String awards; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAgentNo() { return agentNo; } public void setAgentNo(String agentNo) { this.agentNo = agentNo; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public Float getAvgScore() { return avgScore; } public void setAvgScore(Float avgScore) { this.avgScore = avgScore; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getServeArea() { return serveArea; } public void setServeArea(String serveArea) { this.serveArea = serveArea; } public String getCompanyAddress() { return companyAddress; } public void setCompanyAddress(String companyAddress) { this.companyAddress = companyAddress; } public Instant getLatestLoginTime() { return latestLoginTime; } public void setLatestLoginTime(Instant latestLoginTime) { this.latestLoginTime = latestLoginTime; } public String getSeniority() { return seniority; } public void setSeniority(String seniority) { this.seniority = seniority; } public Number getSuitability() { return suitability; } public void setSuitability(Number suitability) { this.suitability = suitability; } public Number getEvaluation() { return evaluation; } public void setEvaluation(Number evaluation) { this.evaluation = evaluation; } public List<String> getExpertises() { return expertises; } public void setExpertises(List<String> expertises) { this.expertises = expertises; } public String getConcept() { return concept; } public void setConcept(String concept) { this.concept = concept; } public List<String> getExperiences() { return experiences; } public void setExperiences(List<String> experiences) { this.experiences = experiences; } public String getAwards() { return awards; } public void setAwards(String awards) { this.awards = awards; } } pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java
比對新檔案 @@ -0,0 +1,42 @@ package com.pollex.pam.service.dto; import com.pollex.pam.enums.GenderEnum; public class FastQueryConsultantParam { private GenderEnum gender; private String communicationStyle; private Number avgScore; private String status; public GenderEnum getGender() { return gender; } public void setGender(GenderEnum gender) { this.gender = gender; } public String getCommunicationStyle() { return communicationStyle; } public void setCommunicationStyle(String communicationStyle) { this.communicationStyle = communicationStyle; } public Number getAvgScore() { return avgScore; } public void setAvgScore(Number avgScore) { this.avgScore = avgScore; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } } pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java
比對新檔案 @@ -0,0 +1,90 @@ package com.pollex.pam.service.dto; import com.pollex.pam.enums.GenderEnum; import java.util.List; public class StrictQueryConsultantParam { private GenderEnum gender; private Number avgScore; private String status; private String area; private List<String> requirements; private String otherRequirement; private String seniority; private List<String> popularTags; private String otherPopularTags; public GenderEnum getGender() { return gender; } public void setGender(GenderEnum gender) { this.gender = gender; } public Number getAvgScore() { return avgScore; } public void setAvgScore(Number avgScore) { this.avgScore = avgScore; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public List<String> getRequirements() { return requirements; } public void setRequirements(List<String> requirements) { this.requirements = requirements; } public String getOtherRequirement() { return otherRequirement; } public void setOtherRequirement(String otherRequirement) { this.otherRequirement = otherRequirement; } public String getSeniority() { return seniority; } public void setSeniority(String seniority) { this.seniority = seniority; } public List<String> getPopularTags() { return popularTags; } public void setPopularTags(List<String> popularTags) { this.popularTags = popularTags; } public String getOtherPopularTags() { return otherPopularTags; } public void setOtherPopularTags(String otherPopularTags) { this.otherPopularTags = otherPopularTags; } } pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java
比對新檔案 @@ -0,0 +1,71 @@ package com.pollex.pam.service.mapper; import com.pollex.pam.domain.Consultant; import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.service.dto.ConsultantDTO; import com.pollex.pam.service.dto.ConsultantDetailDTO; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.time.Instant; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @Service public class ConsultantMapper { private final static Character SPLIT_MASK = ','; public List<ConsultantDTO> toDto(List<Consultant> source) { return source.stream().map(this::toDto).collect(Collectors.toList()); } // todo convert public ConsultantDTO toDto(Consultant source) { ConsultantDTO consultantDTO = new ConsultantDTO(); consultantDTO.setAgentNo(source.getAgentNo()); consultantDTO.setName(source.getName()); consultantDTO.setAvgScore(source.getAvgScore()); consultantDTO.setSeniority(source.getSeniority()); // todo consultantDTO.setImg(""); consultantDTO.setExpertise(splitStringWithChar(source.getExpertise())); consultantDTO.setNewConsultant(false); consultantDTO.setContactStatus(ContactStatusEnum.CONTACTED); consultantDTO.setUpdateTime(Instant.now()); return consultantDTO; } public ConsultantDetailDTO toDetailDto(Consultant source) { ConsultantDetailDTO consultantDetailDTO = new ConsultantDetailDTO(); consultantDetailDTO.setName(source.getName()); consultantDetailDTO.setAgentNo(source.getAgentNo()); consultantDetailDTO.setRole(source.getRole()); consultantDetailDTO.setAvgScore(source.getAvgScore()); consultantDetailDTO.setTitle(source.getTitle()); consultantDetailDTO.setPhoneNumber(source.getPhoneNumber()); consultantDetailDTO.setServeArea(source.getServeArea()); consultantDetailDTO.setCompanyAddress(source.getCompanyAddress()); consultantDetailDTO.setLatestLoginTime(source.getLatestLoginTime()); consultantDetailDTO.setSeniority(source.getSeniority()); consultantDetailDTO.setConcept(source.getConcept()); consultantDetailDTO.setAwards(source.getAward()); consultantDetailDTO.setImage(""); consultantDetailDTO.setSuitability(0); consultantDetailDTO.setEvaluation(0); consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise())); consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience())); return consultantDetailDTO; } private List<String> splitStringWithChar(String source) { return Arrays.stream(StringUtils.split(source, SPLIT_MASK)) .map(String::trim) .collect(Collectors.toList()); } } pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java
比對新檔案 @@ -0,0 +1,56 @@ package com.pollex.pam.web.rest; import com.pollex.pam.service.ConsultantService; import com.pollex.pam.service.dto.*; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/consultant") public class ConsultantResource { private final ConsultantService consultantService; public ConsultantResource(ConsultantService consultantService) { this.consultantService = consultantService; } @GetMapping("") public ResponseEntity<List<ConsultantDTO>> getMyConsultantList() { List<ConsultantDTO> myConsultants = consultantService.getMyConsultantList(); return new ResponseEntity<>(myConsultants, HttpStatus.OK); } @GetMapping("/recommend") public ResponseEntity<List<ConsultantDTO>> getRecommendConsultantList() { List<ConsultantDTO> recommendConsultantList = consultantService.getRecommendConsultantList(); return new ResponseEntity<>(recommendConsultantList, HttpStatus.OK); } @PostMapping("") public ResponseEntity<Void> addConsultantToOwnList(@RequestBody AddConsultantParam param) { consultantService.addConsultantToOwnList(param); return new ResponseEntity<>(HttpStatus.ACCEPTED); } @GetMapping("/strictQuery") public ResponseEntity<List<ConsultantDTO>> strictQueryConsultant(@RequestBody StrictQueryConsultantParam param) { List<ConsultantDTO> queryResult = consultantService.strictQueryConsultant(param); return new ResponseEntity<>(queryResult, HttpStatus.OK); } @GetMapping("/fastQuery") public ResponseEntity<List<ConsultantDTO>> fastQueryConsultant(@RequestBody FastQueryConsultantParam param) { List<ConsultantDTO> queryResult = consultantService.fastQueryConsultant(param); return new ResponseEntity<>(queryResult, HttpStatus.OK); } @GetMapping("/{agentNo}") public ResponseEntity<ConsultantDetailDTO> getConsultantDetail(@PathVariable String agentNo) { ConsultantDetailDTO result = consultantService.getConsultantDetail(agentNo); return new ResponseEntity<>(result, HttpStatus.OK); } } pamapi/src/main/java/com/pollex/pam/web/rest/errors/ConsultantNotFoundException.java
比對新檔案 @@ -0,0 +1,8 @@ package com.pollex.pam.web.rest.errors; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "Consultant not found") public class ConsultantNotFoundException extends RuntimeException{ }