diff --git a/pom.xml b/pom.xml index 4f54660..f23c1e6 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.springframework.boot @@ -8,35 +8,36 @@ 3.2.3 - com.app - backend + com.fcfm + back-end 0.0.1-SNAPSHOT - backend - first microservice in spring + back-end + Demo project for Spring Boot 17 + org.springframework.boot spring-boot-starter-data-jpa + org.springframework.boot spring-boot-starter-web - - org.springframework.boot - spring-boot-devtools - runtime - true - org.springframework.boot spring-boot-starter-test test + + mysql + mysql-connector-java + 8.0.13 + @@ -48,4 +49,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/app/backend/BackendApplication.java b/src/main/java/com/app/backend/BackendApplication.java index cf3920b..949edd6 100644 --- a/src/main/java/com/app/backend/BackendApplication.java +++ b/src/main/java/com/app/backend/BackendApplication.java @@ -2,7 +2,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +@EnableJpaRepositories @SpringBootApplication public class BackendApplication { diff --git a/src/main/java/com/app/backend/controller/AlumnoApiController.java b/src/main/java/com/app/backend/controller/AlumnoApiController.java new file mode 100644 index 0000000..0d5d179 --- /dev/null +++ b/src/main/java/com/app/backend/controller/AlumnoApiController.java @@ -0,0 +1,22 @@ +package com.app.backend.controller; + +import com.app.backend.model.Alumno; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequestMapping("/") +public interface AlumnoApiController { + @PostMapping("/create-alumno") + public void createAlumno(@RequestBody Alumno newAlumno); + @GetMapping("/alumno/{id}") + public Alumno getAlumnoById(@PathVariable Long id); + + @GetMapping("/alumno") + public List getAlumnoList(); + + @PutMapping("/update-alumno/{id}") + public Alumno updateAlumno(@PathVariable Long id, Alumno updatedAlumno); + @DeleteMapping("/delete-alumno/{id}") + public void deleteAlumno(@PathVariable Long id); +} diff --git a/src/main/java/com/app/backend/controller/impl/AlumnoApiControllerImpl.java b/src/main/java/com/app/backend/controller/impl/AlumnoApiControllerImpl.java new file mode 100644 index 0000000..e0a444d --- /dev/null +++ b/src/main/java/com/app/backend/controller/impl/AlumnoApiControllerImpl.java @@ -0,0 +1,41 @@ +package com.app.backend.controller.impl; + +import com.app.backend.controller.AlumnoApiController; +import com.app.backend.model.Alumno; +import com.app.backend.model.Alumno; +import com.app.backend.service.AlumnoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class AlumnoApiControllerImpl implements AlumnoApiController { + + @Autowired + AlumnoService alumnoService; + @Override + public void createAlumno(@RequestBody Alumno newAlumno){ + alumnoService.createAlumno(newAlumno); + } + + @Override + public Alumno getAlumnoById(@PathVariable Long id){ + return alumnoService.getAlumnoById(id); + } + + @Override + public List getAlumnoList(){ + return alumnoService.getAlumnoList(); + } + + @Override + public Alumno updateAlumno(Long id, Alumno updatedAlumno){ + return alumnoService.updateAlumno(id, updatedAlumno); + } + + @Override + public void deleteAlumno(Long id){ + alumnoService.deleteAlumno(id); + } +} diff --git a/src/main/java/com/app/backend/model/Alumno.java b/src/main/java/com/app/backend/model/Alumno.java new file mode 100644 index 0000000..9bfd505 --- /dev/null +++ b/src/main/java/com/app/backend/model/Alumno.java @@ -0,0 +1,94 @@ +package com.app.backend.model; + +import java.sql.Date; + +public class Alumno { + + private String primerNombre; + + + private String segundoNombre; + + + private String apellidoPat; + + + private String apellidoMat; + + + private Date fechaNac; + + + private String curp; + + + private String email; + + + public Alumno(String primerNombre, String segundoNombre, String apellidoPat, String apellidoMat, Date fechaNac, String curp, String email){ + this.primerNombre = primerNombre; + this.segundoNombre = segundoNombre; + this.apellidoMat = apellidoMat; + this.apellidoPat = apellidoPat; + this.fechaNac = fechaNac; + this.curp = curp; + this.email = email; + } + + public Alumno(){} + public String getPrimerNombre() { + return primerNombre; + } + + public void setPrimerNombre(String primerNombre) { + this.primerNombre = primerNombre; + } + + public String getSegundoNombre() { + return segundoNombre; + } + + public void setSegundoNombre(String segundoNombre) { + this.segundoNombre = segundoNombre; + } + + public String getApellidoPat() { + return apellidoPat; + } + + public void setApellidoPat(String apellidoPat) { + this.apellidoPat = apellidoPat; + } + + public String getApellidoMat() { + return apellidoMat; + } + + public void setApellidoMat(String apellidoMat) { + this.apellidoMat = apellidoMat; + } + + public Date getFechaNac() { + return fechaNac; + } + + public void setFechaNac(Date fechaNac) { + this.fechaNac = fechaNac; + } + + public String getCurp() { + return curp; + } + + public void setCurp(String curp) { + this.curp = curp; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} \ No newline at end of file diff --git a/src/main/java/com/app/backend/repository/AlumnoRepository.java b/src/main/java/com/app/backend/repository/AlumnoRepository.java new file mode 100644 index 0000000..e014a65 --- /dev/null +++ b/src/main/java/com/app/backend/repository/AlumnoRepository.java @@ -0,0 +1,21 @@ +package com.app.backend.repository; + +import com.app.backend.model.Alumno; +import com.app.backend.repository.Entity.AlumnoEntity; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface AlumnoRepository { + void insertar(AlumnoEntity alumnoEntity); + + AlumnoEntity getAlumnoById(Long id); + + List getAlumnoList(); + + void deleteAlumno(Long id); + + AlumnoEntity updateAlumno(AlumnoEntity alumnoEntity); + +} diff --git a/src/main/java/com/app/backend/repository/Entity/AlumnoEntity.java b/src/main/java/com/app/backend/repository/Entity/AlumnoEntity.java new file mode 100644 index 0000000..82381a7 --- /dev/null +++ b/src/main/java/com/app/backend/repository/Entity/AlumnoEntity.java @@ -0,0 +1,112 @@ +package com.app.backend.repository.Entity; +import jakarta.persistence.*; + +import java.sql.Date; + +@Entity +@Table(name = "alumno") +public class AlumnoEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="alumno_id") + private Long alumnoId; + + @Column(name="primer_nombre") + private String primerNombre; + + @Column(name="segundo_nombre") + private String segundoNombre; + + @Column(name="apellido_pat") + private String apellidoPat; + + @Column(name="apellido_mat") + private String apellidoMat; + + @Column(name="fecha_nac") + private Date fechaNac; + + @Column(name="curp") + private String curp; + + @Column(name="email") + + private String email; + + + public AlumnoEntity(String primerNombre, String segundoNombre, String apellidoMat, String apellidoPat, Date fechaNac, String curp, String email){ + this.primerNombre = primerNombre; + this.segundoNombre = segundoNombre; + this.apellidoMat = apellidoMat; + this.apellidoPat = apellidoPat; + this.fechaNac = fechaNac; + this.curp = curp; + this.email = email; + } + + public AlumnoEntity(){} + + public Long getAlumnoId() { + return alumnoId; + } + + public void setAlumnoId(Long alumnoId) { + this.alumnoId = alumnoId; + } + + public String getPrimerNombre() { + return primerNombre; + } + + public void setPrimerNombre(String primerNombre) { + this.primerNombre = primerNombre; + } + + public String getSegundoNombre() { + return segundoNombre; + } + + public void setSegundoNombre(String segundoNombre) { + this.segundoNombre = segundoNombre; + } + + public String getApellidoPat() { + return apellidoPat; + } + + public void setApellidoPat(String apellidoPat) { + this.apellidoPat = apellidoPat; + } + + public String getApellidoMat() { + return apellidoMat; + } + + public void setApellidoMat(String apellidoMat) { + this.apellidoMat = apellidoMat; + } + + public Date getFechaNac() { + return fechaNac; + } + + public void setFechaNac(Date fechaNac) { + this.fechaNac = fechaNac; + } + + public String getCurp() { + return curp; + } + + public void setCurp(String curp) { + this.curp = curp; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/src/main/java/com/app/backend/repository/impl/AlumnoRepositoryImpl.java b/src/main/java/com/app/backend/repository/impl/AlumnoRepositoryImpl.java new file mode 100644 index 0000000..879e8bb --- /dev/null +++ b/src/main/java/com/app/backend/repository/impl/AlumnoRepositoryImpl.java @@ -0,0 +1,43 @@ +package com.app.backend.repository.impl; +import com.app.backend.repository.AlumnoRepository; +import com.app.backend.repository.Entity.AlumnoEntity; +import jakarta.persistence.EntityManager; +import jakarta.transaction.Transactional; +import jakarta.persistence.*; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class AlumnoRepositoryImpl implements AlumnoRepository{ + + @PersistenceContext + private EntityManager em; + + @Transactional + public void insertar(AlumnoEntity alumnoEntity){ + em.getTransaction().begin(); + em.persist(alumnoEntity); + em.getTransaction().commit(); + } + + @Override + public AlumnoEntity getAlumnoById(Long id){ + return em.find(AlumnoEntity.class, id); + } + @Override + public List getAlumnoList(){ + TypedQuery query = em.createQuery("SELECT a FROM Alumno a", AlumnoEntity.class); + return query.getResultList(); + } + + @Transactional + public void deleteAlumno(Long id){ + em.remove(getAlumnoById(id)); + } + + @Transactional + public AlumnoEntity updateAlumno(AlumnoEntity alumnoEntity){ + return em.merge(alumnoEntity); + } +} diff --git a/src/main/java/com/app/backend/service/AlumnoService.java b/src/main/java/com/app/backend/service/AlumnoService.java new file mode 100644 index 0000000..7f8c48f --- /dev/null +++ b/src/main/java/com/app/backend/service/AlumnoService.java @@ -0,0 +1,19 @@ +package com.app.backend.service; + +import com.app.backend.model.Alumno; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public interface AlumnoService { + + public void createAlumno(Alumno newStudent); + public Alumno getAlumnoById(Long id); + + public void deleteAlumno(Long id); + + public List getAlumnoList(); + + public Alumno updateAlumno(long id, Alumno updatedAlumno); +} diff --git a/src/main/java/com/app/backend/service/impl/AlumnoServiceImpl.java b/src/main/java/com/app/backend/service/impl/AlumnoServiceImpl.java new file mode 100644 index 0000000..83a7175 --- /dev/null +++ b/src/main/java/com/app/backend/service/impl/AlumnoServiceImpl.java @@ -0,0 +1,63 @@ +package com.app.backend.service.impl; + +import com.app.backend.model.Alumno; +import com.app.backend.repository.AlumnoRepository; +import com.app.backend.repository.Entity.AlumnoEntity; +import com.app.backend.service.AlumnoService; +import com.app.backend.utils.AlumnoMapper; +import jakarta.annotation.Nullable; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + + +@Service +public class AlumnoServiceImpl implements AlumnoService { + + @Autowired + private AlumnoRepository alumnoRepository; + + public void createAlumno(Alumno newAlumno){ + AlumnoEntity alumnoEntity = AlumnoMapper.alumnoModelToAlumnoEntity(newAlumno); + alumnoRepository.insertar(alumnoEntity); + } + + @Nullable + public Alumno getAlumnoById(Long id){ + AlumnoEntity alumnoEntity = alumnoRepository.getAlumnoById(id); + Alumno alumno = AlumnoMapper.alumnoEntitytoAlumnoModel(alumnoEntity); + return alumno; + } + + @Override + public void deleteAlumno(Long id){ + alumnoRepository.deleteAlumno(id); + } + + @Override + public List getAlumnoList(){ + List alumnoEntityList = alumnoRepository.getAlumnoList(); + List alumnoList = new ArrayList<>(); + for(AlumnoEntity alumnoEntity : alumnoEntityList){ + alumnoList.add(AlumnoMapper.alumnoEntitytoAlumnoModel(alumnoEntity)); + } + return alumnoList; + } + + @Override + public Alumno updateAlumno(long id, Alumno updatedAlumno){ + Alumno existingAlumno = getAlumnoById(id); + if (existingAlumno != null) { + existingAlumno.setPrimerNombre(updatedAlumno.getPrimerNombre()); + existingAlumno.setSegundoNombre(updatedAlumno.getSegundoNombre()); + existingAlumno.setApellidoPat(updatedAlumno.getApellidoPat()); + existingAlumno.setApellidoMat(updatedAlumno.getApellidoMat()); + existingAlumno.setCurp(updatedAlumno.getCurp()); + existingAlumno.setFechaNac(updatedAlumno.getFechaNac()); + existingAlumno.setEmail(updatedAlumno.getEmail()); + } + return AlumnoMapper.alumnoEntitytoAlumnoModel(alumnoRepository.updateAlumno(AlumnoMapper.alumnoModelToAlumnoEntity(existingAlumno))); + } +} diff --git a/src/main/java/com/app/backend/utils/AlumnoMapper.java b/src/main/java/com/app/backend/utils/AlumnoMapper.java new file mode 100644 index 0000000..80c815e --- /dev/null +++ b/src/main/java/com/app/backend/utils/AlumnoMapper.java @@ -0,0 +1,35 @@ +package com.app.backend.utils; + +import com.app.backend.model.Alumno; +import com.app.backend.repository.Entity.AlumnoEntity; + +import java.sql.Date; + +public class AlumnoMapper { + + public static Alumno alumnoEntitytoAlumnoModel(AlumnoEntity alumnoEntity){ + Alumno alumno = new Alumno( + alumnoEntity.getPrimerNombre(), + alumnoEntity.getSegundoNombre(), + alumnoEntity.getApellidoPat(), + alumnoEntity.getApellidoMat(), + alumnoEntity.getFechaNac(), + alumnoEntity.getCurp(), + alumnoEntity.getEmail()); + return alumno; + } + + public static AlumnoEntity alumnoModelToAlumnoEntity(Alumno alumno){ + + AlumnoEntity alumnoEntity = new AlumnoEntity( + alumno.getPrimerNombre(), + alumno.getSegundoNombre(), + alumno.getApellidoPat(), + alumno.getApellidoMat(), + alumno.getFechaNac(), + alumno.getCurp(), + alumno.getEmail() + ); + return alumnoEntity; + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a0099ef..e69de29 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +0,0 @@ -spring.application.name=backend -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..c455c4f --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,19 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/universidades?serverTimezone=UTC + # spring.datasource.url=jdbc:mysql:3314/universidades + username: root + password: P3dr0@nt0n10 + driver-class-name: com.mysql.jdbc.Driver + # spring.datasource.driver.class=com.mysql.jdbc.Driver + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.MySQL8Dialect + # spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect + naming.physical-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl + + + +server: + port: 8080 \ No newline at end of file