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