diff --git a/pom.xml b/pom.xml index b608f09..ca8c7a3 100644 --- a/pom.xml +++ b/pom.xml @@ -34,12 +34,12 @@ org.springframework.boot spring-boot-starter-data-jpa - - org.springframework.boot - spring-boot-devtools - runtime + org.springframework.security + spring-security-web + + com.h2database h2 @@ -50,12 +50,22 @@ lombok true + + io.jsonwebtoken + jjwt + 0.9.0 + + org.springframework.boot spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-security + diff --git a/src/main/java/it/myti/academy/backend/config/CryptConfig.java b/src/main/java/it/myti/academy/backend/config/CryptConfig.java new file mode 100644 index 0000000..adc6163 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/config/CryptConfig.java @@ -0,0 +1,16 @@ +package it.myti.academy.backend.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + +@Configuration +public class CryptConfig { + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + +} diff --git a/src/main/java/it/myti/academy/backend/config/WebSecurity.java b/src/main/java/it/myti/academy/backend/config/WebSecurity.java new file mode 100644 index 0000000..0e8cd1a --- /dev/null +++ b/src/main/java/it/myti/academy/backend/config/WebSecurity.java @@ -0,0 +1,43 @@ +package it.myti.academy.backend.config; + +import it.myti.academy.backend.filter.JWTAuthenticationFilter; +import it.myti.academy.backend.filter.JWTAuthorizationFilter; +import it.myti.academy.backend.filter.SecurityConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpMethod; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + + +@EnableWebSecurity +public class WebSecurity extends WebSecurityConfigurerAdapter implements SecurityConstants { + private UserDetailsService userDetailsService; + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Autowired + public WebSecurity(@Qualifier("userDetailsServiceImpl") UserDetailsService userDetailsService, BCryptPasswordEncoder bCryptPasswordEncoder) { + this.userDetailsService = userDetailsService; + this.bCryptPasswordEncoder = bCryptPasswordEncoder; + } + @Override + protected void configure(HttpSecurity http) throws Exception { + + http.csrf().disable().authorizeRequests() + .antMatchers("/h2-console/**").permitAll() + .antMatchers(HttpMethod.POST, "/registrazione").permitAll() + .anyRequest().authenticated() + .and() + .addFilter(new JWTAuthenticationFilter(authenticationManager())) + .addFilter(new JWTAuthorizationFilter(authenticationManager())); + http.headers().frameOptions().disable(); + } + @Override + public void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder); + } +} diff --git a/src/main/java/it/myti/academy/backend/controller/ColliController.java b/src/main/java/it/myti/academy/backend/controller/ColliController.java index dfc1ea1..4c3c912 100644 --- a/src/main/java/it/myti/academy/backend/controller/ColliController.java +++ b/src/main/java/it/myti/academy/backend/controller/ColliController.java @@ -2,8 +2,9 @@ import it.myti.academy.backend.model.Collo; import it.myti.academy.backend.model.Utente; -import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; import it.myti.academy.backend.service.ColloService; +import it.myti.academy.backend.service.UtenteService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -14,20 +15,22 @@ /** * Created by david at 2019-03-07 */ -@RestController("/collo") +@RestController public class ColliController { @Autowired ColloService colloService; @Autowired - UtenteRepository utenteRepository; + UtenteService utenteService; + + @GetMapping("/collo/utente/{id}") + public List getByUtente(@PathVariable("id") long id) throws UtenteNonTrovatoException { + - @GetMapping("/utente/{id}") - public List getByUtente(@PathVariable("id") long id) { List returnValue = null; - final Utente utente = utenteRepository.findById(id).get(); + final Utente utente = utenteService.getById(id); if(utente!=null) { returnValue = colloService.getSpedizioniAttiveByUtente(utente); } diff --git a/src/main/java/it/myti/academy/backend/controller/EccezioniController.java b/src/main/java/it/myti/academy/backend/controller/EccezioniController.java new file mode 100644 index 0000000..4ac2d98 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/EccezioniController.java @@ -0,0 +1,36 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.entitaRisposte.DettagliUnitaLogisticaUtente; +import it.myti.academy.backend.model.errori.*; +import it.myti.academy.backend.model.errori.eccezioni.*; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +@RestController +public class EccezioniController extends ResponseEntityExceptionHandler { + + @ExceptionHandler(UnitaLogisticaNonTrovataException.class) + public final DettagliErrore gestisciErrore(UnitaLogisticaNonTrovataException e) { + return new DettagliErrore(HttpStatus.NOT_FOUND.value(), "Unità logistica non trovata"); + } + + @ExceptionHandler(UtenteNonTrovatoException.class) + public final DettagliErrore gestisciErrore(UtenteNonTrovatoException e) { + return new DettagliErrore(HttpStatus.NOT_FOUND.value(), "Utente non trovato."); + } + + + @ExceptionHandler(UtenteNonAutorizzatoException.class) + public final DettagliErrore gestisciErrore(UtenteNonAutorizzatoException e){ + return new DettagliErrore(HttpStatus.UNAUTHORIZED.value(), "Utente non autorizzato"); + } + + @ExceptionHandler(RegistrazioneException.class) + public final DettagliErrore gestisciErrore(RegistrazioneException e){ + return new DettagliErrore(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Errore durante la registrazione"); + } +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/controller/EventiController.java b/src/main/java/it/myti/academy/backend/controller/EventiController.java new file mode 100644 index 0000000..bc5e349 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/EventiController.java @@ -0,0 +1,34 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonAutorizzatoException; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; +import it.myti.academy.backend.service.EventoService; +import it.myti.academy.backend.service.UtenteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class EventiController { + @Autowired + EventoService eventoService; + + @Autowired + UtenteService utenteService; + + @GetMapping("/eventi/utente/{idUtente}") + public List getEventiByCollo(@PathVariable("idUtente") Long idUtente) throws UtenteNonTrovatoException, UtenteNonAutorizzatoException { + String username = SecurityContextHolder.getContext().getAuthentication().getName(); + Utente utente = utenteService.getByUsername(username); + if(utente.getId().equals(idUtente) || username == null) + return eventoService.findEventiAttiviByUtente(utenteService.getById(idUtente)); + throw new UtenteNonAutorizzatoException(); + + } +} diff --git a/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java b/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java deleted file mode 100644 index a20eb27..0000000 --- a/src/main/java/it/myti/academy/backend/controller/HelloWorldController.java +++ /dev/null @@ -1,33 +0,0 @@ -package it.myti.academy.backend.controller; - -import it.myti.academy.backend.service.HelloWorldService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -/** - * Created by david at 2019-02-19 - */ -@RestController -public class HelloWorldController { - - private HelloWorldService helloWorldService; - - @Autowired - public HelloWorldController(HelloWorldService helloWorldService) { - this.helloWorldService = helloWorldService; - } - - @GetMapping("hello") - public String hello() { - return helloWorldService.sayHello(); - } - - @PostMapping("hello") - public String helloAt(@RequestBody() String nome) { - return helloWorldService.sayHello(nome); - } - -} diff --git a/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java b/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java new file mode 100644 index 0000000..6d8f791 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/UnitaLogisticheController.java @@ -0,0 +1,45 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.entitaRisposte.DettagliUnitaLogisticaUtente; +import it.myti.academy.backend.model.errori.eccezioni.UnitaLogisticaNonTrovataException; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonAutorizzatoException; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; +import it.myti.academy.backend.service.UnitaLogisticaService; +import it.myti.academy.backend.service.UtenteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; +import java.util.List; + +@RestController +public class UnitaLogisticheController { + + @Autowired + UnitaLogisticaService unitaLogisticaService; + + @Autowired + UtenteService utenteService; + + @GetMapping("unitalogistiche/utente/{idUtente}") + public List getUnitaLogisticheByUtente(@PathVariable("idUtente") Long idUtente) throws UtenteNonAutorizzatoException, UnitaLogisticaNonTrovataException, UtenteNonTrovatoException { + String username = SecurityContextHolder.getContext().getAuthentication().getName(); + Utente utente = utenteService.getByUsername(username); + if(utente.getId().equals(idUtente) || username == null) + return unitaLogisticaService.getByUtente(idUtente); + throw new UtenteNonAutorizzatoException(); + } + + @GetMapping("unitalogistiche/{idUnitaLogistica}/utente/{idUtente}") + public DettagliUnitaLogisticaUtente geUnitaLogisticaByIdAndUtente(@PathVariable("idUnitaLogistica") Long idUnitaLogistica, @PathVariable("idUtente") Long idUtente) throws UnitaLogisticaNonTrovataException, UtenteNonTrovatoException, UtenteNonAutorizzatoException { + String username = SecurityContextHolder.getContext().getAuthentication().getName(); + Utente utente = utenteService.getByUsername(username); + if(utente.getId().equals(idUtente) || username == null) + return unitaLogisticaService.getByIdAndUtente(idUnitaLogistica, idUtente); + throw new UtenteNonAutorizzatoException(); + } + + +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/controller/UtenteController.java b/src/main/java/it/myti/academy/backend/controller/UtenteController.java new file mode 100644 index 0000000..7d0a30b --- /dev/null +++ b/src/main/java/it/myti/academy/backend/controller/UtenteController.java @@ -0,0 +1,41 @@ +package it.myti.academy.backend.controller; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.UtenteRichiesta; +import it.myti.academy.backend.model.errori.eccezioni.RegistrazioneException; +import it.myti.academy.backend.repository.UtenteRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +public class UtenteController { + + private UtenteRepository applicationUserRepository; + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Autowired + public UtenteController(UtenteRepository applicationUserRepository, + BCryptPasswordEncoder bCryptPasswordEncoder) { + this.applicationUserRepository = applicationUserRepository; + this.bCryptPasswordEncoder = bCryptPasswordEncoder; + } + + @PostMapping("/registrazione") + public Utente registrazione(@RequestBody UtenteRichiesta utenteRichiesta) throws RegistrazioneException { + Utente utente = new Utente(); + utente.setNome(utenteRichiesta.getNome()); + utente.setUsername(utenteRichiesta.getUsername()); + utente.setPassword(bCryptPasswordEncoder.encode(utenteRichiesta.getPassword())); + try { + applicationUserRepository.save(utente); + }catch(Exception e){ + throw new RegistrazioneException(); + } + + return utente; + } +} diff --git a/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java b/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java new file mode 100644 index 0000000..d3d3fcf --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/JWTAuthenticationFilter.java @@ -0,0 +1,47 @@ +package it.myti.academy.backend.filter; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import it.myti.academy.backend.model.Utente; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; + +public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter implements SecurityConstants { + + + private AuthenticationManager authenticationManager; + public JWTAuthenticationFilter(AuthenticationManager authenticationManager) { + this.authenticationManager = authenticationManager; + } + @Override + public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res) throws AuthenticationException { + try { + Utente creds = new ObjectMapper().readValue(req.getInputStream(), Utente.class); + return authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(creds.getUsername(), creds.getPassword(), new ArrayList<>()) ); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @Override + protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth){ + String token = Jwts.builder() + .setSubject(((User) auth.getPrincipal()).getUsername()) + .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) + .signWith(SignatureAlgorithm.HS512, SECRET) + .compact(); + res.addHeader(HEADER_STRING, TOKEN_PREFIX + token); + } +} diff --git a/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java b/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java new file mode 100644 index 0000000..e0b7031 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/JWTAuthorizationFilter.java @@ -0,0 +1,48 @@ +package it.myti.academy.backend.filter; + +import io.jsonwebtoken.Jwts; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; + +public class JWTAuthorizationFilter extends BasicAuthenticationFilter implements SecurityConstants{ + public JWTAuthorizationFilter(AuthenticationManager authManager) { + super(authManager); + } + @Override + protected void doFilterInternal(HttpServletRequest req, + HttpServletResponse res, + FilterChain chain) throws IOException, ServletException { + String header = req.getHeader(HEADER_STRING); + if (header == null || !header.startsWith(TOKEN_PREFIX)) { + chain.doFilter(req, res); + return; + } + UsernamePasswordAuthenticationToken authentication = getAuthentication(req); + SecurityContextHolder.getContext().setAuthentication(authentication); + chain.doFilter(req, res); + } + private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) { + String token = request.getHeader(HEADER_STRING); + if (token != null) { + // parse the token. + String user = Jwts.parser() + .setSigningKey(SECRET) + .parseClaimsJws(token.replace(TOKEN_PREFIX, "")) + .getBody() + .getSubject(); + if (user != null) { + return new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>()); + } + return null; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java b/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java new file mode 100644 index 0000000..93e09e1 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/filter/SecurityConstants.java @@ -0,0 +1,9 @@ +package it.myti.academy.backend.filter; + +public interface SecurityConstants { + final static Long EXPIRATION_TIME = 3600000L; + final static String TOKEN_PREFIX = "Bearer "; + final static String HEADER_STRING = "Authorization"; + final static String SECRET = "this-is-a-secret"; + final static String SIGN_UP_URL = "/utente"; +} diff --git a/src/main/java/it/myti/academy/backend/model/Collo.java b/src/main/java/it/myti/academy/backend/model/Collo.java index 85ec2b6..c51bc01 100644 --- a/src/main/java/it/myti/academy/backend/model/Collo.java +++ b/src/main/java/it/myti/academy/backend/model/Collo.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -43,6 +44,7 @@ public class Collo { protected List contenuti; @Column + @JsonIgnore @OneToMany(mappedBy = "collo") protected List eventi; diff --git a/src/main/java/it/myti/academy/backend/model/Contenuto.java b/src/main/java/it/myti/academy/backend/model/Contenuto.java index f4a2c73..4b6d6d7 100644 --- a/src/main/java/it/myti/academy/backend/model/Contenuto.java +++ b/src/main/java/it/myti/academy/backend/model/Contenuto.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -39,10 +40,11 @@ public class Contenuto { @Column(scale = 2) protected Double quantita; - @Column(length = 2) + @Column(length = 2, name = "unita_di_misura") protected String unitaDiMisura; @ManyToOne + @JsonIgnore @JoinColumn(name = "collo_id") protected Collo collo; } diff --git a/src/main/java/it/myti/academy/backend/model/ContenutoBase.java b/src/main/java/it/myti/academy/backend/model/ContenutoBase.java new file mode 100644 index 0000000..0ad1f81 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/ContenutoBase.java @@ -0,0 +1,7 @@ +package it.myti.academy.backend.model; +import lombok.Data; + +@Data +public class ContenutoBase extends Contenuto{ + +} diff --git a/src/main/java/it/myti/academy/backend/model/ContenutoCompleto.java b/src/main/java/it/myti/academy/backend/model/ContenutoCompleto.java new file mode 100644 index 0000000..21a2163 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/ContenutoCompleto.java @@ -0,0 +1,22 @@ +package it.myti.academy.backend.model; + +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.Data; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * Created by david at 2019-02-13 + */ +@Data +@Entity +@Table(name = "contenuti") +public class ContenutoCompleto extends Contenuto{ + + @JsonManagedReference + @ManyToOne + @JoinColumn(name = "collo_id") + protected Collo collo; +} diff --git a/src/main/java/it/myti/academy/backend/model/Evento.java b/src/main/java/it/myti/academy/backend/model/Evento.java index 428f47a..4d65c6f 100644 --- a/src/main/java/it/myti/academy/backend/model/Evento.java +++ b/src/main/java/it/myti/academy/backend/model/Evento.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -45,6 +46,7 @@ public abstract class Evento { protected EventoTipo tipo; @ManyToOne + @JsonIgnore @JoinColumn(name = "collo_id") protected Collo collo; diff --git a/src/main/java/it/myti/academy/backend/model/EventoTipo.java b/src/main/java/it/myti/academy/backend/model/EventoTipo.java index 4a0138d..74fad58 100644 --- a/src/main/java/it/myti/academy/backend/model/EventoTipo.java +++ b/src/main/java/it/myti/academy/backend/model/EventoTipo.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -30,6 +31,7 @@ public class EventoTipo { @Column(length = 2048) protected String descrizione; + @JsonIgnore @OneToMany(mappedBy = "tipo") protected List eventi; } diff --git a/src/main/java/it/myti/academy/backend/model/Spedizione.java b/src/main/java/it/myti/academy/backend/model/Spedizione.java index 11abe00..8e8f256 100644 --- a/src/main/java/it/myti/academy/backend/model/Spedizione.java +++ b/src/main/java/it/myti/academy/backend/model/Spedizione.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -45,6 +46,7 @@ public class Spedizione { protected String arrivoA; @Column + @JsonIgnore @OneToMany(mappedBy = "spedizione") protected List colliInviati; diff --git a/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java b/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java index cb5b755..427493d 100644 --- a/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java +++ b/src/main/java/it/myti/academy/backend/model/StatoUnitaLogistica.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.model; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.Column; @@ -31,6 +32,7 @@ public class StatoUnitaLogistica { @Column(length = 2048) protected String descrizione; + @JsonIgnore @OneToMany(mappedBy = "stato") protected List unitaLogistiche; diff --git a/src/main/java/it/myti/academy/backend/model/Utente.java b/src/main/java/it/myti/academy/backend/model/Utente.java index 32b4591..f66ff20 100644 --- a/src/main/java/it/myti/academy/backend/model/Utente.java +++ b/src/main/java/it/myti/academy/backend/model/Utente.java @@ -21,13 +21,13 @@ public class Utente { @Id @Column(updatable = false) - @GeneratedValue(strategy = GenerationType.AUTO) + @GeneratedValue(strategy = GenerationType.IDENTITY) protected Long id; @Column(unique = true, length = 64) protected String username; - @Column(unique = true, length = 64) + @Column(length = 64) protected String password; @Column(length = 64, nullable = false) diff --git a/src/main/java/it/myti/academy/backend/model/UtenteRichiesta.java b/src/main/java/it/myti/academy/backend/model/UtenteRichiesta.java new file mode 100644 index 0000000..883fdeb --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/UtenteRichiesta.java @@ -0,0 +1,10 @@ +package it.myti.academy.backend.model; + +import lombok.Data; + +@Data +public class UtenteRichiesta { + private String nome; + private String username; + private String password; +} diff --git a/src/main/java/it/myti/academy/backend/model/entitaRisposte/DettagliUnitaLogisticaUtente.java b/src/main/java/it/myti/academy/backend/model/entitaRisposte/DettagliUnitaLogisticaUtente.java new file mode 100644 index 0000000..79990d3 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/entitaRisposte/DettagliUnitaLogisticaUtente.java @@ -0,0 +1,22 @@ +package it.myti.academy.backend.model.entitaRisposte; + +import it.myti.academy.backend.model.Contenuto; +import it.myti.academy.backend.model.Spedizione; +import it.myti.academy.backend.model.StatoUnitaLogistica; +import lombok.Data; + +import java.util.List; + +@Data +public class DettagliUnitaLogisticaUtente { + + protected Long id; + protected String nome; + protected StatoUnitaLogistica status; + protected String latitudine; + protected String longitudine; + protected Double temperatura; + protected Double umidita; + protected Spedizione spedizione; + protected List contenuti; +} diff --git a/src/main/java/it/myti/academy/backend/model/errori/DettagliErrore.java b/src/main/java/it/myti/academy/backend/model/errori/DettagliErrore.java new file mode 100644 index 0000000..b30238b --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/errori/DettagliErrore.java @@ -0,0 +1,18 @@ +package it.myti.academy.backend.model.errori; + +import lombok.Data; + +import java.util.Date; + +@Data +public class DettagliErrore { + private Date data; + private int codice; + private String messaggio; + + public DettagliErrore(int codice, String messaggio){ + data = new Date(); + this.codice = codice; + this.messaggio = messaggio; + } +} diff --git a/src/main/java/it/myti/academy/backend/model/errori/eccezioni/RegistrazioneException.java b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/RegistrazioneException.java new file mode 100644 index 0000000..0539110 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/RegistrazioneException.java @@ -0,0 +1,4 @@ +package it.myti.academy.backend.model.errori.eccezioni; + +public class RegistrazioneException extends Exception { +} diff --git a/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UnitaLogisticaNonTrovataException.java b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UnitaLogisticaNonTrovataException.java new file mode 100644 index 0000000..1b718dd --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UnitaLogisticaNonTrovataException.java @@ -0,0 +1,12 @@ +package it.myti.academy.backend.model.errori.eccezioni; + + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + + +public class UnitaLogisticaNonTrovataException extends Exception { + +} + + diff --git a/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonAutorizzatoException.java b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonAutorizzatoException.java new file mode 100644 index 0000000..44d55e9 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonAutorizzatoException.java @@ -0,0 +1,4 @@ +package it.myti.academy.backend.model.errori.eccezioni; + +public class UtenteNonAutorizzatoException extends Exception { +} diff --git a/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonTrovatoException.java b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonTrovatoException.java new file mode 100644 index 0000000..c7fbaec --- /dev/null +++ b/src/main/java/it/myti/academy/backend/model/errori/eccezioni/UtenteNonTrovatoException.java @@ -0,0 +1,4 @@ +package it.myti.academy.backend.model.errori.eccezioni; + +public class UtenteNonTrovatoException extends Exception { +} diff --git a/src/main/java/it/myti/academy/backend/repository/ColloRepository.java b/src/main/java/it/myti/academy/backend/repository/ColloRepository.java index 85d4171..cd96c40 100644 --- a/src/main/java/it/myti/academy/backend/repository/ColloRepository.java +++ b/src/main/java/it/myti/academy/backend/repository/ColloRepository.java @@ -1,5 +1,6 @@ package it.myti.academy.backend.repository; +import it.myti.academy.backend.model.UnitaLogistica; import it.myti.academy.backend.model.Utente; import it.myti.academy.backend.model.Collo; import org.springframework.data.jpa.repository.JpaRepository; @@ -11,4 +12,6 @@ */ public interface ColloRepository extends JpaRepository { List findAllByUtente(Utente utente); + Collo findFirstByUtenteAndUnitaLogistica(Utente utente, UnitaLogistica unitaLogistica); + List findAllByUtenteAndUnitaLogistica(Utente utente, UnitaLogistica unitaLogistica); } diff --git a/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java b/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java new file mode 100644 index 0000000..523bcb3 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/repository/EventiParticleRepository.java @@ -0,0 +1,15 @@ +package it.myti.academy.backend.repository; + +import it.myti.academy.backend.model.EventoParticle; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +/** + * Created by david at 2019-03-11 + */ +public interface EventiParticleRepository extends JpaRepository { + + EventoParticle findFirstByOrderByRicevutoIlDesc(); + +} diff --git a/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java b/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java new file mode 100644 index 0000000..9851d7a --- /dev/null +++ b/src/main/java/it/myti/academy/backend/repository/UnitaLogisticaRepository.java @@ -0,0 +1,9 @@ +package it.myti.academy.backend.repository; + + import it.myti.academy.backend.model.UnitaLogistica; + import org.springframework.data.jpa.repository.JpaRepository; + + +public interface UnitaLogisticaRepository extends JpaRepository { + UnitaLogistica getById(Long id); +} diff --git a/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java b/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java index 274a836..9932757 100644 --- a/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java +++ b/src/main/java/it/myti/academy/backend/repository/UtenteRepository.java @@ -8,4 +8,7 @@ * Created by david at 2019-02-20 */ public interface UtenteRepository extends JpaRepository { + Utente findByUsername(String username); + Utente getById(Long id); + Utente getByUsername(String username); } diff --git a/src/main/java/it/myti/academy/backend/service/ColloService.java b/src/main/java/it/myti/academy/backend/service/ColloService.java index a9aabd2..b8fd134 100644 --- a/src/main/java/it/myti/academy/backend/service/ColloService.java +++ b/src/main/java/it/myti/academy/backend/service/ColloService.java @@ -1,6 +1,7 @@ package it.myti.academy.backend.service; import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.UnitaLogistica; import it.myti.academy.backend.model.Utente; import java.util.List; @@ -9,5 +10,7 @@ * Created by david at 2019-02-20 */ public interface ColloService { + List getSpedizioniAttiveByUtente(Long utenteId); List getSpedizioniAttiveByUtente(Utente utente); + Collo getSpedizioneAttivaByUtenteAndUnitaLogistica(Utente utente, UnitaLogistica unitaLogistica); } diff --git a/src/main/java/it/myti/academy/backend/service/ContenutoService.java b/src/main/java/it/myti/academy/backend/service/ContenutoService.java new file mode 100644 index 0000000..f81dd3f --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/ContenutoService.java @@ -0,0 +1,10 @@ +package it.myti.academy.backend.service; + +import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Contenuto; + +import java.util.List; + +public interface ContenutoService { + List generaContenutoBaseByCollo(Collo collo); +} diff --git a/src/main/java/it/myti/academy/backend/service/EventoService.java b/src/main/java/it/myti/academy/backend/service/EventoService.java new file mode 100644 index 0000000..aada216 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/EventoService.java @@ -0,0 +1,10 @@ +package it.myti.academy.backend.service; + +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; + +import java.util.List; + +public interface EventoService { + List findEventiAttiviByUtente(Utente utente); +} diff --git a/src/main/java/it/myti/academy/backend/service/HelloWorldService.java b/src/main/java/it/myti/academy/backend/service/HelloWorldService.java deleted file mode 100644 index 2e65ead..0000000 --- a/src/main/java/it/myti/academy/backend/service/HelloWorldService.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.myti.academy.backend.service; - -/** - * Created by david at 2019-02-19 - */ -public interface HelloWorldService { - String sayHello(); - String sayHello(String who); -} diff --git a/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java b/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java new file mode 100644 index 0000000..3384277 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/UnitaLogisticaService.java @@ -0,0 +1,13 @@ +package it.myti.academy.backend.service; + + +import it.myti.academy.backend.model.entitaRisposte.DettagliUnitaLogisticaUtente; +import it.myti.academy.backend.model.errori.eccezioni.UnitaLogisticaNonTrovataException; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; + +import java.util.List; + +public interface UnitaLogisticaService { + List getByUtente(Long idUtente) throws UnitaLogisticaNonTrovataException, UtenteNonTrovatoException; + DettagliUnitaLogisticaUtente getByIdAndUtente(Long idUnitaLogistica, Long idUtente) throws UnitaLogisticaNonTrovataException, UtenteNonTrovatoException; +} diff --git a/src/main/java/it/myti/academy/backend/service/UtenteService.java b/src/main/java/it/myti/academy/backend/service/UtenteService.java new file mode 100644 index 0000000..39ade09 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/UtenteService.java @@ -0,0 +1,10 @@ +package it.myti.academy.backend.service; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; + + +public interface UtenteService { + Utente getById(Long id) throws UtenteNonTrovatoException; + Utente getByUsername(String username); +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java index ac6d87d..c63e9c7 100644 --- a/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java +++ b/src/main/java/it/myti/academy/backend/service/impl/ColloServiceImpl.java @@ -1,12 +1,15 @@ package it.myti.academy.backend.service.impl; +import it.myti.academy.backend.model.UnitaLogistica; import it.myti.academy.backend.model.Utente; import it.myti.academy.backend.repository.ColloRepository; +import it.myti.academy.backend.repository.UtenteRepository; import it.myti.academy.backend.service.ColloService; import it.myti.academy.backend.model.Collo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -19,6 +22,17 @@ public class ColloServiceImpl implements ColloService { @Autowired private ColloRepository colloRepository; + @Autowired + private UtenteRepository utenteRepository; + + @Override + public List getSpedizioniAttiveByUtente(Long utenteId) { + final Utente utente = utenteRepository.findById(utenteId).get(); + if (utente != null) + return getSpedizioniAttiveByUtente(utente); + return new ArrayList<>(); + } + @Override public List getSpedizioniAttiveByUtente(Utente utente) { final List allByUtente = colloRepository.findAllByUtente(utente); @@ -26,4 +40,16 @@ public List getSpedizioniAttiveByUtente(Utente utente) { .filter(collo -> collo.getSpedizione().getArrivoIl().after(new Date())) .collect(Collectors.toList()); } + + + public Collo getSpedizioneAttivaByUtenteAndUnitaLogistica(Utente utente, UnitaLogistica unitaLogistica) { + final List colliUtenteUnitaLogistica = colloRepository.findAllByUtenteAndUnitaLogistica(utente, unitaLogistica); + List SpedizioniAttive = colliUtenteUnitaLogistica.stream() + .filter(collo -> collo.getSpedizione().getArrivoIl().after(new Date())) + .collect(Collectors.toList()); + return SpedizioniAttive.get(0); + + } + + } diff --git a/src/main/java/it/myti/academy/backend/service/impl/ContenutoServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/ContenutoServiceImpl.java new file mode 100644 index 0000000..991b5e5 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/ContenutoServiceImpl.java @@ -0,0 +1,29 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Contenuto; +import it.myti.academy.backend.model.ContenutoBase; +import it.myti.academy.backend.service.ContenutoService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class ContenutoServiceImpl implements ContenutoService { + @Override + public List generaContenutoBaseByCollo(Collo collo) { + + return collo.getContenuti().stream().map(contenuto -> { + ContenutoBase contenutoBase = new ContenutoBase(); + contenutoBase.setDescrizione(contenuto.getDescrizione()); + contenutoBase.setId(contenuto.getId()); + contenutoBase.setNome(contenuto.getNome()); + contenutoBase.setQuantita(contenuto.getQuantita()); + contenutoBase.setTempMaxRichiesta(contenuto.getTempMaxRichiesta()); + contenutoBase.setTempMinRichiesta(contenuto.getTempMinRichiesta()); + contenutoBase.setUnitaDiMisura(contenuto.getUnitaDiMisura()); + return contenutoBase; + }).collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java new file mode 100644 index 0000000..987dda5 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/EventoServiceImpl.java @@ -0,0 +1,31 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Collo; +import it.myti.academy.backend.model.Evento; +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.service.ColloService; +import it.myti.academy.backend.service.EventoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class EventoServiceImpl implements EventoService { + + @Autowired + ColloService colloService; + + @Override + public List findEventiAttiviByUtente(Utente utente) { + List colliUtente = colloService.getSpedizioniAttiveByUtente(utente); + List eventi = new ArrayList<>(); + colliUtente.forEach(collo -> { + collo.getEventi().forEach(evento -> { + eventi.add(evento); + }); + }); + return eventi; + } +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java deleted file mode 100644 index 17f4dea..0000000 --- a/src/main/java/it/myti/academy/backend/service/impl/HelloWorldServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package it.myti.academy.backend.service.impl; - -import it.myti.academy.backend.service.HelloWorldService; -import org.springframework.stereotype.Service; - -/** - * Created by david at 2019-02-19 - */ -@Service -public class HelloWorldServiceImpl implements HelloWorldService { - @Override - public String sayHello() { - return "Hello"; - } - - @Override - public String sayHello(String who) { - return String.format("Hello %s!", who); - } -} diff --git a/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java new file mode 100644 index 0000000..8f02f4d --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/UnitaLogisticaServiceImpl.java @@ -0,0 +1,70 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.*; +import it.myti.academy.backend.model.entitaRisposte.DettagliUnitaLogisticaUtente; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; +import it.myti.academy.backend.repository.UnitaLogisticaRepository; +import it.myti.academy.backend.service.ColloService; +import it.myti.academy.backend.service.ContenutoService; +import it.myti.academy.backend.service.UnitaLogisticaService; +import it.myti.academy.backend.service.UtenteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class UnitaLogisticaServiceImpl implements UnitaLogisticaService { + @Autowired + UtenteService utenteService; + + @Autowired + UnitaLogisticaRepository unitaLogisticaRepository; + + @Autowired + ColloService colloService; + + @Autowired + ContenutoService contenutoService; + + + public List getByUtente(Long idUtente) throws UtenteNonTrovatoException { + Utente utente = utenteService.getById(idUtente); + if(utente == null) + throw new UtenteNonTrovatoException(); + List colliUtente = colloService.getSpedizioniAttiveByUtente(utente); + return colliUtente.stream().map(collo -> { + return generaDettagliRichiestaUnitaByCollo(collo); + }).collect(Collectors.toList()); + } + + public DettagliUnitaLogisticaUtente getByIdAndUtente(Long idUnitaLogistica, Long idUtente) throws UtenteNonTrovatoException { + Utente utente = utenteService.getById(idUtente); + UnitaLogistica unitaLogistica = unitaLogisticaRepository.getById(idUnitaLogistica); + Collo colloUtente = colloService.getSpedizioneAttivaByUtenteAndUnitaLogistica(utente, unitaLogistica); + return generaDettagliRichiestaUnitaByCollo(colloUtente); + } + + + + + + private DettagliUnitaLogisticaUtente generaDettagliRichiestaUnitaByCollo(Collo collo){ + List contenutiBase = contenutoService.generaContenutoBaseByCollo(collo); + EventoParticle evento = (EventoParticle) collo.getEventi().get(collo.getEventi().size() - 1); + DettagliUnitaLogisticaUtente dettagliUnitaLogisticaUtente = new DettagliUnitaLogisticaUtente(); + dettagliUnitaLogisticaUtente.setNome(collo.getUnitaLogistica().getCodice()); + dettagliUnitaLogisticaUtente.setId(collo.getUnitaLogistica().getId()); + dettagliUnitaLogisticaUtente.setLatitudine(evento.getLatitudine().toString()); + dettagliUnitaLogisticaUtente.setLongitudine(evento.getLongitudine().toString()); + dettagliUnitaLogisticaUtente.setUmidita(evento.getUmidita()); + dettagliUnitaLogisticaUtente.setSpedizione(collo.getSpedizione()); + dettagliUnitaLogisticaUtente.setStatus(collo.getUnitaLogistica().getStato()); + dettagliUnitaLogisticaUtente.setTemperatura(evento.getTemperatura()); + dettagliUnitaLogisticaUtente.setContenuti(contenutiBase); + return dettagliUnitaLogisticaUtente; + } + + +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java new file mode 100644 index 0000000..11597de --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/UserDetailsServiceImpl.java @@ -0,0 +1,27 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.repository.UtenteRepository; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import static java.util.Collections.emptyList; + +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + private UtenteRepository applicationUserRepository; + public UserDetailsServiceImpl(UtenteRepository applicationUserRepository) { + this.applicationUserRepository = applicationUserRepository; + } + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Utente applicationUser = applicationUserRepository.findByUsername(username); + if (applicationUser == null) { + throw new UsernameNotFoundException(username); + } + return new User(applicationUser.getUsername(), applicationUser.getPassword(), emptyList()); + } +} diff --git a/src/main/java/it/myti/academy/backend/service/impl/UtenteServiceImpl.java b/src/main/java/it/myti/academy/backend/service/impl/UtenteServiceImpl.java new file mode 100644 index 0000000..170b6a1 --- /dev/null +++ b/src/main/java/it/myti/academy/backend/service/impl/UtenteServiceImpl.java @@ -0,0 +1,28 @@ +package it.myti.academy.backend.service.impl; + +import it.myti.academy.backend.model.Utente; +import it.myti.academy.backend.model.errori.eccezioni.UtenteNonTrovatoException; +import it.myti.academy.backend.repository.UtenteRepository; +import it.myti.academy.backend.service.UtenteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UtenteServiceImpl implements UtenteService { + + @Autowired + UtenteRepository utenteRepository; + + @Override + public Utente getById(Long id) throws UtenteNonTrovatoException { + Utente utente = utenteRepository.getById(id); + if(utente == null) + throw new UtenteNonTrovatoException(); + return utente; + } + + @Override + public Utente getByUsername(String username) { + return utenteRepository.getByUsername(username); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94dfb32..9fc0373 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -9,5 +9,3 @@ spring.datasource.username=sa spring.datasource.password= server.port=9090 - -jwt.secret=MY-SECRET-KEY diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 1bd2c87..44c0194 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -1,6 +1,9 @@ + + INSERT INTO utenti (`id`, `username`, `password`, `nome`) VALUES - (1, 'logistic@galbanino.it', 'ciaociao123', 'Logistica Galbanino'); + (1, 'logistic@galbanino.it', '$2a$10$E4xLUTPcVrQ6zGewW40twucl1sVesuZjAbH8dKTf4eb8KMsnmzxAu', 'Logistica Galbanino'), + (2, 'prova', '$2a$10$E4xLUTPcVrQ6zGewW40twucl1sVesuZjAbH8dKTf4eb8KMsnmzxAu', 'nome'); INSERT INTO tipologie_eventi (`id`, `nome`, `descrizione`) VALUES @@ -19,7 +22,7 @@ VALUES ( 1, 'AAAA', 'UL2', 12, -12, 1); INSERT INTO spedizioni (`id`, `codice_treno`, `partenza_il`, `partenza_da`, `arrivo_il`, `arrivo_a`) VALUES -(1, 'TRAIN_AAAA', '2019-02-01', 'BRESCIA', '2019-02-03', 'MILANO'); +(1, 'TRAIN_AAAA', '2019-02-01', 'BRESCIA', '2019-05-03', 'MILANO'); INSERT INTO colli (`id`, `unita_logistica_id`, `spedizione_id`, `utente_id`) VALUES ( 1, 1, 1, 1); @@ -42,4 +45,9 @@ VALUES (3, 2.7, 81.0, 0, 45.556556, 10.216596, 100), (4, 2.56, 80.8, 0, 45.556556, 10.216596, 100), (5, 2.82, 80.3, 0, 45.556556, 10.216596, 100), - (6, 2.93, 79.9, 0, 45.556556, 10.216596, 100); \ No newline at end of file + (6, 2.93, 79.9, 0, 45.556556, 10.216596, 100); + +INSERT INTO contenuti (`DTYPE`, `id`, `nome`, `descrizione`, `temperatura_minima_ricchiesta`, `temperatura_massima_ricchiesta`, `quantita`, `unita_di_misura`, `collo_id`) +VALUES + ('ContenutoCompleto', 1, 'CAVOLO CAPPUCCIO', 'Detto anche verza', 2, 5, 10, 'kg', 1), + ('ContenutoCompleto', 2, 'STRACCHINO', 'Detto anche robbiola', 2, 3, 20, 'kg', 1); \ No newline at end of file diff --git a/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java b/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java deleted file mode 100644 index 3e688fb..0000000 --- a/src/test/java/it/myti/academy/backend/controller/HelloWorldControllerTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package it.myti.academy.backend.controller; - -import it.myti.academy.backend.service.HelloWorldService; -import it.myti.academy.backend.service.impl.HelloWorldServiceImpl; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -/** - * Created by david at 2019-02-19 - */ -@RunWith(SpringRunner.class) -@WebMvcTest(HelloWorldController.class) -public class HelloWorldControllerTest { - - @TestConfiguration - static class EmployeeServiceImplTestContextConfiguration { - - @Bean - public HelloWorldService employeeService() { - return new HelloWorldServiceImpl(); - } - } - - - @Autowired //2 - private MockMvc mockMvc; - - @Test - public void hello() throws Exception { - final String returnString = "Hello"; - - final MockHttpServletRequestBuilder requestBuilder = get("/hello").contentType(MediaType.TEXT_PLAIN); - mockMvc.perform(requestBuilder) - .andExpect(status().isOk()) - .andExpect(content().string(returnString)); - } - - @Test - public void helloPOST() throws Exception { - final String paramStr = "MESSGE"; - final String expected = "Hello " + paramStr + "!"; - - final MockHttpServletRequestBuilder requestBuilder = post("/hello") - .contentType(MediaType.APPLICATION_JSON) - .content(paramStr); - mockMvc.perform(requestBuilder) - .andExpect(status().isOk()) - .andExpect(content().string(expected)); - } -} \ No newline at end of file