Skip to content

Commit

Permalink
Completed CRUD for transactions.
Browse files Browse the repository at this point in the history
  • Loading branch information
oluizeduardo committed Oct 19, 2021
1 parent d70b000 commit 0646781
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@

import br.com.carteira.dto.ItemCarteiraDTO;
import br.com.carteira.service.RelatorioService;
import io.swagger.annotations.Api;

@RestController
@RequestMapping("/relatorios")
//Documentação Swagger.
@Api(tags = "Relatórios")
public class RelatoriosController {

@Autowired
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/br/com/carteira/controller/TransacaoController.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,29 @@
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
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.PutMapping;
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.util.UriComponentsBuilder;

import com.sun.istack.NotNull;

import br.com.carteira.dto.AtualizacaoTransacaoFormDTO;
import br.com.carteira.dto.TransacaoDTO;
import br.com.carteira.dto.TransacaoDetalhadaDTO;
import br.com.carteira.dto.TransacaoFormDTO;
import br.com.carteira.service.TransacaoService;
import io.swagger.annotations.Api;

@RestController
@RequestMapping("/transacoes")
//Documentação Swagger.
@Api(tags = "Transação")
public class TransacaoController {

@Autowired
Expand All @@ -48,4 +58,25 @@ public ResponseEntity<TransacaoDTO> cadastrar(@RequestBody @Valid TransacaoFormD
return ResponseEntity.created(uri ).body(transacaoDTO);
}

@PutMapping
public ResponseEntity<TransacaoDTO> atualizar(@RequestBody @Valid AtualizacaoTransacaoFormDTO dto)
{
TransacaoDTO transacaoDTOAtualizada = service.atualizar(dto);
return ResponseEntity.ok(transacaoDTOAtualizada);
}

@DeleteMapping("{id}")
public ResponseEntity<TransacaoDTO> remover(@PathVariable @NotNull Integer id)
{
service.remover(id);
return ResponseEntity.noContent().build();
}

@GetMapping("{id}")
public ResponseEntity<TransacaoDetalhadaDTO> detalhar(@PathVariable @NotNull Integer id)
{
TransacaoDetalhadaDTO dto = service.detalhar(id);
return ResponseEntity.ok(dto);
}

}
21 changes: 21 additions & 0 deletions src/main/java/br/com/carteira/dto/AtualizacaoTransacaoFormDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package br.com.carteira.dto;

import com.sun.istack.NotNull;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class AtualizacaoTransacaoFormDTO extends TransacaoFormDTO {

@NotNull
private Integer id;

}
15 changes: 15 additions & 0 deletions src/main/java/br/com/carteira/dto/TransacaoDetalhadaDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package br.com.carteira.dto;

import java.time.LocalDate;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class TransacaoDetalhadaDTO extends TransacaoDTO {

private LocalDate data;
private UsuarioDTO usuario;

}
7 changes: 7 additions & 0 deletions src/main/java/br/com/carteira/infra/TratamentoDeErros.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import java.util.List;
import java.util.stream.Collectors;

import javax.persistence.EntityNotFoundException;
import javax.servlet.http.HttpServletRequest;

import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
Expand Down Expand Up @@ -39,4 +41,9 @@ public Erro500DTO tratarErro500(Exception ex, HttpServletRequest req) {
req.getRequestURI());
}


@ExceptionHandler({EntityNotFoundException.class, EmptyResultDataAccessException.class})
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public void tratarErro404() { }

}
10 changes: 10 additions & 0 deletions src/main/java/br/com/carteira/model/Transacao.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,16 @@ public Transacao(String ticker, BigDecimal preco, int quantidade, LocalDate data
this.tipo = tipo;
this.usuario = usuario;
}


public void atualizarInformacoes(String ticker, LocalDate data, BigDecimal preco, int quantidade,
TipoTransacao tipo) {
this.ticker = ticker;
this.data = data;
this.preco = preco;
this.quantidade = quantidade;
this.tipo = tipo;
}



Expand Down
31 changes: 31 additions & 0 deletions src/main/java/br/com/carteira/service/TransacaoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@

import javax.persistence.EntityNotFoundException;
import javax.transaction.Transactional;
import javax.validation.Valid;

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import br.com.carteira.dto.AtualizacaoTransacaoFormDTO;
import br.com.carteira.dto.TransacaoDTO;
import br.com.carteira.dto.TransacaoDetalhadaDTO;
import br.com.carteira.dto.TransacaoFormDTO;
import br.com.carteira.model.Transacao;
import br.com.carteira.model.Usuario;
Expand Down Expand Up @@ -54,4 +57,32 @@ public TransacaoDTO cadastrar(TransacaoFormDTO dto)
}
}


@Transactional
public TransacaoDTO atualizar(@Valid AtualizacaoTransacaoFormDTO dto)
{
Transacao transacao = transacaoRepository.getById(dto.getId());
transacao.atualizarInformacoes(dto.getTicker(), dto.getData(), dto.getPreco(), dto.getQuantidade(), dto.getTipo());
// Nesse momento a JPA percebe que uma entidade foi carregada do banco de dados
// e teve seus dados modificados. A atualização é feita de forma automática pelo JPA.

// Mapeia o retorno para um TransacaoDTO.
return modelMapper.map(transacao, TransacaoDTO.class);
}


@Transactional
public void remover(Integer id)
{
transacaoRepository.deleteById(id);
}

public TransacaoDetalhadaDTO detalhar(Integer id)
{
Transacao transacao = transacaoRepository.findById(id).orElseThrow(() -> new EntityNotFoundException());

// Mapeia o retorno para um TransacaoDTO.
return modelMapper.map(transacao, TransacaoDetalhadaDTO.class);
}

}

0 comments on commit 0646781

Please sign in to comment.