Skip to content

Commit

Permalink
feat: cadastro pergunta
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiomsrs committed Jul 1, 2021
1 parent a8489fa commit 5d0a5f7
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@

import br.com.zupacademy.fabiano.mercadolivre.dto.ImagemDto;
import br.com.zupacademy.fabiano.mercadolivre.dto.OpiniaoDto;
import br.com.zupacademy.fabiano.mercadolivre.dto.PerguntaDto;
import br.com.zupacademy.fabiano.mercadolivre.dto.ProdutoDto;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Opiniao;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Pergunta;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Produto;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Usuario;
import br.com.zupacademy.fabiano.mercadolivre.repository.CategoriaRepository;
import br.com.zupacademy.fabiano.mercadolivre.repository.OpiniaoRepository;
import br.com.zupacademy.fabiano.mercadolivre.repository.PerguntaRepository;
import br.com.zupacademy.fabiano.mercadolivre.repository.ProdutoRepository;
import br.com.zupacademy.fabiano.mercadolivre.utils.Bucket;
import br.com.zupacademy.fabiano.mercadolivre.utils.EnviadorEmail;
import br.com.zupacademy.fabiano.mercadolivre.utils.Uploader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
Expand All @@ -18,7 +22,6 @@
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
import java.util.Set;

Expand All @@ -34,9 +37,15 @@ public class ProdutoController {
@Autowired
OpiniaoRepository opiniaoRepository;

@Autowired
PerguntaRepository perguntaRepository;

@Autowired
Uploader bucket;

@Autowired
EnviadorEmail sendGrid;

@PostMapping
public ResponseEntity<Produto> cadastrar(@RequestBody @Valid ProdutoDto dto){
Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Expand Down Expand Up @@ -77,4 +86,17 @@ public ResponseEntity<?> opiniao(@PathVariable("id") Long id, @RequestBody @Vali
opiniaoRepository.save(opiniao);
return ResponseEntity.ok(opiniao);
}

@PostMapping("/{id}/perguntas")
public ResponseEntity<?> pergunta(@PathVariable("id") Long id, @RequestBody @Valid PerguntaDto dto){
Usuario usuario = (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Optional<Produto> optionalProduto = repository.findById(id);
if(optionalProduto.isEmpty()){
return ResponseEntity.notFound().build();
}
Pergunta pergunta = dto.converter(usuario, optionalProduto.get());
perguntaRepository.save(pergunta);
sendGrid.enviaEmail(usuario);
return ResponseEntity.ok(pergunta);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package br.com.zupacademy.fabiano.mercadolivre.dto;

import br.com.zupacademy.fabiano.mercadolivre.modelo.Pergunta;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Produto;
import br.com.zupacademy.fabiano.mercadolivre.modelo.Usuario;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class PerguntaDto {
@NotNull
@NotEmpty
private String titulo;

public PerguntaDto() {
}

public PerguntaDto(String titulo) {
this.titulo = titulo;
}

public Pergunta converter(Usuario usuario, Produto produto){
return new Pergunta(titulo, usuario, produto);
}

public String getTitulo() {
return titulo;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package br.com.zupacademy.fabiano.mercadolivre.modelo;

import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

@Entity
public class Pergunta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@NotEmpty
private String titulo;
@NotNull
@ManyToOne
private Usuario usuario;
@NotNull
@ManyToOne
private Produto produto;
@CreationTimestamp
private LocalDateTime createdAt;

public Pergunta() {
}

public Pergunta(@NotNull @NotEmpty String titulo,
@NotNull Usuario usuario,
@NotNull Produto produto) {
this.titulo = titulo;
this.usuario = usuario;
this.produto = produto;
}

public Long getId() {
return id;
}

public String getTitulo() {
return titulo;
}

public Usuario getUsuario() {
return usuario;
}

public Produto getProduto() {
return produto;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package br.com.zupacademy.fabiano.mercadolivre.repository;

import br.com.zupacademy.fabiano.mercadolivre.modelo.Pergunta;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PerguntaRepository extends JpaRepository<Pergunta, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package br.com.zupacademy.fabiano.mercadolivre.utils;

import br.com.zupacademy.fabiano.mercadolivre.modelo.Usuario;

public interface EnviadorEmail {
void enviaEmail(Usuario usuario);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package br.com.zupacademy.fabiano.mercadolivre.utils;

import br.com.zupacademy.fabiano.mercadolivre.modelo.Usuario;
import org.springframework.stereotype.Component;

@Component
public class SendGridFake implements EnviadorEmail{
@Override
public void enviaEmail(Usuario usuario) {
/*
Envia email pro login do usuario
* */
System.out.println("Email enviado para " + usuario.getLogin());
}
}

0 comments on commit 5d0a5f7

Please sign in to comment.