Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import br.edu.utfpr.servicebook.model.entity.*;
import br.edu.utfpr.servicebook.model.mapper.*;
import br.edu.utfpr.servicebook.security.IAuthentication;
import br.edu.utfpr.servicebook.security.ProfileEnum;
import br.edu.utfpr.servicebook.security.RoleType;
import br.edu.utfpr.servicebook.service.*;
import br.edu.utfpr.servicebook.sse.EventSSE;
Expand All @@ -23,16 +24,19 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.annotation.security.RolesAllowed;
import javax.persistence.EntityNotFoundException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -98,6 +102,8 @@ public class CompanyController {

@Autowired
private PaginationUtil paginationUtil;
@Autowired
private IndividualService individualService;

@GetMapping
@RolesAllowed({RoleType.COMPANY})
Expand Down Expand Up @@ -154,8 +160,7 @@ public ModelAndView newProfessional(@RequestParam(required = false, defaultValue
Optional<Long> oProfessionalFollowingAmount = followsService.countByProfessional(oProfessional.get());
professionalDTO.setFollowingAmount(oProfessionalFollowingAmount.get());
UserTemplateInfo individualInfo = templateUtil.getUserInfo(professionalDTO);
UserTemplateStatisticInfo statisticInfo = templateUtil.getProfessionalStatisticInfo(oProfessional.get(), expertiseId.get());
mv.addObject("userInfo", individualInfo);
mv.addObject("individualInfo", individualInfo);

List<ProfessionalExpertise> professionalExpertises = professionalExpertiseService.findByProfessional(oProfessional.get());
List<ExpertiseDTO> expertiseDTOs = professionalExpertises.stream()
Expand All @@ -172,12 +177,22 @@ public ModelAndView newProfessional(@RequestParam(required = false, defaultValue
.collect(Collectors.toList());

UserDTO professionalDTO1 = userMapper.toDto(oProfessional.get());
List<User> users = userService.findProfessionalsNotExist();

List<User> professionPage = userService.findProfessionalsNotExist();

List<UserDTO> professionDTOs = professionPage.stream()
.map(s -> userMapper.toDto(s))
.collect(Collectors.toList());

mv.addObject("eventsse", eventSSEDTOs);
mv.addObject("expertises", expertiseDTOs);
mv.addObject("userInfo", individualInfo);
// mv.addObject("expertises", professionDTOs);
mv.addObject("individualInfo", individualInfo);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Verifique que agora é userInfo, para servir tanto para individual como para company.
  • Porém, este objeto já está sendo setado no TemplateInfoFilter, assim, não precisa passar no controller.
  • O statisticInfo também é importante, parece que você removeu. Contém as estatísticas para apresentar no painel lateral do profissional e empresa.

mv.addObject("professionalDTO1", professionalDTO1);
mv.addObject("statisticInfo", statisticInfo);
mv.addObject("cities", users);
mv.addObject("company", true);
mv.addObject("expertises", expertiseDTOs);

return mv;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
package br.edu.utfpr.servicebook.controller;

import br.edu.utfpr.servicebook.model.dto.*;
import br.edu.utfpr.servicebook.model.entity.*;
import br.edu.utfpr.servicebook.model.mapper.*;
import br.edu.utfpr.servicebook.model.repository.UserRepository;
import br.edu.utfpr.servicebook.security.IAuthentication;
import br.edu.utfpr.servicebook.security.RoleType;
import br.edu.utfpr.servicebook.service.*;
import br.edu.utfpr.servicebook.sse.EventSSE;
import br.edu.utfpr.servicebook.sse.EventSSEDTO;
import br.edu.utfpr.servicebook.sse.EventSseMapper;
import br.edu.utfpr.servicebook.sse.SSEService;
import br.edu.utfpr.servicebook.util.TemplateUtil;
import br.edu.utfpr.servicebook.util.UserTemplateInfo;
import br.edu.utfpr.servicebook.util.UserTemplateStatisticInfo;
import com.cloudinary.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;

import javax.annotation.security.RolesAllowed;
import javax.persistence.EntityNotFoundException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@RequestMapping("/minha-conta/empresa/profissionais")
@Controller
public class CompanyProfessionalController {
public static final Logger log = LoggerFactory.getLogger(CompanyProfessionalController.class);
@Autowired
private UserService userService;

@Autowired
private CompanyProfessionalService companyProfessionalService;

@Autowired
private IAuthentication authentication;

@Autowired
private UserMapper userMapper;

@Autowired
private CompanyProfessionalMapper companyProfessionalMapper;

@Autowired
private TemplateUtil templateUtil;

@Autowired
private UserRepository userRepository;

@Autowired
private QuartzService quartzService;

@Autowired
private UserCodeMapper userCodeMapper;

@Autowired
private UserCodeService userCodeService;

@Autowired
private UserTokenMapper userTokenMapper;

@Autowired
private UserTokenService userTokenService;

@Autowired
private StateService stateService;

@Autowired
private SSEService sseService;

@Autowired
private EventSseMapper eventSseMapper;
@Autowired
private ProfessionalExpertiseService professionalExpertiseService;
@Autowired
private ExpertiseService expertiseService;

@Autowired
private ExpertiseMapper expertiseMapper;

/**
* Apresenta a tela para a empresa adicionar profissionais.
* @param id
* @return
* @throws Exception
*/
@GetMapping()
@RolesAllowed({RoleType.COMPANY})
public ModelAndView showProfessionals(@RequestParam(required = false, defaultValue = "0") Optional<Long> expertiseId) throws Exception {

User company = this.getCompany();
UserDTO professionalMinDTO = userMapper.toDto(company);

ModelAndView mv = new ModelAndView("company/new-professional");

UserTemplateInfo userTemplateInfo = templateUtil.getUserInfo(professionalMinDTO);
UserTemplateStatisticInfo sidePanelStatisticDTO = templateUtil.getCompanyStatisticInfo(company, expertiseId.get());

mv.addObject("statisticInfo", sidePanelStatisticDTO);

mv.addObject("id", expertiseId.orElse(0L));

List<User> professionals = userService.findProfessionalsNotExist();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Está buscando todos os profissionais, não é o correto para o auto-complete. Imagine se tiver 100k de usuários. Deveria usar um like do SQL para buscar de acordo com os termos digitados. Limitar, trazer apenas umas 5 sugestões.


List<CompanyProfessional> companyProfessionals = companyProfessionalService.findByCompany(company.getId());

List<CompanyProfessionalDTO2> companyProfessionalDTO2s = companyProfessionals.stream()
.map(s -> companyProfessionalMapper.toResponseDTO(s))
.collect(Collectors.toList());

Optional<User> oProfessional = (userService.findByEmail(authentication.getEmail()));

UserTemplateInfo individualInfo = templateUtil.getUserInfo(professionalMinDTO);

//envia a notificação ao usuário
List<EventSSE> eventSsesList = sseService.findPendingEventsByEmail(authentication.getEmail());
List<EventSSEDTO> eventSSEDTOs = eventSsesList.stream()
.map(eventSse -> {
return eventSseMapper.toFullDto(eventSse);
})
.collect(Collectors.toList());
List<ProfessionalExpertise> professionalExpertises = professionalExpertiseService.findByProfessional(oProfessional.get());

List<ExpertiseDTO> expertiseDTOs = professionalExpertises.stream()
.map(professionalExpertise -> professionalExpertise.getExpertise())
.map(expertise -> expertiseMapper.toDto(expertise))
.collect(Collectors.toList());


mv.addObject("professionals", professionals);
mv.addObject("professionalCompanies", companyProfessionalDTO2s);
mv.addObject("statisticInfo", sidePanelStatisticDTO);
mv.addObject("eventsse", eventSSEDTOs);
mv.addObject("expertises", expertiseDTOs);
mv.addObject("company", true);

return mv;
}

@PostMapping()
@RolesAllowed({RoleType.COMPANY})
public ModelAndView saveProfessionals(@Valid CompanyProfessionalDTO dto, BindingResult errors, RedirectAttributes redirectAttributes) throws Exception {

ModelAndView mv = new ModelAndView("redirect:profissionais");
String ids = dto.getIds();
User company = this.getCompany();
Optional<User> company_name = userService.findById(company.getId());
Optional<User> oCompany = (userService.findByEmail(authentication.getEmail()));

Optional<User> oProfessional = userService.findByEmail(ids);
if(!oProfessional.isPresent()){
Random random = new Random();
int numberRandom = random.nextInt(100 - 1) + 1;

String token = "RP0"+company.getId()+numberRandom;
UserTokenDTO userTokenDTO = new UserTokenDTO();
userTokenDTO.setUser(company);
userTokenDTO.setEmail(ids);
userTokenDTO.setToken(token);
UserToken userToken = userTokenMapper.toEntity(userTokenDTO);

userTokenService.save(userToken);

String tokenLink = ServletUriComponentsBuilder.fromCurrentContextPath().build().toString()
+ "/cadastrar-se?passo-1&code="+token;

quartzService.sendEmailToRegisterUser(dto.getIds(), company.getName(), tokenLink);
Optional<UserToken> optionalUserToken = userTokenService.findByEmail(ids);

// CompanyProfessional p = companyProfessionalService.save(new CompanyProfessional(company, dto.getIds()));
// redirectAttributes.addFlashAttribute("msg", "Convite enviado para usuário, aguardando confirmação!");

} else {
String tokenLink = ServletUriComponentsBuilder.fromCurrentContextPath().build().toString() + "/confirmar?empresa=" + company_name.get().getName() +"&email=" + dto.getIds();
quartzService.sendEmailWithConfirmationUser(dto.getIds(), company.getName(), tokenLink);

Optional<CompanyProfessional> optionalCompanyProfessional = companyProfessionalService.findByCompanyAndProfessional(company, oProfessional.get());

if(!optionalCompanyProfessional.isPresent()){
CompanyProfessional p = companyProfessionalService.save(new CompanyProfessional(company, oProfessional.get(), false));
redirectAttributes.addFlashAttribute("msg", "Convite enviado para usuário, aguardando confirmação!");
} else {
redirectAttributes.addFlashAttribute("msg", "Usuário ja está na empresa!");
}
}
return mv;
}

@DeleteMapping("/{id}")
@RolesAllowed({RoleType.COMPANY})
@Transactional
public String delete(@PathVariable User id, RedirectAttributes redirectAttributes) throws Exception {
User company = this.getCompany();
Optional<User> oProfessional = userService.findById(id.getId());

Optional<CompanyProfessional> optionalCompanyProfessional = companyProfessionalService.findByCompanyAndProfessional(company, oProfessional.get());

if (optionalCompanyProfessional.get().getProfessional().getId().equals(id.getId())) {
this.companyProfessionalService.delete(optionalCompanyProfessional.get().getId());
}
return "redirect:/minha-conta/empresa/profissionais";
}

/**
* Retorna a empresa logado.
* @return
* @throws Exception
*/
private User getCompany() throws Exception {
Optional<User> oCompany = (userService.findByEmail(authentication.getEmail()));

if (!oCompany.isPresent()) {
throw new Exception("Opss! Não foi possivel encontrar seus dados, tente fazer login novamente");
}

return oCompany.get();
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package br.edu.utfpr.servicebook.controller;

import br.edu.utfpr.servicebook.model.entity.City;
import br.edu.utfpr.servicebook.model.entity.Company;
import br.edu.utfpr.servicebook.model.entity.CompanyProfessional;
import br.edu.utfpr.servicebook.model.entity.User;
import br.edu.utfpr.servicebook.model.entity.UserToken;
import br.edu.utfpr.servicebook.model.mapper.UserTokenMapper;
import br.edu.utfpr.servicebook.security.IAuthentication;
import br.edu.utfpr.servicebook.service.*;

Expand All @@ -13,9 +15,13 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.annotation.security.PermitAll;
import javax.persistence.EntityNotFoundException;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -47,6 +53,14 @@ public class IndexController {
@Autowired
private IAuthentication authentication;

@Autowired
private CompanyProfessionalService companyProfessionalService;

@Autowired
private UserTokenService userTokenService;

@Autowired
private UserTokenMapper userTokenMapper;
@GetMapping
@PermitAll
public ModelAndView showIndexPage() {
Expand Down Expand Up @@ -86,4 +100,40 @@ public String showHowWorks() {
return "visitor/how-works";
}

@GetMapping("/confirmar")
@PermitAll
public ModelAndView saveProfessionalsConfirm(
@RequestParam(value = "code", required = false) String token,
HttpSession httpSession,
RedirectAttributes redirectAttributes
) throws Exception{
if(token != null){
UserToken userToken = userTokenService.findByUserToken(token);

Optional<User> oProfessional = userService.findByEmail(userToken.getEmail());

if(!oProfessional.isPresent()){
throw new EntityNotFoundException("O usuário não foi encontrado!");
}

User user_professional = oProfessional.get();
user_professional.setConfirmed(true);
userService.save(user_professional);

if(user_professional.isConfirmed()){
Optional<CompanyProfessional> companyProfessional = companyProfessionalService.findByCompanyAndProfessional(userToken.getUser(), oProfessional.get());

CompanyProfessional companyProfessional1 = companyProfessional.get();
companyProfessional1.setConfirmed(true);
companyProfessionalService.save(companyProfessional1);
// CompanyProfessional p = companyProfessionalService.save(new CompanyProfessional(userToken.getUser(), oProfessional.get()));
}

redirectAttributes.addFlashAttribute("msg", "Você foi incluido na empresa com sucesso!");
} else {
redirectAttributes.addFlashAttribute("msg", "Token não existe!");
}

return new ModelAndView("redirect:/");
}
}
Loading