From 0c4e6d48d7186a9e92151a114e89c8ddc42616e6 Mon Sep 17 00:00:00 2001 From: viniciosarodrigues Date: Fri, 22 May 2020 20:59:33 -0300 Subject: [PATCH 1/3] =?UTF-8?q?doc:=20atualiza=C3=A7=C3=A3o=20da=20documen?= =?UTF-8?q?ta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 787af9f9..94dd7de2 100644 --- a/README.md +++ b/README.md @@ -45,13 +45,13 @@ Atualmente encontra-se na versão 1.0.0 - [x] Cadastro de Eventos (Consultas, exames, prescriçoes, etc) - [x] Cadastro de Usuários - [x] Controle de Acesso -- [ ] Armazenamento de documentos (Resultado de exames, radiografia, tumografia, etc) +- [x] Armazenamento de documentos (Resultado de exames, radiografia, tumografia, etc) - [x] Histórico de visita em forma de timeline -- [ ] Relatórios +- [x] Relatórios - [x] Paciente não identificado -- [ ] Fluxo padrão para atendimento ambulatorial -- [ ] Fluxo padrão para atendimento emergencial -- [ ] Cadastro de medicamentos +- [x] Fluxo padrão para atendimento ambulatorial +- [x] Fluxo padrão para atendimento emergencial +- [ ] Cadastro de medicamentos e materiais --- @@ -59,11 +59,10 @@ Atualmente encontra-se na versão 1.0.0 Para rodar o projeto, existem alguns requisítos mínimos de configurações, são eles: -- Java 11 + **(Obrigatório)** -- MySql Server ou MariaDB Server **(Obrigatório)** -- Lombok 1.16.0 + **(Obrigatório)** +- Java 14 + **(Obrigatório)** +- MariaDB Server 10.3+ **(Obrigatório)** +- Lombok 1.18.0 + **(Obrigatório)** - Eclipse ou STS **(Obrigatório)** -- No caso do Eclipse, usar o plugin do Spring Tools *(Opcional)* --- @@ -190,6 +189,8 @@ Esta área especifica definições técnicas da aplicação, suas característic > Você pode me encontrar por aqui... +- NiV Labs :: [NiV Labs](http://www.nivlabs.com.br) +- Atendimento :: [atendimento@nivlabs.com.br](atendimento@nivlabs.com.br) - Linkedin :: [Vinícios Rodrigues](https://www.linkedin.com/in/viniciosrodrigues/) - Instagram :: [@viniarodrigues](https://www.instagram.com/viniarodrigues/) - Hangouts/Gmail :: [viniciosarodrigues@gmail.com](viniciosarodrigues@gmail.com) From ca2cfcb058c5bcfb5ee3f26b698aa51dd604cef5 Mon Sep 17 00:00:00 2001 From: viniciosarodrigues Date: Sat, 23 May 2020 17:00:17 -0300 Subject: [PATCH 2/3] =?UTF-8?q?doc:=20cria=C3=A7=C3=A3o=20de=20profile=20p?= =?UTF-8?q?ara=20produ=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-local.properties | 4 ---- ...cation-heroku.properties => application-prod.properties} | 0 src/main/resources/application.properties | 6 +++--- 3 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 src/main/resources/application-local.properties rename src/main/resources/{application-heroku.properties => application-prod.properties} (100%) diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties deleted file mode 100644 index f46692c2..00000000 --- a/src/main/resources/application-local.properties +++ /dev/null @@ -1,4 +0,0 @@ -## String de conexão com usuário, senha, host, porta e banco de dados -spring.datasource.url=${URL_DB} -## Jwt Settings -jwt.secret=${JWT_SECRET_KEY} \ No newline at end of file diff --git a/src/main/resources/application-heroku.properties b/src/main/resources/application-prod.properties similarity index 100% rename from src/main/resources/application-heroku.properties rename to src/main/resources/application-prod.properties diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 150e6ba9..f55ef7db 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -spring.profiles.active=heroku +spring.profiles.active=prod # =============================== # = Configurações do Hibernate @@ -15,8 +15,8 @@ spring.jackson.default-property-inclusion = NON_NULL spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.format_sql=none -swagger.owner.url=http://www.nivsoft.com.br/ -swagger.owner.name=FT - Gestao de Prontuario +swagger.owner.url=http://www.nivlabs.com.br/ +swagger.owner.name=NiV Labs - Gestao de Prontuario ## Multipart config spring.servlet.multipart.max-file-size=15MB From 7f9780697cb0dbcb4a795a69466ada220dd27fc4 Mon Sep 17 00:00:00 2001 From: viniciosarodrigues Date: Sat, 23 May 2020 17:59:25 -0300 Subject: [PATCH 3/3] =?UTF-8?q?att:=20Atualiza=C3=A7=C3=A3o=20de=20documen?= =?UTF-8?q?ta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +- .../gp/controller/ProfileController.java | 2 +- .../nivlabs/gp/controller/UserController.java | 4 +- .../com/nivlabs/gp/service/UserService.java | 502 +++++++++--------- .../nivlabs/gp/service/VisitEventService.java | 2 +- 5 files changed, 261 insertions(+), 266 deletions(-) diff --git a/README.md b/README.md index 94dd7de2..3f0779c0 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@

- TLGP Logo + NLGP Logo

- TL - Gestão de Prontuário - API + NiV Labs - Gestão de Prontuário - API

-O TL - Gestão de Prontuário - API (TLGP-API) é uma API Rest OpenSource criada inicialmente como doação para hospitais que não possuem nenhuma solução de automação no processo de prontuário. O TLGP-API é integrado com um client baseado em Angular, o [TLGP-UI](https://github.com/viniciosarodrigues/gestao-de-prontuario-ui). +O NLGP-API é uma API Rest criada inicialmente como doação para hospitais que não possuem nenhuma solução de automação no processo de prontuário. O NLGP-API é integrado com um client baseado em Angular, o [NLGP-UI](https://github.com/niv-labs/gestao-de-prontuario-ui).

- - Made by Vinícios Rodrigues + + Made by NiV Labs - Last Commit - Contributors + Last Commit + Contributors License

@@ -191,9 +191,6 @@ Esta área especifica definições técnicas da aplicação, suas característic - NiV Labs :: [NiV Labs](http://www.nivlabs.com.br) - Atendimento :: [atendimento@nivlabs.com.br](atendimento@nivlabs.com.br) -- Linkedin :: [Vinícios Rodrigues](https://www.linkedin.com/in/viniciosrodrigues/) -- Instagram :: [@viniarodrigues](https://www.instagram.com/viniarodrigues/) -- Hangouts/Gmail :: [viniciosarodrigues@gmail.com](viniciosarodrigues@gmail.com) --- diff --git a/src/main/java/br/com/nivlabs/gp/controller/ProfileController.java b/src/main/java/br/com/nivlabs/gp/controller/ProfileController.java index 1c06a7f3..77213130 100644 --- a/src/main/java/br/com/nivlabs/gp/controller/ProfileController.java +++ b/src/main/java/br/com/nivlabs/gp/controller/ProfileController.java @@ -48,7 +48,7 @@ public ResponseEntity updateMe(@PathVariable(name = "id") Long id, validUserToUpdate(entity, userFromSession); - UserInfoDTO userUpdated = userService.update(id, entity); + UserInfoDTO userUpdated = userService.updateFromDto(id, entity); return ResponseEntity.ok(userUpdated); } diff --git a/src/main/java/br/com/nivlabs/gp/controller/UserController.java b/src/main/java/br/com/nivlabs/gp/controller/UserController.java index d0676a02..0a438607 100644 --- a/src/main/java/br/com/nivlabs/gp/controller/UserController.java +++ b/src/main/java/br/com/nivlabs/gp/controller/UserController.java @@ -56,14 +56,14 @@ public ResponseEntity> findPage(UserFilters filters) { @GetMapping("/{id}") @PreAuthorize("hasAnyRole('ADMIN')") public ResponseEntity findById(@PathVariable(name = "id") Long id) { - return ResponseEntity.ok(userService.findById(id)); + return ResponseEntity.ok(userService.findUserDtoById(id)); } @ApiOperation(nickname = "user-put", value = "Atualiza dados do usuário selecionado") @PutMapping("/{id}") @PreAuthorize("hasAnyRole('ADMIN')") public ResponseEntity update(@PathVariable(name = "id") Long id, @Validated @RequestBody UserInfoDTO entity) { - return ResponseEntity.ok(userService.update(id, entity)); + return ResponseEntity.ok(userService.updateFromDto(id, entity)); } @ApiOperation(nickname = "user-post", value = "Cria o cadastro de usuário") diff --git a/src/main/java/br/com/nivlabs/gp/service/UserService.java b/src/main/java/br/com/nivlabs/gp/service/UserService.java index 64a22d33..56c63403 100644 --- a/src/main/java/br/com/nivlabs/gp/service/UserService.java +++ b/src/main/java/br/com/nivlabs/gp/service/UserService.java @@ -21,7 +21,6 @@ import br.com.nivlabs.gp.models.domain.Role; import br.com.nivlabs.gp.models.domain.UserApplication; import br.com.nivlabs.gp.models.dto.AddressDTO; -import br.com.nivlabs.gp.models.dto.DataTransferObjectBase; import br.com.nivlabs.gp.models.dto.DocumentDTO; import br.com.nivlabs.gp.models.dto.RoleDTO; import br.com.nivlabs.gp.models.dto.UserDTO; @@ -39,255 +38,254 @@ @Service public class UserService { - @Autowired - private UserRepository userRepo; - @Autowired - private PersonService personService; - @Autowired - private BCryptPasswordEncoder bc; - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - /** - * Busca um usuário por nome de usuário - * - * @param username - * @return - */ - public UserInfoDTO findByUserName(String username) { - UserApplication entityFromDb = userRepo.findByUserName(username).orElseThrow(() -> new ObjectNotFoundException( - "Usuário não encontrado! Username: " + username + ", tipo " + UserApplication.class.getName())); - - UserInfoDTO responseDTO = new UserInfoDTO(); - - Person person = entityFromDb.getPerson(); - BeanUtils.copyProperties(person, responseDTO, "id"); - BeanUtils.copyProperties(entityFromDb, responseDTO); - responseDTO.setDocument(new DocumentDTO(DocumentType.CPF, person.getCpf())); - - if (person.getAddress() != null) { - AddressDTO address = new AddressDTO(); - BeanUtils.copyProperties(person.getAddress(), address); - responseDTO.setAddress(address); - } - - return responseDTO; - } - - public Page searchEntityPage(UserFilters filters, Pageable pageSettings) { - return userRepo.resumedList(filters, pageSettings); - } - - public UserInfoDTO findById(Long id) { - UserApplication userFromDb = userRepo.findById(id).orElseThrow(() -> new ObjectNotFoundException( - "Usuário não encontrado! Id: " + id + ", tipo " + UserApplication.class.getName())); - - UserInfoDTO response = new UserInfoDTO(); - - BeanUtils.copyProperties(userFromDb.getPerson(), response); - - if (userFromDb.getPerson().getAddress() != null) { - AddressDTO address = new AddressDTO(); - BeanUtils.copyProperties(userFromDb.getPerson().getAddress(), address); - response.setAddress(address); - } - - response.setDocument(new DocumentDTO(DocumentType.CPF, userFromDb.getPerson().getCpf())); - - if (userFromDb.getRoles() != null && !userFromDb.getRoles().isEmpty()) { - response.setRoles(userFromDb.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); - } - - BeanUtils.copyProperties(userFromDb, response); - - return response; - } - - public DataTransferObjectBase persist(UserApplication entity) { - return null; - } - - /** - * Atualiza ou cria informações de usuários - * - * @param userId - * @param entity - * @return - */ - public UserInfoDTO update(Long userId, UserInfoDTO entity) { - UserApplication entityFromDb = userRepo.findByUserName(entity.getUserName()).orElseThrow(() -> new ObjectNotFoundException( - "Usuário não encontrado! Username: " + entity.getUserName() + ", tipo " + UserApplication.class.getName())); - - entityFromDb.setPerson(getPersonFromUserInfo(entityFromDb.getPerson(), entity)); - BeanUtils.copyProperties(entity, entityFromDb); - - entityFromDb.setRoles(Arrays.asList()); - if (entity.getRoles() != null && !entity.getRoles().isEmpty()) { - entityFromDb.setRoles(entity.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); - } - - userRepo.saveAndFlush(entityFromDb); - - return entity; - } - - /** - * Converte um papel vindo da requisição em um papel de domínio - * - * @param roleDTO - * @return - */ - private Role convertRole(RoleDTO roleDTO) { - return new Role(roleDTO.getId(), roleDTO.getName(), roleDTO.getDescription()); - } - - /** - * Convert um papel vindo do banco em um papel de resposta - * - * @param role - * @return - */ - private RoleDTO convertRole(Role role) { - return new RoleDTO(role.getId(), role.getName(), role.getDescription()); - } - - /** - * - * Trata uma pessoa já existente na base à partir do DTO - * - * @param entity - * @return - */ - private Person getPersonFromUserInfo(Person personToUpdate, UserInfoDTO entity) { - BeanUtils.copyProperties(entity, personToUpdate, "id"); - if (entity.getAddress() != null) { - if (personToUpdate.getAddress() == null) { - PersonAddress newAddress = new PersonAddress(); - newAddress.setPerson(personToUpdate); - personToUpdate.setAddress(newAddress); - } - BeanUtils.copyProperties(entity.getAddress(), personToUpdate.getAddress()); - } - - if (entity.getDocument().getType() != DocumentType.CPF) { - throw new ValidationException("O tipo do documento deve ser CPF"); - } - personToUpdate.setCpf(entity.getDocument().getValue()); - - return personToUpdate; - } - - public UserInfoDTO findPersonByCpf(String cpf) { - Person personFromDb = personService.findByCpf(cpf); - - UserInfoDTO userInfo = new UserInfoDTO(); - BeanUtils.copyProperties(personFromDb, userInfo, "id"); - userInfo.setDocument(new DocumentDTO(DocumentType.CPF, personFromDb.getCpf())); - - if (personFromDb.getAddress() != null) { - AddressDTO address = new AddressDTO(); - BeanUtils.copyProperties(personFromDb.getAddress(), address); - userInfo.setAddress(address); - } - - return userInfo; - } - - public UserInfoDTO findByCpf(String cpf) { - try { - UserApplication user = userRepo.findByCpf(cpf) - .orElseThrow(() -> new ObjectNotFoundException(String.format("Usuário com cpf: [%s] não encontrado", cpf))); - Person personFromDb = user.getPerson(); - - UserInfoDTO userInfo = new UserInfoDTO(); - BeanUtils.copyProperties(personFromDb, userInfo, "id"); - BeanUtils.copyProperties(user, userInfo); - userInfo.setDocument(new DocumentDTO(DocumentType.CPF, personFromDb.getCpf())); - - if (personFromDb.getAddress() != null) { - AddressDTO address = new AddressDTO(); - BeanUtils.copyProperties(personFromDb.getAddress(), address); - userInfo.setAddress(address); - } - - userInfo.setId(userInfo.getId()); - return userInfo; - } catch (ObjectNotFoundException e) { - return findPersonByCpf(cpf); - } - } - - private void userCheckIfExists(UserInfoDTO entity) { - try { - logger.info("Verificando se já há cadastro de usuário na base de dados :: CPF da busca -> {}", - entity.getDocument().getValue()); - UserInfoDTO user = findByCpf(entity.getDocument().getValue()); - if (user != null && user.getId() != null) { - logger.warn("Usuário com o CPF {} já cadastrado.", entity.getDocument().getValue()); - throw new ValidationException(String.format("Usuário com o CPF %s já cadastrado.", entity.getDocument().getValue())); - } - user = findByUserName(entity.getUserName()); - - if (user != null && user.getId() != null) { - logger.warn("Nome de usuário {} já cadastrado.", entity.getUserName()); - throw new ValidationException(String.format("Nome de usuário %s já cadastrado.", entity.getUserName())); - } - } catch (ObjectNotFoundException e) { - logger.info("Nenhum cadastro de usuário encontrado :: CPF da busca -> {}", - entity.getDocument().getValue()); - logger.info("Continuando cadastro de usuário..."); - } - } - - public UserInfoDTO create(UserInfoDTO entity) { - entity.setId(null); - - Person personFromDb; - if (entity.getDocument() == null || (entity.getDocument() != null && entity.getDocument().getType() != DocumentType.CPF)) { - logger.error("Tipo do documento inválido, informe um documento válido"); - throw new ValidationException("Tipo do documento inválido, informe um documento válido."); - } - userCheckIfExists(entity); - try { - logger.info("Verificando se já existe um cadastro anexado ao documento informado..."); - personFromDb = personService.findByCpf(entity.getDocument().getValue()); - } catch (ObjectNotFoundException e) { - logger.info("Nenhum cadastro encontrado :: Criando um novo cadastro de Pessoa no documento :: TIPO: {} | VALOR: {}", - entity.getDocument().getType(), entity.getDocument().getValue()); - personFromDb = new Person(); - } - - logger.info("Copiando as propriedades da requisição para o obijeto de negócio..."); - BeanUtils.copyProperties(entity, personFromDb, "id"); - personFromDb.setCpf(entity.getDocument().getValue()); - - logger.info("Verificando e-mail"); - if (entity.getAddress() != null) { - AddressDTO address = entity.getAddress(); - PersonAddress personAddress = new PersonAddress(); - if (personFromDb.getAddress() != null) - personAddress = personFromDb.getAddress(); - BeanUtils.copyProperties(address, personAddress, "id"); - personAddress.setPerson(personFromDb); - personFromDb.setAddress(personAddress); - } - - if (personFromDb.getId() != null) - personService.update(personFromDb.getId(), personFromDb); - else - personService.persist(personFromDb); - - UserApplication user = new UserApplication(); - BeanUtils.copyProperties(entity, user); - user.setPerson(personFromDb); - user.setPassword(bc.encode(entity.getDocument().getValue())); - user.setCreatedAt(LocalDateTime.now()); - user.setActive(true); - if (entity.getRoles() != null && !entity.getRoles().isEmpty()) { - user.setRoles(entity.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); - } - userRepo.save(user); - - entity.setId(user.getId()); - return entity; - } + @Autowired + private UserRepository userRepo; + @Autowired + private PersonService personService; + @Autowired + private BCryptPasswordEncoder bc; + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * Busca um usuário por nome de usuário + * + * @param username + * @return + */ + public UserInfoDTO findByUserName(String username) { + UserApplication entityFromDb = userRepo.findByUserName(username).orElseThrow(() -> new ObjectNotFoundException( + "Usuário não encontrado! Username: " + username + ", tipo " + UserApplication.class.getName())); + + UserInfoDTO responseDTO = new UserInfoDTO(); + + Person person = entityFromDb.getPerson(); + BeanUtils.copyProperties(person, responseDTO, "id"); + BeanUtils.copyProperties(entityFromDb, responseDTO); + responseDTO.setDocument(new DocumentDTO(DocumentType.CPF, person.getCpf())); + + if (person.getAddress() != null) { + AddressDTO address = new AddressDTO(); + BeanUtils.copyProperties(person.getAddress(), address); + responseDTO.setAddress(address); + } + + return responseDTO; + } + + public Page searchEntityPage(UserFilters filters, Pageable pageSettings) { + return userRepo.resumedList(filters, pageSettings); + } + + public UserInfoDTO findUserDtoById(Long id) { + UserApplication userFromDb = userRepo.findById(id).orElseThrow(() -> new ObjectNotFoundException( + "Usuário não encontrado! Id: " + id + ", tipo " + UserApplication.class.getName())); + + UserInfoDTO response = new UserInfoDTO(); + + BeanUtils.copyProperties(userFromDb.getPerson(), response); + + if (userFromDb.getPerson().getAddress() != null) { + AddressDTO address = new AddressDTO(); + BeanUtils.copyProperties(userFromDb.getPerson().getAddress(), address); + response.setAddress(address); + } + + response.setDocument(new DocumentDTO(DocumentType.CPF, userFromDb.getPerson().getCpf())); + + if (userFromDb.getRoles() != null && !userFromDb.getRoles().isEmpty()) { + response.setRoles(userFromDb.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); + } + + BeanUtils.copyProperties(userFromDb, response); + + return response; + } + + /** + * Atualiza ou cria informações de usuários + * + * @param userId + * @param entity + * @return + */ + public UserInfoDTO updateFromDto(Long userId, UserInfoDTO entity) { + UserApplication entityFromDb = userRepo.findByUserName(entity.getUserName()) + .orElseThrow(() -> new ObjectNotFoundException("Usuário não encontrado! Username: " + + entity.getUserName() + ", tipo " + UserApplication.class.getName())); + + entityFromDb.setPerson(getPersonFromUserInfo(entityFromDb.getPerson(), entity)); + BeanUtils.copyProperties(entity, entityFromDb); + + entityFromDb.setRoles(Arrays.asList()); + if (entity.getRoles() != null && !entity.getRoles().isEmpty()) { + entityFromDb.setRoles(entity.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); + } + + userRepo.saveAndFlush(entityFromDb); + + return entity; + } + + /** + * Converte um papel vindo da requisição em um papel de domínio + * + * @param roleDTO + * @return + */ + private Role convertRole(RoleDTO roleDTO) { + return new Role(roleDTO.getId(), roleDTO.getName(), roleDTO.getDescription()); + } + + /** + * Convert um papel vindo do banco em um papel de resposta + * + * @param role + * @return + */ + private RoleDTO convertRole(Role role) { + return new RoleDTO(role.getId(), role.getName(), role.getDescription()); + } + + /** + * + * Trata uma pessoa já existente na base à partir do DTO + * + * @param entity + * @return + */ + private Person getPersonFromUserInfo(Person personToUpdate, UserInfoDTO entity) { + BeanUtils.copyProperties(entity, personToUpdate, "id"); + if (entity.getAddress() != null) { + if (personToUpdate.getAddress() == null) { + PersonAddress newAddress = new PersonAddress(); + newAddress.setPerson(personToUpdate); + personToUpdate.setAddress(newAddress); + } + BeanUtils.copyProperties(entity.getAddress(), personToUpdate.getAddress()); + } + + if (entity.getDocument().getType() != DocumentType.CPF) { + throw new ValidationException("O tipo do documento deve ser CPF"); + } + personToUpdate.setCpf(entity.getDocument().getValue()); + + return personToUpdate; + } + + public UserInfoDTO findPersonByCpf(String cpf) { + Person personFromDb = personService.findByCpf(cpf); + + UserInfoDTO userInfo = new UserInfoDTO(); + BeanUtils.copyProperties(personFromDb, userInfo, "id"); + userInfo.setDocument(new DocumentDTO(DocumentType.CPF, personFromDb.getCpf())); + + if (personFromDb.getAddress() != null) { + AddressDTO address = new AddressDTO(); + BeanUtils.copyProperties(personFromDb.getAddress(), address); + userInfo.setAddress(address); + } + + return userInfo; + } + + public UserInfoDTO findByCpf(String cpf) { + try { + UserApplication user = userRepo.findByCpf(cpf).orElseThrow( + () -> new ObjectNotFoundException(String.format("Usuário com cpf: [%s] não encontrado", cpf))); + Person personFromDb = user.getPerson(); + + UserInfoDTO userInfo = new UserInfoDTO(); + BeanUtils.copyProperties(personFromDb, userInfo, "id"); + BeanUtils.copyProperties(user, userInfo); + userInfo.setDocument(new DocumentDTO(DocumentType.CPF, personFromDb.getCpf())); + + if (personFromDb.getAddress() != null) { + AddressDTO address = new AddressDTO(); + BeanUtils.copyProperties(personFromDb.getAddress(), address); + userInfo.setAddress(address); + } + + userInfo.setId(userInfo.getId()); + return userInfo; + } catch (ObjectNotFoundException e) { + return findPersonByCpf(cpf); + } + } + + private void userCheckIfExists(UserInfoDTO entity) { + try { + logger.info("Verificando se já há cadastro de usuário na base de dados :: CPF da busca -> {}", + entity.getDocument().getValue()); + UserInfoDTO user = findByCpf(entity.getDocument().getValue()); + if (user != null && user.getId() != null) { + logger.warn("Usuário com o CPF {} já cadastrado.", entity.getDocument().getValue()); + throw new ValidationException( + String.format("Usuário com o CPF %s já cadastrado.", entity.getDocument().getValue())); + } + user = findByUserName(entity.getUserName()); + + if (user != null && user.getId() != null) { + logger.warn("Nome de usuário {} já cadastrado.", entity.getUserName()); + throw new ValidationException(String.format("Nome de usuário %s já cadastrado.", entity.getUserName())); + } + } catch (ObjectNotFoundException e) { + logger.info("Nenhum cadastro de usuário encontrado :: CPF da busca -> {}", entity.getDocument().getValue()); + logger.info("Continuando cadastro de usuário..."); + } + } + + public UserInfoDTO create(UserInfoDTO entity) { + entity.setId(null); + + Person personFromDb; + if (entity.getDocument() == null + || (entity.getDocument() != null && entity.getDocument().getType() != DocumentType.CPF)) { + logger.error("Tipo do documento inválido, informe um documento válido"); + throw new ValidationException("Tipo do documento inválido, informe um documento válido."); + } + userCheckIfExists(entity); + try { + logger.info("Verificando se já existe um cadastro anexado ao documento informado..."); + personFromDb = personService.findByCpf(entity.getDocument().getValue()); + } catch (ObjectNotFoundException e) { + logger.info( + "Nenhum cadastro encontrado :: Criando um novo cadastro de Pessoa no documento :: TIPO: {} | VALOR: {}", + entity.getDocument().getType(), entity.getDocument().getValue()); + personFromDb = new Person(); + } + + logger.info("Copiando as propriedades da requisição para o obijeto de negócio..."); + BeanUtils.copyProperties(entity, personFromDb, "id"); + personFromDb.setCpf(entity.getDocument().getValue()); + + logger.info("Verificando e-mail"); + if (entity.getAddress() != null) { + AddressDTO address = entity.getAddress(); + PersonAddress personAddress = new PersonAddress(); + if (personFromDb.getAddress() != null) + personAddress = personFromDb.getAddress(); + BeanUtils.copyProperties(address, personAddress, "id"); + personAddress.setPerson(personFromDb); + personFromDb.setAddress(personAddress); + } + + if (personFromDb.getId() != null) + personService.update(personFromDb.getId(), personFromDb); + else + personService.persist(personFromDb); + + UserApplication user = new UserApplication(); + BeanUtils.copyProperties(entity, user); + user.setPerson(personFromDb); + user.setPassword(bc.encode(entity.getDocument().getValue())); + user.setCreatedAt(LocalDateTime.now()); + user.setActive(true); + if (entity.getRoles() != null && !entity.getRoles().isEmpty()) { + user.setRoles(entity.getRoles().stream().map(this::convertRole).collect(Collectors.toList())); + } + userRepo.save(user); + + entity.setId(user.getId()); + return entity; + } } diff --git a/src/main/java/br/com/nivlabs/gp/service/VisitEventService.java b/src/main/java/br/com/nivlabs/gp/service/VisitEventService.java index 02a80ca4..b4e39a93 100644 --- a/src/main/java/br/com/nivlabs/gp/service/VisitEventService.java +++ b/src/main/java/br/com/nivlabs/gp/service/VisitEventService.java @@ -44,7 +44,7 @@ public AttendanceEvent update(Long id, AttendanceEvent entity) { return dao.save(auxEntity); } - @Override + @Override public void delete(AttendanceEvent entity) { deleteById(entity.getId()); }