diff --git a/curriculumsearch/pom.xml b/curriculumsearch/pom.xml
index 6d8230f..b88363f 100644
--- a/curriculumsearch/pom.xml
+++ b/curriculumsearch/pom.xml
@@ -47,6 +47,16 @@
spring-boot-devtools
true
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.hibernate.validator
+ hibernate-validator
+ 6.0.13.Final
+
diff --git a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java
index e1df4f6..704c094 100644
--- a/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java
+++ b/curriculumsearch/src/main/java/com/roshka/controller/PostulanteController.java
@@ -1,16 +1,21 @@
package com.roshka.controller;
+
+import javax.validation.ConstraintViolationException;
+
+
import com.roshka.modelo.Postulante;
import com.roshka.repositorio.PostulanteRepository;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.*;
-@Controller
+@Controller
public class PostulanteController {
@Autowired
PostulanteRepository post;
@@ -32,4 +37,20 @@ public class PostulanteController {
return "redirect:/";
}
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ @ExceptionHandler({MethodArgumentNotValidException.class})
+ public ResponseEntity handleValidationExceptions(
+ MethodArgumentNotValidException ex) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST)
+ .body(ex.getMessage());
+ }
+
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ @ExceptionHandler({ConstraintViolationException.class})
+ public ResponseEntity handleValidationExceptions2(
+ ConstraintViolationException ex) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST)
+ .body(ex.getMessage());
+ }
+
}
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java b/curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java
index 818fbc9..8f33d08 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/Estudio.java
@@ -12,6 +12,9 @@ import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Past;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@@ -22,17 +25,28 @@ public class Estudio {
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
+
@Column(name="tipo_de_studio")
+ @NotBlank
private String tipoDeEstudio;
+
@Column(name="institucion")
+ @NotBlank
private String institucion;
+
@Column(name="fecha_desde")
+ @NotNull
+ @Past
private Date fechaDesde;
+
@Column(name="fecha_hasta")
private Date fechaHasta;
+
@Column(name="referencias")
private String referencias;
+
@Column(name="titulo")
+ @NotBlank
private String titulo;
@ManyToOne
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/EstudioReconocimiento.java b/curriculumsearch/src/main/java/com/roshka/modelo/EstudioReconocimiento.java
index 4ed255b..52e2b38 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/EstudioReconocimiento.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/EstudioReconocimiento.java
@@ -9,6 +9,7 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
+import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonBackReference;
@@ -19,10 +20,15 @@ public class EstudioReconocimiento {
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Long id;
+
@Column(name="nombre")
+ @NotBlank
private String nombre;
+
@Column(name="certificado")
+ @NotBlank
private String certificado;
+
@JsonBackReference
@ManyToOne
@JoinColumn
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java b/curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java
index a316f93..a829459 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/Experiencia.java
@@ -14,6 +14,9 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.*;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Past;
@Entity
@Table(name = "experiencia")
@@ -21,10 +24,16 @@ public class Experiencia {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
+
@Column(name = "institucion")
+ @NotBlank
private String institucion;
+
@Column(name = "fecha_desde")
+ @Past
+ @NotNull
private Date fechaDesde;
+
@Column(name = "fecha_hasta")
private Date fechaHasta;
@Column(name = "nombre_referencia")
@@ -32,9 +41,12 @@ public class Experiencia {
@Column(name = "telefono_referencia")
private String telefonoReferencia;
@Column(name = "cargo")
+ @NotBlank
private String cargo;
+
@Column(name = "descripcion")
private String descripcion;
+
@JsonBackReference
@ManyToOne(optional = false)
@JoinColumn
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java b/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java
index b8b0cc8..7f65e71 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/Postulante.java
@@ -1,6 +1,7 @@
package com.roshka.modelo;
import javax.persistence.*;
+import javax.validation.constraints.*;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@@ -20,36 +21,52 @@ public class Postulante {
private long id;
@Column(name="nombre")
+ @NotBlank
+ @Size(max = 255)
private String nombre;
@Column(name = "apellido")
+ @NotBlank
+ @Size(max = 255)
private String apellido;
@Column(name = "ci")
+ @NotBlank
+ @Size(max = 120)
private String ci;
@Column(name = "correo")
+ @NotBlank
+ @Email(message = "Formato incorrecto de correo")
private String correo;
@Column(name = "ciudad")
+ @NotBlank
+ @Size(max = 120)
private String ciudad;
@Column(name = "telefono")
+ @NotBlank
private String telefono;
@Column(name = "fecha_nacimiento")
+ @NotNull
+ @Past
private Date fechaNacimiento;
@Column(name = "resumen")
private String resumen;
@Column(name = "nivel_ingles")
+ @Min(value = 1)
+ @Max(value = 5)
private long nivelIngles;
@Column(name = "curriculum")
private String curriculum;
@Column(name = "modalidad")
+ @NotNull
private String modalidad;
@Column(name = "disponibilidad")
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java b/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java
index 21aa0ff..f74db15 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/PostulanteTecnologia.java
@@ -8,6 +8,9 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
@@ -18,15 +21,20 @@ public class PostulanteTecnologia {
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private long id ;
+
@Column(name="nivel")
+ @Min(value = 1)
+ @Max(value = 5)
private Long nivel;
+
@ManyToOne()
@JoinColumn
private Tecnologia tecnologia;
- @ManyToOne()
+
+ @ManyToOne()
@JoinColumn
@JsonBackReference
- private Postulante postulante;
+ private Postulante postulante;
public long getId() {
return id;
}
diff --git a/curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java b/curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java
index a870a28..faa72ec 100644
--- a/curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java
+++ b/curriculumsearch/src/main/java/com/roshka/modelo/Tecnologia.java
@@ -6,6 +6,7 @@ import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import javax.validation.constraints.NotBlank;
@Entity
@Table(name="tecnologia")
@@ -16,6 +17,7 @@ public class Tecnologia {
private long id;
@Column(name="nombre")
+ @NotBlank
private String nombre;
diff --git a/curriculumsearch/src/main/resources/static/main.js b/curriculumsearch/src/main/resources/static/main.js
index 96c86fa..fb66ba7 100644
--- a/curriculumsearch/src/main/resources/static/main.js
+++ b/curriculumsearch/src/main/resources/static/main.js
@@ -96,7 +96,9 @@ form.addEventListener("submit",(evt)=>{
postData('postulante', serializeJSON(form))
.then(response => {
- location.replace(response.url);
+ if(response.status==200 || response.status==302){
+ location.replace(response.url);
+ }
});
evt.preventDefault();
} );
\ No newline at end of file