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 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..a22f6113 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/CityController.java @@ -0,0 +1,45 @@ +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.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; +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; + +@RestController +@RequestMapping(value = "/cities") +public class CityController { + + @Autowired + private CityService service; + + @GetMapping //Retorna uma lista com as cidades. + 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); +} + + @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 new file mode 100644 index 00000000..ec4eacc6 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/controllers/EventController.java @@ -0,0 +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/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/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 { + +} 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..280041e8 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/CityService.java @@ -0,0 +1,52 @@ +package com.devsuperior.bds02.services; + +import java.util.List; +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; + +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 { + + @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); + } + + 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 new file mode 100644 index 00000000..4f4c63b2 --- /dev/null +++ b/src/main/java/com/devsuperior/bds02/services/EventService.java @@ -0,0 +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"); + } + } +} 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); + } +}