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
@@ -0,0 +1,47 @@
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
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<Void> 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,41 @@
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.exceptions.DatabaseException;
import com.devsuperior.bds02.services.exceptions.ResourceNotFoundException;

@ControllerAdvice
public class ResourceExceptionHandler {

@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("Database 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,68 @@
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 StandardError(Instant timestamp, Integer status, String error, String message, String path) {
this.timestamp = timestamp;
this.status = status;
this.error = error;
this.message = message;
this.path = path;
}

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,11 @@
package com.devsuperior.bds02.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.devsuperior.bds02.entities.Event;

@Repository
public interface EventRepository extends JpaRepository<Event, Long> {

}
50 changes: 50 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,50 @@
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.exceptions.DatabaseException;
import com.devsuperior.bds02.services.exceptions.ResourceNotFoundException;

@Service
public class CityService {

@Autowired
private CityRepository repository;

@Transactional
public List<CityDTO> findAll() {
List<City> list = repository.findAll(Sort.by("name"));
return list.stream().map(x -> new CityDTO(x)).collect(Collectors.toList());
}

@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 not found " + id);
} catch(DataIntegrityViolationException e) {
throw new DatabaseException("Integrity violation");
}
}

}
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.exceptions.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));
entity = repository.save(entity);
return new EventDTO(entity);
} catch (EntityNotFoundException e) {
throw new ResourceNotFoundException("Id not found " + id);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.devsuperior.bds02.services.exceptions;

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,9 @@
package com.devsuperior.bds02.services.exceptions;

public class ResourceNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;

public ResourceNotFoundException(String msg) {
super(msg);
}
}