From f27ab0cdd269bd348617830cd1e561f9547c9241 Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Sun, 12 Feb 2023 12:09:18 -0300 Subject: [PATCH 1/6] pacote repositories --- .../devsuperior/bds02/repositories/CityRepository.java | 9 +++++++++ .../devsuperior/bds02/repositories/EventRepository.java | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/main/java/com/devsuperior/bds02/repositories/CityRepository.java create mode 100644 src/main/java/com/devsuperior/bds02/repositories/EventRepository.java diff --git a/src/main/java/com/devsuperior/bds02/repositories/CityRepository.java b/src/main/java/com/devsuperior/bds02/repositories/CityRepository.java new file mode 100644 index 00000000..9fa822ef --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/repositories/CityRepository.java @@ -0,0 +1,9 @@ +package com.devsuperior.bds02.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.devsuperior.bds02.entities.City; + +public interface CityRepository extends JpaRepository { + +} diff --git a/src/main/java/com/devsuperior/bds02/repositories/EventRepository.java b/src/main/java/com/devsuperior/bds02/repositories/EventRepository.java new file mode 100644 index 00000000..e2d5825b --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/repositories/EventRepository.java @@ -0,0 +1,9 @@ +package com.devsuperior.bds02.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.devsuperior.bds02.entities.Event; + +public interface EventRepository extends JpaRepository { + +} From e4b2158c874040b44519bbb5b393daa5d3e488ab Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Sun, 12 Feb 2023 12:31:16 -0300 Subject: [PATCH 2/6] findAllShouldReturnAllResourcesSortedByName - test ok --- .../bds02/controllers/CityController.java | 27 +++++++++++++++++++ .../bds02/controllers/EventController.java | 5 ++++ .../bds02/services/CityService.java | 26 ++++++++++++++++++ .../bds02/services/EventService.java | 8 ++++++ 4 files changed, 66 insertions(+) create mode 100644 src/main/java/com/devsuperior/bds02/controllers/CityController.java create mode 100644 src/main/java/com/devsuperior/bds02/controllers/EventController.java create mode 100644 src/main/java/com/devsuperior/bds02/services/CityService.java create mode 100644 src/main/java/com/devsuperior/bds02/services/EventService.java diff --git a/src/main/java/com/devsuperior/bds02/controllers/CityController.java b/src/main/java/com/devsuperior/bds02/controllers/CityController.java new file mode 100644 index 00000000..40572fb5 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/CityController.java @@ -0,0 +1,27 @@ +package com.devsuperior.bds02.controllers; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.devsuperior.bds02.dto.CityDTO; +import com.devsuperior.bds02.services.CityService; + +@RestController +@RequestMapping(value = "/cities") +public class CityController { + + @Autowired + private CityService service; + + @GetMapping + public ResponseEntity> findAll(){ + List list = service.findAll(); + return ResponseEntity.ok().body(list); + } + +} diff --git a/src/main/java/com/devsuperior/bds02/controllers/EventController.java b/src/main/java/com/devsuperior/bds02/controllers/EventController.java new file mode 100644 index 00000000..e2be6bf4 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/EventController.java @@ -0,0 +1,5 @@ +package com.devsuperior.bds02.controllers; + +public class EventController { + +} diff --git a/src/main/java/com/devsuperior/bds02/services/CityService.java b/src/main/java/com/devsuperior/bds02/services/CityService.java new file mode 100644 index 00000000..ede2c88d --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/CityService.java @@ -0,0 +1,26 @@ +package com.devsuperior.bds02.services; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; + +import com.devsuperior.bds02.dto.CityDTO; +import com.devsuperior.bds02.entities.City; +import com.devsuperior.bds02.repositories.CityRepository; + +@Service +public class CityService { + + @Autowired + private CityRepository repository; + + public List findAll(){ + List list = repository.findAll(Sort.by("name")); // Retorna ordenado por nome + + return list.stream().map(x -> new CityDTO(x)).collect(Collectors.toList()); //Percorre a lista e retorna um DTO; + } +} + diff --git a/src/main/java/com/devsuperior/bds02/services/EventService.java b/src/main/java/com/devsuperior/bds02/services/EventService.java new file mode 100644 index 00000000..062b2ec3 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/EventService.java @@ -0,0 +1,8 @@ +package com.devsuperior.bds02.services; + +import org.springframework.stereotype.Service; + +@Service +public class EventService { + +} From 31ed22f036ba051e56da53f9766218f2a4da9f6d Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Sun, 12 Feb 2023 13:28:37 -0300 Subject: [PATCH 3/6] insertShouldInsertResource - test ok --- .../bds02/controllers/CityController.java | 18 +++++- .../exceptions/ResourceExceptionHandle.java | 53 ++++++++++++++++ .../controllers/exceptions/StandardError.java | 62 +++++++++++++++++++ .../bds02/services/CityService.java | 12 ++++ .../services/exception/DatabaseException.java | 11 ++++ .../exception/ResourceNotFoundException.java | 10 +++ 6 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/devsuperior/bds02/controllers/exceptions/ResourceExceptionHandle.java create mode 100644 src/main/java/com/devsuperior/bds02/controllers/exceptions/StandardError.java create mode 100644 src/main/java/com/devsuperior/bds02/services/exception/DatabaseException.java create mode 100644 src/main/java/com/devsuperior/bds02/services/exception/ResourceNotFoundException.java diff --git a/src/main/java/com/devsuperior/bds02/controllers/CityController.java b/src/main/java/com/devsuperior/bds02/controllers/CityController.java index 40572fb5..7f7ab03a 100644 --- a/src/main/java/com/devsuperior/bds02/controllers/CityController.java +++ b/src/main/java/com/devsuperior/bds02/controllers/CityController.java @@ -1,12 +1,16 @@ package com.devsuperior.bds02.controllers; +import java.net.URI; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import com.devsuperior.bds02.dto.CityDTO; import com.devsuperior.bds02.services.CityService; @@ -17,11 +21,19 @@ public class CityController { @Autowired private CityService service; - + @GetMapping - public ResponseEntity> findAll(){ + public ResponseEntity> findAll() { List list = service.findAll(); return ResponseEntity.ok().body(list); } - + + @PostMapping + public ResponseEntity insert(@RequestBody CityDTO dto) { + dto = service.insert(dto); + URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(dto.getId()).toUri(); + return ResponseEntity.created(uri).body(dto); + + } + } diff --git a/src/main/java/com/devsuperior/bds02/controllers/exceptions/ResourceExceptionHandle.java b/src/main/java/com/devsuperior/bds02/controllers/exceptions/ResourceExceptionHandle.java new file mode 100644 index 00000000..ecca7c35 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/exceptions/ResourceExceptionHandle.java @@ -0,0 +1,53 @@ +package com.devsuperior.bds02.controllers.exceptions; + +import java.time.Instant; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import com.devsuperior.bds02.services.exception.DatabaseException; +import com.devsuperior.bds02.services.exception.ResourceNotFoundException; + +@ControllerAdvice +public class ResourceExceptionHandle { + + @ExceptionHandler(ResourceNotFoundException.class) + public ResponseEntity entityNotFound(ResourceNotFoundException e, HttpServletRequest request){ + + HttpStatus status = HttpStatus.NOT_FOUND; + + StandardError err = new StandardError(); + err.setTimestamp(Instant.now()); + err.setStatus(status.value()); + err.setError(" Resource not found"); + err.setMessage(e.getMessage()); + err.setPath(request.getRequestURI()); + + return ResponseEntity.status(status).body(err); + } + + @ExceptionHandler(DatabaseException.class) + public ResponseEntity database(DatabaseException e, HttpServletRequest request){ + + HttpStatus status = HttpStatus.BAD_REQUEST; + + StandardError err = new StandardError(); + err.setTimestamp(Instant.now()); + err.setStatus(status.value()); + err.setError(" Darabase exception"); + err.setMessage(e.getMessage()); + err.setPath(request.getRequestURI()); + + return ResponseEntity.status(status).body(err); + } + + + + + + +} diff --git a/src/main/java/com/devsuperior/bds02/controllers/exceptions/StandardError.java b/src/main/java/com/devsuperior/bds02/controllers/exceptions/StandardError.java new file mode 100644 index 00000000..32b6fc8d --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/exceptions/StandardError.java @@ -0,0 +1,62 @@ +package com.devsuperior.bds02.controllers.exceptions; + +import java.io.Serializable; +import java.time.Instant; + +public class StandardError implements Serializable { + + private static final long serialVersionUID = 1L; + + private Instant timestamp; + private Integer status; + private String error; + private String message; + private String path; + + public StandardError() { + + } + + public Instant getTimestamp() { + return timestamp; + } + + public void setTimestamp(Instant timestamp) { + this.timestamp = timestamp; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + + +} diff --git a/src/main/java/com/devsuperior/bds02/services/CityService.java b/src/main/java/com/devsuperior/bds02/services/CityService.java index ede2c88d..86f3f22f 100644 --- a/src/main/java/com/devsuperior/bds02/services/CityService.java +++ b/src/main/java/com/devsuperior/bds02/services/CityService.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.devsuperior.bds02.dto.CityDTO; import com.devsuperior.bds02.entities.City; @@ -17,10 +18,21 @@ public class CityService { @Autowired private CityRepository repository; + @Transactional public List findAll(){ List list = repository.findAll(Sort.by("name")); // Retorna ordenado por nome return list.stream().map(x -> new CityDTO(x)).collect(Collectors.toList()); //Percorre a lista e retorna um DTO; } + + @Transactional + public CityDTO insert(CityDTO dto) { + City entity = new City(); + + entity.setName(dto.getName()); + entity = repository.save(entity); + return new CityDTO(entity); + } + } diff --git a/src/main/java/com/devsuperior/bds02/services/exception/DatabaseException.java b/src/main/java/com/devsuperior/bds02/services/exception/DatabaseException.java new file mode 100644 index 00000000..23acc54c --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/exception/DatabaseException.java @@ -0,0 +1,11 @@ +package com.devsuperior.bds02.services.exception; + +public class DatabaseException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public DatabaseException(String msg) { + super(msg); + } + +} \ No newline at end of file diff --git a/src/main/java/com/devsuperior/bds02/services/exception/ResourceNotFoundException.java b/src/main/java/com/devsuperior/bds02/services/exception/ResourceNotFoundException.java new file mode 100644 index 00000000..459b884d --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/exception/ResourceNotFoundException.java @@ -0,0 +1,10 @@ +package com.devsuperior.bds02.services.exception; + +public class ResourceNotFoundException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public ResourceNotFoundException(String msg) { + super(msg); + } +} From 8a36a9623a2491ae388917206acbbdc67da17d6c Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Sun, 12 Feb 2023 14:28:03 -0300 Subject: [PATCH 4/6] Testes CityControllerIT e EventControllerIT concluidos com sucesso --- .../bds02/controllers/CityController.java | 8 +++++- .../bds02/controllers/EventController.java | 22 +++++++++++++++ .../bds02/services/CityService.java | 14 ++++++++++ .../bds02/services/EventService.java | 28 +++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/devsuperior/bds02/controllers/CityController.java b/src/main/java/com/devsuperior/bds02/controllers/CityController.java index 7f7ab03a..cbfae1bf 100644 --- a/src/main/java/com/devsuperior/bds02/controllers/CityController.java +++ b/src/main/java/com/devsuperior/bds02/controllers/CityController.java @@ -5,7 +5,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,7 +35,11 @@ public ResponseEntity insert(@RequestBody CityDTO dto) { dto = service.insert(dto); URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(dto.getId()).toUri(); return ResponseEntity.created(uri).body(dto); +} + @DeleteMapping(value = "/{id}") + public ResponseEntity delete(@PathVariable Long id){ + service.delete(id); + return ResponseEntity.noContent().build(); } - } diff --git a/src/main/java/com/devsuperior/bds02/controllers/EventController.java b/src/main/java/com/devsuperior/bds02/controllers/EventController.java index e2be6bf4..ec4eacc6 100644 --- a/src/main/java/com/devsuperior/bds02/controllers/EventController.java +++ b/src/main/java/com/devsuperior/bds02/controllers/EventController.java @@ -1,5 +1,27 @@ package com.devsuperior.bds02.controllers; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.devsuperior.bds02.dto.EventDTO; +import com.devsuperior.bds02.services.EventService; + +@RestController +@RequestMapping(value = "events") public class EventController { + @Autowired + private EventService service; + + @PutMapping(value = "/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody EventDTO dto){ + dto = service.update(id, dto); + return ResponseEntity.ok().body(dto); + } + } diff --git a/src/main/java/com/devsuperior/bds02/services/CityService.java b/src/main/java/com/devsuperior/bds02/services/CityService.java index 86f3f22f..280041e8 100644 --- a/src/main/java/com/devsuperior/bds02/services/CityService.java +++ b/src/main/java/com/devsuperior/bds02/services/CityService.java @@ -4,6 +4,8 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -11,6 +13,8 @@ import com.devsuperior.bds02.dto.CityDTO; import com.devsuperior.bds02.entities.City; import com.devsuperior.bds02.repositories.CityRepository; +import com.devsuperior.bds02.services.exception.DatabaseException; +import com.devsuperior.bds02.services.exception.ResourceNotFoundException; @Service public class CityService { @@ -34,5 +38,15 @@ public CityDTO insert(CityDTO dto) { return new CityDTO(entity); } + public void delete(Long id) { + try { + repository.deleteById(id); + } catch (EmptyResultDataAccessException e) { + throw new ResourceNotFoundException("Id não encontrado" + id); + } catch (DataIntegrityViolationException e) { + throw new DatabaseException("Violação de integridade"); + } + } + } diff --git a/src/main/java/com/devsuperior/bds02/services/EventService.java b/src/main/java/com/devsuperior/bds02/services/EventService.java index 062b2ec3..4f4c63b2 100644 --- a/src/main/java/com/devsuperior/bds02/services/EventService.java +++ b/src/main/java/com/devsuperior/bds02/services/EventService.java @@ -1,8 +1,36 @@ package com.devsuperior.bds02.services; +import javax.persistence.EntityNotFoundException; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.devsuperior.bds02.dto.EventDTO; +import com.devsuperior.bds02.entities.City; +import com.devsuperior.bds02.entities.Event; +import com.devsuperior.bds02.repositories.EventRepository; +import com.devsuperior.bds02.services.exception.ResourceNotFoundException; @Service public class EventService { + @Autowired + private EventRepository repository; + + @Transactional + public EventDTO update(Long id, EventDTO dto) { + try { + Event entity = repository.getOne(id); + entity.setName(dto.getName()); + entity.setDate(dto.getDate()); + entity.setUrl(dto.getUrl()); + entity.setCity(new City(dto.getCityId(), null)); + + return new EventDTO(entity); + + }catch (EntityNotFoundException e) { + throw new ResourceNotFoundException("Id não encontrado"); + } + } } From 35ac5148bc5cc6871acc86c922fed52d7c5aebd8 Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Mon, 6 Mar 2023 21:22:57 -0300 Subject: [PATCH 5/6] Readme --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..5fad7e20 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# bds04 \ No newline at end of file From 1c68cf97f506961ee06b991c42bad58de854a462 Mon Sep 17 00:00:00 2001 From: jefferson barbosa dos santos Date: Tue, 14 Mar 2023 20:04:56 -0300 Subject: [PATCH 6/6] Projeto finalizado --- .../java/com/devsuperior/bds02/controllers/CityController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/devsuperior/bds02/controllers/CityController.java b/src/main/java/com/devsuperior/bds02/controllers/CityController.java index cbfae1bf..a22f6113 100644 --- a/src/main/java/com/devsuperior/bds02/controllers/CityController.java +++ b/src/main/java/com/devsuperior/bds02/controllers/CityController.java @@ -24,7 +24,7 @@ public class CityController { @Autowired private CityService service; - @GetMapping + @GetMapping //Retorna uma lista com as cidades. public ResponseEntity> findAll() { List list = service.findAll(); return ResponseEntity.ok().body(list);