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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# bds04
Original file line number Diff line number Diff line change
@@ -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<List<CityDTO>> findAll() {
List<CityDTO> list = service.findAll();
return ResponseEntity.ok().body(list);
}

@PostMapping
public ResponseEntity<CityDTO> 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<CityDTO> delete(@PathVariable Long id){
service.delete(id);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -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<EventDTO> update(@PathVariable Long id, @RequestBody EventDTO dto){
dto = service.update(id, dto);
return ResponseEntity.ok().body(dto);
}

}
Original file line number Diff line number Diff line change
@@ -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<StandardError> 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<StandardError> 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);
}






}
Original file line number Diff line number Diff line change
@@ -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;
}



}
Original file line number Diff line number Diff line change
@@ -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<City, Long> {

}
Original file line number Diff line number Diff line change
@@ -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<Event, Long> {

}
52 changes: 52 additions & 0 deletions src/main/java/com/devsuperior/bds02/services/CityService.java
Original file line number Diff line number Diff line change
@@ -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<CityDTO> findAll(){
List<City> 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");
}
}

}

36 changes: 36 additions & 0 deletions src/main/java/com/devsuperior/bds02/services/EventService.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}
}