diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 index 7fd5c35..f868d79 --- a/pom.xml +++ b/pom.xml @@ -1,124 +1,201 @@ + + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - fr.istic.taa - jaxrs-example - jar - 1.0-SNAPSHOT - jaxrs-example - http://maven.apache.org - - - 11 - 11 - 1.6.3 - + org.springframework.boot + spring-boot-sample-data-jpa + 3.1.2 + Spring Boot Data JPA Sample + Spring Boot Data JPA Sample + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/../.. + 11 + 11 + - - + junit junit - 4.12 + 4.13.2 test - - - org.hibernate - hibernate-core - 6.2.7.Final + org.springframework.boot + spring-boot-starter-data-jpa + 3.1.2 + + + org.springframework + spring-beans + + - org.slf4j - slf4j-log4j12 - 1.7.30 + org.springframework.boot + spring-boot-starter-web + 3.1.2 org.hsqldb hsqldb 2.7.2 + - com.mysql - mysql-connector-j - 8.1.0 - - - - - org.jboss.resteasy - resteasy-undertow - 6.2.4.Final - - - - org.jboss.resteasy - resteasy-jackson2-provider - 6.2.4.Final - - - - org.jboss.resteasy - resteasy-jaxb-provider - 6.2.4.Final + javax.validation + validation-api + 2.0.1.Final - - - - io.swagger.core.v3 - swagger-jaxrs2-jakarta - 2.2.15 - + + + mysql + mysql-connector-java + 8.0.21 + - io.swagger.core.v3 - swagger-jaxrs2-servlet-initializer-v2 - 2.2.15 + com.h2database + h2 + 1.4.192 + runtime + + org.springframework.boot + spring-boot-starter-test + 3.1.2 - - - org.mapstruct - mapstruct - 1.6.3 - - - - org.projectlombok - lombok - 1.18.42 - provided - - + test + - install + + org.springframework.boot + spring-boot-maven-plugin + 3.1.2 + org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 + maven-eclipse-plugin - 11 - 11 - - - org.projectlombok - lombok - 1.18.42 - - - org.mapstruct - mapstruct-processor - 1.6.3 - - + false + + + .settings/org.eclipse.jdt.ui.prefs + ${main.basedir}/eclipse/org.eclipse.jdt.ui.prefs + + + .settings/org.eclipse.jdt.core.prefs + ${main.basedir}/eclipse/org.eclipse.jdt.core.prefs + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Tests.java + + + **/Abstract*.java + + + file:/dev/./urandom + true + - + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.springframework.boot + + + spring-boot-maven-plugin + + + [3.1.2,) + + + build-info + + + + + + + + + + + + + + + spring-snapshots + Spring Snapshots + http://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + http://repo.spring.io/milestone + + false + + + + + + spring-snapshots + Spring Snapshots + http://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + http://repo.spring.io/milestone + + false + + + + spring-releases + Spring Releases + http://repo.spring.io/release + + false + + + + diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/AbstractJpaDao.java b/src/main/java/fr/istic/taa/jaxrs/DAO/AbstractJpaDao.java deleted file mode 100644 index 5cbd169..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/AbstractJpaDao.java +++ /dev/null @@ -1,60 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import java.io.Serializable; -import java.util.List; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; -public abstract class AbstractJpaDao implements IGenericDao { - protected EntityManager em; - private Class entityClass; - - public AbstractJpaDao() { - this.em = EntityManagerHelper.getEntityManager(); - } - - //Pour connaitre qu'on travaille avec quelle classe - public void setClass(Class class2){ - this.entityClass= class2; - } - - public T findOne(K id) { - return em.find(entityClass, id); - } - - public List findAll() { - return em.createQuery("select e from " + entityClass.getName() + " as e", entityClass).getResultList(); - } - - //CRUD - public void create(T entity){ - EntityTransaction t = em.getTransaction(); - t.begin(); - em.persist(entity); - t.commit(); - } - - public T findById(K id) { - return em.find(entityClass, id); - } - - public T update(T entity){ - EntityTransaction t = em.getTransaction(); - t.begin(); - T T_sync = em.merge(entity); - t.commit(); - return T_sync; - } - - public void delete(T entity){ - EntityTransaction t = em.getTransaction(); - t.begin(); - em.remove(entity); - t.commit(); - } - - public void deleteById(K id) { - T T_to_be_deleted = em.find(entityClass, id); - em.remove(T_to_be_deleted); - } -} \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java b/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java deleted file mode 100644 index e5f7887..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/EntityManagerHelper.java +++ /dev/null @@ -1,50 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Persistence; - -public class EntityManagerHelper { - - private static final EntityManagerFactory emf; - private static final ThreadLocal threadLocal; - - static { - emf = Persistence.createEntityManagerFactory("dev"); - threadLocal = new ThreadLocal(); - } - - public static EntityManager getEntityManager() { - EntityManager em = threadLocal.get(); - - if (em == null) { - em = emf.createEntityManager(); - threadLocal.set(em); - } - return em; - } - - public static void closeEntityManager() { - EntityManager em = threadLocal.get(); - if (em != null) { - em.close(); - threadLocal.set(null); - } - } - - public static void closeEntityManagerFactory() { - emf.close(); - } - - public static void beginTransaction() { - getEntityManager().getTransaction().begin(); - } - - public static void rollback() { - getEntityManager().getTransaction().rollback(); - } - - public static void commit() { - getEntityManager().getTransaction().commit(); - } -} \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/IGenericDao.java b/src/main/java/fr/istic/taa/jaxrs/DAO/IGenericDao.java deleted file mode 100644 index 87a1f40..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/IGenericDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import java.io.Serializable; -import java.util.List; - -public interface IGenericDao { - void create(final T entity); - T findById(final K id); - T update(final T entity); - void delete(final T entity); - void deleteById(final K id); - List findAll(); - T findOne(final K id); -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java deleted file mode 100644 index 7fac75a..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuestionDAO.java +++ /dev/null @@ -1,82 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import java.util.ArrayList; -import java.util.List; - -import fr.istic.taa.jaxrs.metier.Choix; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Reponse; -import fr.istic.taa.jaxrs.metier.ReponseCourte; -import fr.istic.taa.jaxrs.metier.Session; -import fr.istic.taa.jaxrs.metier.Utilisateur; -import jakarta.persistence.EntityTransaction; - -public class QuestionDAO extends AbstractJpaDao { - public QuestionDAO(){ - super(); - this.setClass(Question.class); - } - - - public void addReponse(String reponse, int questionId){ - EntityTransaction t = em.getTransaction(); - t.begin(); - Question q = em.find(Question.class,questionId); - - q.getReponse().getReponses().add(reponse); - em.merge(q); - t.commit(); - } - - - public void deleteReponse( int questionId) { - EntityTransaction t = em.getTransaction(); - t.begin(); - Question q = em.find(Question.class,questionId); - - q.getReponse().setReponses(new ArrayList<>()); - em.merge(q); - t.commit(); - } - - - public void setReponse(Reponse rep, Integer id) { - EntityTransaction t = em.getTransaction(); - t.begin(); - Question q = em.find(Question.class,id); - q.setReponse(rep); - em.merge(q); - t.commit(); - } - - - public void setChoix(Integer id) { - setReponse(new Choix(),id); - } - - public void setReponseCourte(Integer id) { - setReponse(new ReponseCourte(),id); - } - - - public void addChoix(Integer id, String choix) { - EntityTransaction t = em.getTransaction(); - t.begin(); - Question q = em.find(Question.class,id); - - ((Choix)q.getReponse()).getChoix().add(choix); - em.merge(q); - t.commit(); - } - - - public void changeQuestion(String newQuestion, Integer id) { - EntityTransaction t = em.getTransaction(); - t.begin(); - Question q = em.find(Question.class,id); - q.setQuestion(newQuestion); - em.merge(q); - t.commit(); - } -} - diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java deleted file mode 100644 index fcd6c42..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/QuizzDAO.java +++ /dev/null @@ -1,32 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import fr.istic.taa.jaxrs.metier.Question; -import jakarta.persistence.EntityTransaction; -import fr.istic.taa.jaxrs.metier.Quizz; - -public class QuizzDAO extends AbstractJpaDao { - public QuizzDAO(){ - super(); - this.setClass(Quizz.class); - } - - public void deleteAllQustion(int quizz_id){ - EntityTransaction et= em.getTransaction(); - et.begin(); - Quizz quizz = em.find(Quizz.class, quizz_id); - quizz.getQuestions().clear(); - em.merge(quizz); - et.commit(); - } - - public void addQuestion(int quizz_id, int question_id){ - EntityTransaction et= em.getTransaction(); - et.begin(); - Quizz quizz = em.find(Quizz.class, quizz_id); - Question question =em.find(Question.class, question_id); - - quizz.getQuestions().add(question); - em.merge(quizz); - et.commit(); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/ReponseDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/ReponseDAO.java deleted file mode 100644 index cb27451..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/ReponseDAO.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import fr.istic.taa.jaxrs.metier.Reponse; - -public class ReponseDAO extends AbstractJpaDao { - public ReponseDAO(){ - super(); - this.setClass(Reponse.class); - } - - /*public List getGoodResponses(){ - EntityTransaction t=em.getTransaction(); - t.begin(); - Query query=em.createQuery("select r from Reponse r where r.reponses"); - List lString=query.getResultList(); - t.commit(); - return lString; - }*/ -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java deleted file mode 100644 index 0b29fec..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/SessionDAO.java +++ /dev/null @@ -1,27 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - - -import jakarta.persistence.EntityTransaction; -import jakarta.persistence.Query; -import fr.istic.taa.jaxrs.metier.Session; - -import java.util.List; - -public class SessionDAO extends AbstractJpaDao { - public SessionDAO() { - super(); - this.setClass(Session.class); - } - - public List findByTheme(String theme){ - EntityTransaction t=em.getTransaction(); - Query query=em.createQuery("select s from Session s where s.theme=:theme"); - query.setParameter("theme",theme); - List sessions=query.getResultList(); - if(sessions.size()>0){ - return sessions; - }else{ - return null; - } - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java b/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java deleted file mode 100644 index 89cf260..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DAO/UtilisateurDAO.java +++ /dev/null @@ -1,40 +0,0 @@ -package fr.istic.taa.jaxrs.DAO; - -import jakarta.persistence.EntityTransaction; -import fr.istic.taa.jaxrs.metier.Session; -import fr.istic.taa.jaxrs.metier.Utilisateur; - -import java.util.List; - -public class UtilisateurDAO extends AbstractJpaDao { - public UtilisateurDAO() { - super(); - this.setClass(Utilisateur.class); - } - - public Utilisateur findByEmail(String email) { - List results = - em.createQuery("SELECT u FROM Utilisateur u WHERE u.email = :email", Utilisateur.class) - .setParameter("email", email).getResultList(); - - if (results.isEmpty()) { - return null; - } else { - return results.get(0); - } - } - - public void addToSession(int sessionId, int userId) { - EntityTransaction t = em.getTransaction(); - t.begin(); - Session s = em.find(Session.class, sessionId); - Utilisateur u = em.find(Utilisateur.class, userId); - - //FAUT AJOUTER OWNING SIDE ( Ici u --> s) - u.getSession().add(s); - //Jsp il faut birectionnelle ou pas? - //s.getUtilisateurs().add(u); - em.merge(u); - t.commit(); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java deleted file mode 100644 index 60211d7..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/QuestionDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.istic.taa.jaxrs.DTO; - -import jakarta.xml.bind.annotation.XmlRootElement; -import lombok.Data; - -import java.util.List; - -@Data -@XmlRootElement -public class QuestionDTO { - private int id; - private String question; - private List reponses_string; - -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java deleted file mode 100644 index d7cfd39..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/QuizzDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.istic.taa.jaxrs.DTO; - -import jakarta.xml.bind.annotation.XmlRootElement; -import lombok.Data; -import java.util.List; - -@Data -@XmlRootElement -public class QuizzDTO { - private int id; - private Integer sessionId; - private Integer utilisateurId; - private List questionsId; -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java deleted file mode 100644 index 82cfc39..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/SessionDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.istic.taa.jaxrs.DTO; - -import jakarta.xml.bind.annotation.XmlRootElement; -import lombok.Data; - -import java.util.List; - -@Data -@XmlRootElement -public class SessionDTO { - private String theme; - private int codePIN; - private int id; - - private List quizzsId; - private List utilisateursId; -} diff --git a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java b/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java deleted file mode 100644 index de65d4b..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/DTO/UtilisateurDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package fr.istic.taa.jaxrs.DTO; - -import jakarta.xml.bind.annotation.XmlRootElement; -import lombok.Data; - -@Data -@XmlRootElement -public class UtilisateurDTO { - private int id; - private String name; - private String email; - private String password; -} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java deleted file mode 100644 index 8ed7e57..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuestionMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package fr.istic.taa.jaxrs.Mapper; - -import fr.istic.taa.jaxrs.DTO.QuestionDTO; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Reponse; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.factory.Mappers; - -import java.util.ArrayList; -import java.util.List; - -@Mapper -public interface QuestionMapper { - QuestionMapper INSTANCE = Mappers.getMapper( QuestionMapper.class ); - - - @Mapping(target = "reponses_string", expression = "java(question_ReponseString(question.getReponse()))") - QuestionDTO toDTO(Question question); - - Question toEntity(QuestionDTO questionDTO); - - List toDTOs(List questionList); - - default List question_ReponseString(Reponse reponse){ - return reponse.getReponses(); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java deleted file mode 100644 index 8ac65da..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/QuizzMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package fr.istic.taa.jaxrs.Mapper; - -import fr.istic.taa.jaxrs.DTO.QuizzDTO; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Quizz; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.factory.Mappers; - -import java.util.ArrayList; -import java.util.List; - -@Mapper -public interface QuizzMapper { - QuizzMapper INSTANCE = Mappers.getMapper( QuizzMapper.class ); - - //https://www.baeldung.com/mapstruct-map-source-object-target-list - //https://mapstruct.org/ - @Mapping(target="sessionId", source="session.id") - @Mapping(target="utilisateurId", source = "utilisateur.id") - @Mapping(target="questionsId",expression="java(function_mapQ(quizz.getQuestions()))") - QuizzDTO toDTO(Quizz quizz); - Quizz toEntity(QuizzDTO quizzDTO); - - List toDTOs(List quizzes); - - default List function_mapQ(List questionList){ - List list=new ArrayList(); - for(Question question : questionList){ - list.add(question.getId()); - } - return list; - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java deleted file mode 100644 index 573a1ad..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/SessionMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package fr.istic.taa.jaxrs.Mapper; - -import fr.istic.taa.jaxrs.DTO.SessionDTO; -import fr.istic.taa.jaxrs.metier.Quizz; -import fr.istic.taa.jaxrs.metier.Session; - -import fr.istic.taa.jaxrs.metier.Utilisateur; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.factory.Mappers; - -import java.util.ArrayList; -import java.util.List; - -@Mapper -public interface SessionMapper { - SessionMapper INSTANCE = Mappers.getMapper( SessionMapper.class ); - - @Mapping(target="utilisateursId",expression="java(function_mapU(session.getUtilisateurs()))") - @Mapping(target="quizzsId",expression="java(function_mapQ(session.getQuizzs()))") - SessionDTO toDTO(Session session); - Session toEntity(SessionDTO sessionDTO); - - List toDTOs(List sessions); - - //https://www.baeldung.com/mapstruct-map-source-object-target-list - default List function_mapU(List utilisateurList) { - List result = new ArrayList<>(); - for (Utilisateur utilisateur : utilisateurList) { - result.add(utilisateur.getId()); - } - return result; - } - - default List function_mapQ(List quizzList) { - List result = new ArrayList<>(); - for (Quizz quizz : quizzList) { - result.add(quizz.getId()); - } - return result; - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java b/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java deleted file mode 100644 index 6ef30f8..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/Mapper/UtilisateurMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.istic.taa.jaxrs.Mapper; - -import fr.istic.taa.jaxrs.DTO.UtilisateurDTO; -import fr.istic.taa.jaxrs.metier.Utilisateur; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface UtilisateurMapper { - UtilisateurMapper INSTANCE = Mappers.getMapper(UtilisateurMapper.class); - - UtilisateurDTO toDTO(Utilisateur utilisateur); - Utilisateur toEntity(UtilisateurDTO dto); - - List toDTOs(List utilisateurList); -} diff --git a/src/main/java/fr/istic/taa/jaxrs/RestServer.java b/src/main/java/fr/istic/taa/jaxrs/RestServer.java deleted file mode 100644 index 21d4d2e..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/RestServer.java +++ /dev/null @@ -1,28 +0,0 @@ -package fr.istic.taa.jaxrs; - -import io.undertow.Undertow; -import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer; - -import java.util.logging.Logger; - -/** - * RESTfull microservice, based on JAX-RS and JBoss Undertow - * - */ -public class RestServer { - - private static final Logger logger = Logger.getLogger(RestServer.class.getName()); - - public static void main(String[] args) { - UndertowJaxrsServer ut = new UndertowJaxrsServer(); - TestApplication ta = new TestApplication(); - ut.deploy(ta); - ut.start( - Undertow.builder() - .addHttpListener(8080, "localhost") - - ); - - logger.info("JAX-RS based micro-service running!"); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java b/src/main/java/fr/istic/taa/jaxrs/TestApplication.java deleted file mode 100644 index 24bcd2a..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * JBoss, Home of Professional Open Source - * Copyright Red Hat, Inc., and individual contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package fr.istic.taa.jaxrs; - -import java.util.HashSet; -import java.util.Set; - -import fr.istic.taa.jaxrs.rest.*; -import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource; -import jakarta.ws.rs.ApplicationPath; -import jakarta.ws.rs.core.Application; - -@ApplicationPath("/") -public class TestApplication extends Application { - - - @Override - public Set> getClasses() { - - final Set> clazzes = new HashSet>(); - - clazzes.add(OpenApiResource.class); - clazzes.add(PetResource.class); - clazzes.add(QuestionResource.class); - clazzes.add(QuizzResource.class); - clazzes.add(UtilisateurResource.class); - clazzes.add(SessionResource.class); - clazzes.add(SwaggerResource.class); - return clazzes; - } - -} diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java b/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java deleted file mode 100644 index c8738b9..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java +++ /dev/null @@ -1,44 +0,0 @@ -package fr.istic.taa.jaxrs.domain; - -import java.util.ArrayList; -import java.util.List; - -import io.swagger.v3.oas.models.tags.Tag; -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.XmlElementWrapper; -import jakarta.xml.bind.annotation.XmlRootElement; - -@XmlRootElement(name = "Pet") -public class Pet { - private long id; - private String name; - private List tags = new ArrayList(); - - @XmlElement(name = "id") - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - @XmlElement(name = "name") - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @XmlElementWrapper(name = "tags") - @XmlElement(name = "tag") - public List getTags() { - return tags; - } - - public void setTags(List tags) { - this.tags = tags; - } -} \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java deleted file mode 100644 index 3087395..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - -import fr.istic.taa.jaxrs.domain.Pet; -import io.swagger.v3.oas.annotations.Parameter; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Response; - -@Path("pet") -@Produces({"application/json", "application/xml"}) -public class PetResource { - - @GET - @Path("/{petId}") - public Pet getPetById(@PathParam("petId") Long petId) { - // return pet - return new Pet(); - } - - @GET - @Path("/") - public Pet getPet(Long petId) { - return new Pet(); - } - - - @POST - @Consumes("application/json") - public Response addPet( - @Parameter(description = "Pet object that needs to be added to the store", required = true) Pet pet) { - // add pet - return Response.ok().entity("SUCCESS").build(); - } -} \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java deleted file mode 100644 index 8daccbe..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuestionResource.java +++ /dev/null @@ -1,133 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - -import java.util.List; - -import fr.istic.taa.jaxrs.DAO.QuestionDAO; -import fr.istic.taa.jaxrs.DTO.QuestionDTO; -import fr.istic.taa.jaxrs.Mapper.QuestionMapper; -import fr.istic.taa.jaxrs.metier.Choix; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Reponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.PATCH; -import jakarta.ws.rs.PUT; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.DELETE; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Response; - - -@Path("question") -@Consumes({"application/json", "application/xml"}) -@Produces({"application/json", "application/xml"}) -public class QuestionResource { - private final QuestionDAO questionDAO = new QuestionDAO(); - private final QuestionMapper mapper = QuestionMapper.INSTANCE; - - @GET - public List listQuestion(){ - List questions = questionDAO.findAll(); - return questions; - } - - @POST - @Path("/addQuestion") - public Response addQuestion(QuestionDTO dto){ - Question question = mapper.toEntity(dto); - questionDAO.create(question); - return Response.status(Response.Status.CREATED).entity("Question ajouté avec Succès : \"" + dto.getQuestion() + "\"").build(); - } - - @PUT - @Path("/{question_id}/changeQuestion/") - public Response changeQuestion(@PathParam("question_id") Integer id, String newQuestion){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - questionDAO.changeQuestion(newQuestion,id); - return Response.status(Response.Status.CREATED).entity("Question mis à jour : " + newQuestion).build(); - - } - - @GET - @Path("/{question_id}/getReponse/") - public Response getReponse(@PathParam("question_id") Integer id){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - Reponse result = question.getReponse(); - return Response.ok(result).build(); - - } - - @PUT - @Path("/{question_id}/addReponse/") - public Response addReponse(@PathParam("question_id") Integer id, String reponse){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - questionDAO.addReponse(reponse,id); - return Response.status(Response.Status.CREATED).entity("Reponse correct \""+reponse+"\" ajouté à la question " + id).build(); - - } - - @DELETE - @Path("/{question_id}/deletReponses/") - public Response addReponse(@PathParam("question_id") Integer id){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - questionDAO.deleteReponse(id); - return Response.status(Response.Status.CREATED).entity("Reponses supprimé de la question " + id).build(); - - } - - @PUT - @Path("/{question_id}/setReponse/choix") - public Response setChoix(@PathParam("question_id") Integer id){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - questionDAO.setChoix(id); - return Response.status(Response.Status.CREATED).entity("Reponses à choix multiple mise sur la question " + id).build(); - } - - @PUT - @Path("/{question_id}/setReponse/reponseCourte") - public Response setReponseCourte(@PathParam("question_id") Integer id){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - questionDAO.setReponseCourte(id); - return Response.status(Response.Status.CREATED).entity("Reponses courte mise sur la question " + id).build(); - - } - - @PUT - @Path("/{question_id}/AddChoix") - public Response addChoix(@PathParam("question_id") Integer id, String choix){ - Question question = questionDAO.findById(id); - if(question == null){ - return Response.status(Response.Status.NOT_FOUND).build(); - } - if(question.getReponse() instanceof Choix){ - return Response.status(Response.Status.EXPECTATION_FAILED).build(); - } - questionDAO.addChoix(id, choix); - return Response.status(Response.Status.CREATED).entity("Reponses courte mise sur la question " + id).build(); - - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java deleted file mode 100644 index eb006ea..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/QuizzResource.java +++ /dev/null @@ -1,73 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - -import fr.istic.taa.jaxrs.DAO.QuestionDAO; -import fr.istic.taa.jaxrs.DAO.QuizzDAO; -import fr.istic.taa.jaxrs.DTO.QuestionDTO; -import fr.istic.taa.jaxrs.DTO.QuizzDTO; -import fr.istic.taa.jaxrs.Mapper.QuestionMapper; -import fr.istic.taa.jaxrs.Mapper.QuizzMapper; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Quizz; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.Response; - -import java.util.List; - -@Path("quizz") -@Consumes({"application/json", "application/xml"}) -@Produces({"application/json", "application/xml"}) -public class QuizzResource { - public final QuizzMapper mapper = QuizzMapper.INSTANCE; - public final QuizzDAO quizzDAO= new QuizzDAO(); - public final QuestionDAO questionDAO = new QuestionDAO(); - - @GET - @Path("/{quizz_id}") - public Response getQuizzById(@PathParam("quizz_id") Integer quizzId) { - Quizz quizz = quizzDAO.findById(quizzId); - if (quizz == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - QuizzDTO dto = mapper.toDTO(quizz); - return Response.status(Response.Status.OK).entity(dto).build(); - } - - @GET - @Path("/{quizz_id}/questions") - public Response getQuestions(@PathParam("quizz_id") Integer quizzId) { - Quizz quizz = quizzDAO.findById(quizzId); - if (quizz == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - List questionList= quizz.getQuestions(); - List dtos = QuestionMapper.INSTANCE.toDTOs(questionList); - - return Response.status(Response.Status.OK).entity(dtos).build(); - } - - @PUT - @Path("/{quizz_id}/add_question/{question_id}") - public Response addQuestion(@PathParam("quizz_id") Integer quizzId, @PathParam("question_id") Integer questionId) { - Quizz quizz = quizzDAO.findById(quizzId); - Question question = questionDAO.findById(questionId); - if (quizz == null || question == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - quizzDAO.addQuestion(quizzId,questionId); - quizzDAO.update(quizz); - QuizzDTO quizzDTO = mapper.toDTO(quizz); - return Response.status(Response.Status.OK).entity(quizzDTO).build(); - } - - @PUT - @Path("/{quizz_id}/deleteQ") - public Response deleteQuestion(@PathParam("quizz_id") Integer quizzId) { - Quizz quizz = quizzDAO.findById(quizzId); - if (quizz == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - quizzDAO.deleteAllQustion(quizzId); - quizzDAO.update(quizz); - return Response.status(Response.Status.OK).build(); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java deleted file mode 100644 index 2691cb7..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/SessionResource.java +++ /dev/null @@ -1,75 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - - -import fr.istic.taa.jaxrs.DAO.SessionDAO; -import fr.istic.taa.jaxrs.DTO.QuizzDTO; -import fr.istic.taa.jaxrs.DTO.SessionDTO; -import fr.istic.taa.jaxrs.DTO.UtilisateurDTO; -import fr.istic.taa.jaxrs.Mapper.QuizzMapper; -import fr.istic.taa.jaxrs.Mapper.SessionMapper; -import fr.istic.taa.jaxrs.Mapper.UtilisateurMapper; -import fr.istic.taa.jaxrs.metier.Session; -import fr.istic.taa.jaxrs.metier.Utilisateur; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.Response; - -import java.util.List; - -@Path("session") -@Consumes({"application/json", "application/xml"}) -@Produces({"application/json", "application/xml"}) -public class SessionResource { - private final SessionDAO sessionDAO = new SessionDAO(); - private final SessionMapper mapper = SessionMapper.INSTANCE; - - @GET - public List listSession() { - List sessions = sessionDAO.findAll(); - return sessions; - } - - @GET - @Path("/{id}") - public Response getSession(@PathParam("id") Integer id) { - Session session = sessionDAO.findById(id); - if (session == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - SessionDTO result = mapper.toDTO(session); - return Response.status(Response.Status.OK).entity(result).build(); - } - - @GET - @Path("/{session_id}/quizzs") - public Response getQuizzs(@PathParam("session_id") Integer sessionId) { - Session session = sessionDAO.findById(sessionId); - if (session == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - List results= QuizzMapper.INSTANCE.toDTOs(session.getQuizzs()); - return Response.status(Response.Status.OK).entity(results).build(); - } - - @GET - @Path("/{session_id}/utilisateurs") - public Response getUtilisateurs(@PathParam("session_id") Integer sessionId) { - Session session = sessionDAO.findById(sessionId); - if (session == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - List utilisateurList= session.getUtilisateurs(); - List dtos= UtilisateurMapper.INSTANCE.toDTOs(utilisateurList); - return Response.status(Response.Status.OK).entity(dtos).build(); - } - - @DELETE - @Path("/{session_id}/delete") - public Response deleteSession(@PathParam("session_id") Integer sessionId) { - Session session = sessionDAO.findById(sessionId); - if (session == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - sessionDAO.delete(session); - return Response.status(Response.Status.OK).entity("Réussi de supprimer").build(); - } -} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java deleted file mode 100644 index 82780e3..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java +++ /dev/null @@ -1,35 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - -import java.io.IOException; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.util.logging.Logger; - -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; - -@Path("/api") -public class SwaggerResource { - private static final Logger logger = Logger.getLogger(SwaggerResource.class.getName()); - - @GET - public byte[] Get1() { - try { - return Files.readAllBytes(FileSystems.getDefault().getPath("src/main/webapp/swagger/index.html")); - } catch (IOException e) { - return null; - } - } - - @GET - @Path("{path:.*}") - public byte[] Get(@PathParam("path") String path) { - try { - return Files.readAllBytes(FileSystems.getDefault().getPath("src/main/webapp/swagger/"+path)); - } catch (IOException e) { - return null; - } - } - -} diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java deleted file mode 100644 index f9e263d..0000000 --- a/src/main/java/fr/istic/taa/jaxrs/rest/UtilisateurResource.java +++ /dev/null @@ -1,142 +0,0 @@ -package fr.istic.taa.jaxrs.rest; - -import fr.istic.taa.jaxrs.DAO.SessionDAO; -import fr.istic.taa.jaxrs.DAO.UtilisateurDAO; -import fr.istic.taa.jaxrs.DTO.SessionDTO; -import fr.istic.taa.jaxrs.DTO.UtilisateurDTO; -import fr.istic.taa.jaxrs.Mapper.SessionMapper; -import fr.istic.taa.jaxrs.Mapper.UtilisateurMapper; -import fr.istic.taa.jaxrs.metier.Question; -import fr.istic.taa.jaxrs.metier.Session; -import fr.istic.taa.jaxrs.metier.Utilisateur; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.Response; - -import java.util.List; - -@Path("utilisateur") -@Consumes({"application/json", "application/xml"}) -@Produces({"application/json", "application/xml"}) -public class UtilisateurResource { - private final UtilisateurDAO utilisateurDAO = new UtilisateurDAO(); - private final UtilisateurMapper mapper = UtilisateurMapper.INSTANCE; - - @GET - public List listUtilisateur() { - List utilisateurs = utilisateurDAO.findAll(); - return utilisateurs; - } - - @POST - @Path("/register") - public Response registerUtilisateur(UtilisateurDTO dto) { - String email_verification = dto.getEmail(); - Utilisateur existing = utilisateurDAO.findByEmail(email_verification); - - //VERIFACTION S'IL EXISTE DANS BDD - if (existing != null) { - return Response.status(Response.Status.CONFLICT).entity("Email est déjà registré").build(); - } - - Utilisateur utilisateur = mapper.toEntity(dto); - utilisateurDAO.create(utilisateur); - - return Response.status(Response.Status.CREATED).entity("Registration succès").build(); - } - - @POST - @Path("/login") - public Response loginUtilisateur(UtilisateurDTO dto) { - Utilisateur utilisateur = utilisateurDAO.findByEmail(dto.getEmail()); - - if (utilisateur == null) { - return Response.status(Response.Status.NOT_FOUND).entity("Email n'existe pas").build(); - } else if (!utilisateur.getPassword().equals(dto.getPassword())) { - return Response.status(Response.Status.UNAUTHORIZED).entity("Mauvais mdp").build(); - } - UtilisateurDTO result = mapper.toDTO(utilisateur); - - return Response.status(Response.Status.OK).entity(result).build(); - } - - @GET - @Path("/{id}") - @Operation(summary = "Get user by ID", - tags = {"utilisateur"}, - description = "Get User by ID", - responses = { - @ApiResponse(description = "Utilisateur", content = @Content( - schema = @Schema(implementation = Utilisateur.class) - )), - @ApiResponse(responseCode = "400", description = "Invalid ID supplied"), - @ApiResponse(responseCode = "404", description = "User not found") - }) - public Response getUtilisateur(@Parameter( - description = "ID of user that needs to be fetched", - schema = @Schema( - type = "integer", - format = "int32", - description = "param ID of user that needs to be fetched" - ), - required = true) - @PathParam("id") Integer id) { - Utilisateur utilisateur = utilisateurDAO.findById(id); - if (utilisateur == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - UtilisateurDTO result = mapper.toDTO(utilisateur); - return Response.ok(result).build(); - } - - @PUT - @Path("/{user_id}/add_session/{session_id}") - public Response addSession(@PathParam("user_id") Integer user_id, @PathParam("session_id") Integer session_id) { - SessionDAO sessionDAO = new SessionDAO(); - - Session existingSession = sessionDAO.findById(session_id); - Utilisateur utilisateur = utilisateurDAO.findById(user_id); - - if (existingSession == null || utilisateur == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - //If user already joined - if (utilisateur.getSession().contains(existingSession)) { - return Response.status(Response.Status.CONFLICT).build(); - } - utilisateurDAO.addToSession(user_id, session_id); - utilisateurDAO.update(utilisateur); - - // We update it so have to return new DTO - UtilisateurDTO dto = mapper.toDTO(utilisateur); - - return Response.status(Response.Status.OK).entity(dto).build(); - } - - @GET - @Path("{user_id}/session") - public Response listSession(@PathParam("user_id") Integer user_id) { - Utilisateur utilisateur = utilisateurDAO.findById(user_id); - if (utilisateur == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - List sess = utilisateur.getSession(); - List dtos = SessionMapper.INSTANCE.toDTOs(sess); - return Response.status(Response.Status.OK).entity(dtos).build(); - } - - @DELETE - @Path("{user_id}/delete") - public Response deleteUtilisateur(@PathParam("user_id") Integer user_id) { - Utilisateur existing = utilisateurDAO.findById(user_id); - if (existing == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - utilisateurDAO.delete(existing); - return Response.status(Response.Status.OK).build(); - } -} diff --git a/src/main/java/sample/data/jpa/SampleDataJpaApplication.java b/src/main/java/sample/data/jpa/SampleDataJpaApplication.java new file mode 100644 index 0000000..09f78ef --- /dev/null +++ b/src/main/java/sample/data/jpa/SampleDataJpaApplication.java @@ -0,0 +1,29 @@ +/* + * Copyright 2012-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample.data.jpa; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SampleDataJpaApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(SampleDataJpaApplication.class, args); + } + +} diff --git a/src/main/java/sample/data/jpa/domain/User.java b/src/main/java/sample/data/jpa/domain/User.java new file mode 100644 index 0000000..0607348 --- /dev/null +++ b/src/main/java/sample/data/jpa/domain/User.java @@ -0,0 +1,66 @@ +package sample.data.jpa.domain; +// Imports ... + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import javax.validation.constraints.NotNull; + +@Entity +@Table(name = "users") +public class User { + + // An autogenerated id (unique for each user in the db) + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + @NotNull + private String email; + + @NotNull + private String name; + + // Public methods + + public User() { } + + public User(long id) { + this.id = id; + } + + public User(String email, String name) { + this.email = email; + this.name = name; + } + +public long getId() { + return id; +} + +public void setId(long id) { + this.id = id; +} + +public String getEmail() { + return email; +} + +public void setEmail(String email) { + this.email = email; +} + +public String getName() { + return name; +} + +public void setName(String name) { + this.name = name; +} + + // Getter and setter methods + // ... + +} \ No newline at end of file diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Choix.java b/src/main/java/sample/data/jpa/metier/Choix.java similarity index 93% rename from src/main/java/fr/istic/taa/jaxrs/metier/Choix.java rename to src/main/java/sample/data/jpa/metier/Choix.java index 0e7de56..23226cf 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Choix.java +++ b/src/main/java/sample/data/jpa/metier/Choix.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import java.util.List; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Question.java b/src/main/java/sample/data/jpa/metier/Question.java similarity index 94% rename from src/main/java/fr/istic/taa/jaxrs/metier/Question.java rename to src/main/java/sample/data/jpa/metier/Question.java index 22edd9b..4fb4026 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Question.java +++ b/src/main/java/sample/data/jpa/metier/Question.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java b/src/main/java/sample/data/jpa/metier/Quizz.java similarity index 94% rename from src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java rename to src/main/java/sample/data/jpa/metier/Quizz.java index 4a312bc..5eac64b 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Quizz.java +++ b/src/main/java/sample/data/jpa/metier/Quizz.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Reponse.java b/src/main/java/sample/data/jpa/metier/Reponse.java similarity index 94% rename from src/main/java/fr/istic/taa/jaxrs/metier/Reponse.java rename to src/main/java/sample/data/jpa/metier/Reponse.java index 8a8f122..9137376 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Reponse.java +++ b/src/main/java/sample/data/jpa/metier/Reponse.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import java.io.Serializable; import java.util.List; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/ReponseCourte.java b/src/main/java/sample/data/jpa/metier/ReponseCourte.java similarity index 91% rename from src/main/java/fr/istic/taa/jaxrs/metier/ReponseCourte.java rename to src/main/java/sample/data/jpa/metier/ReponseCourte.java index d8d4647..cb48529 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/ReponseCourte.java +++ b/src/main/java/sample/data/jpa/metier/ReponseCourte.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import jakarta.persistence.Entity; import jakarta.persistence.PrimaryKeyJoinColumn; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java b/src/main/java/sample/data/jpa/metier/Session.java similarity index 94% rename from src/main/java/fr/istic/taa/jaxrs/metier/Session.java rename to src/main/java/sample/data/jpa/metier/Session.java index 1c2ef0f..4692004 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Session.java +++ b/src/main/java/sample/data/jpa/metier/Session.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import java.io.Serializable; import java.util.ArrayList; diff --git a/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java b/src/main/java/sample/data/jpa/metier/Utilisateur.java similarity index 95% rename from src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java rename to src/main/java/sample/data/jpa/metier/Utilisateur.java index ff9ab3c..f9822c0 100644 --- a/src/main/java/fr/istic/taa/jaxrs/metier/Utilisateur.java +++ b/src/main/java/sample/data/jpa/metier/Utilisateur.java @@ -1,4 +1,4 @@ -package fr.istic.taa.jaxrs.metier; +package sample.data.jpa.metier; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/sample/data/jpa/service/QuestionDao.java b/src/main/java/sample/data/jpa/service/QuestionDao.java new file mode 100644 index 0000000..c793ca8 --- /dev/null +++ b/src/main/java/sample/data/jpa/service/QuestionDao.java @@ -0,0 +1,4 @@ +package sample.data.jpa.service; + +public interface QuestionDao { +} diff --git a/src/main/java/sample/data/jpa/service/QuizzDao.java b/src/main/java/sample/data/jpa/service/QuizzDao.java new file mode 100644 index 0000000..6b8cd7a --- /dev/null +++ b/src/main/java/sample/data/jpa/service/QuizzDao.java @@ -0,0 +1,4 @@ +package sample.data.jpa.service; + +public interface QuizzDao { +} diff --git a/src/main/java/sample/data/jpa/service/ReponseDao.java b/src/main/java/sample/data/jpa/service/ReponseDao.java new file mode 100644 index 0000000..df22f5b --- /dev/null +++ b/src/main/java/sample/data/jpa/service/ReponseDao.java @@ -0,0 +1,4 @@ +package sample.data.jpa.service; + +public interface ReponseDao { +} diff --git a/src/main/java/sample/data/jpa/service/SessionDao.java b/src/main/java/sample/data/jpa/service/SessionDao.java new file mode 100644 index 0000000..3268907 --- /dev/null +++ b/src/main/java/sample/data/jpa/service/SessionDao.java @@ -0,0 +1,4 @@ +package sample.data.jpa.service; + +public interface SessionDao { +} diff --git a/src/main/java/sample/data/jpa/service/UserDao.java b/src/main/java/sample/data/jpa/service/UserDao.java new file mode 100644 index 0000000..bd152a0 --- /dev/null +++ b/src/main/java/sample/data/jpa/service/UserDao.java @@ -0,0 +1,20 @@ +package sample.data.jpa.service; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; + +import sample.data.jpa.domain.User; + +// Imports ... + +@Transactional +public interface UserDao extends JpaRepository { + + /** + * This method will find an User instance in the database by its email. + * Note that this method is not implemented and its working code will be + * automagically generated from its signature by Spring Data JPA. + */ + public User findByEmail(String email); + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/service/UtilisateurDao.java b/src/main/java/sample/data/jpa/service/UtilisateurDao.java new file mode 100644 index 0000000..0dd937f --- /dev/null +++ b/src/main/java/sample/data/jpa/service/UtilisateurDao.java @@ -0,0 +1,4 @@ +package sample.data.jpa.service; + +public interface UtilisateurDao { +} diff --git a/src/main/java/sample/data/jpa/web/QuestionController.java b/src/main/java/sample/data/jpa/web/QuestionController.java new file mode 100644 index 0000000..5007fcc --- /dev/null +++ b/src/main/java/sample/data/jpa/web/QuestionController.java @@ -0,0 +1,6 @@ +package sample.data.jpa.web; + +@Controller +public class QuestionController { + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/web/QuizzController.java b/src/main/java/sample/data/jpa/web/QuizzController.java new file mode 100644 index 0000000..2ea3193 --- /dev/null +++ b/src/main/java/sample/data/jpa/web/QuizzController.java @@ -0,0 +1,6 @@ +package sample.data.jpa.web; + +@Controller +public class QuizzController { + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/web/ReponseController.java b/src/main/java/sample/data/jpa/web/ReponseController.java new file mode 100644 index 0000000..02ce1fe --- /dev/null +++ b/src/main/java/sample/data/jpa/web/ReponseController.java @@ -0,0 +1,6 @@ +package sample.data.jpa.web; + +@Controller +public class ReponseController { + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/web/SessionController.java b/src/main/java/sample/data/jpa/web/SessionController.java new file mode 100644 index 0000000..9ffc075 --- /dev/null +++ b/src/main/java/sample/data/jpa/web/SessionController.java @@ -0,0 +1,6 @@ +package sample.data.jpa.web; + +@Controller +public class SessionController { + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/web/UserController.java b/src/main/java/sample/data/jpa/web/UserController.java new file mode 100644 index 0000000..143f902 --- /dev/null +++ b/src/main/java/sample/data/jpa/web/UserController.java @@ -0,0 +1,91 @@ +package sample.data.jpa.web; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import sample.data.jpa.domain.User; +import sample.data.jpa.service.UserDao; + +@Controller +public class UserController { + + /** + * GET /create --> Create a new user and save it in the database. + */ + @RequestMapping("/create") + @ResponseBody + public String create(String email, String name) { + String userId = ""; + try { + User user = new User(email, name); + userDao.save(user); + userId = String.valueOf(user.getId()); + } + catch (Exception ex) { + return "Error creating the user: " + ex.toString(); + } + return "User succesfully created with id = " + userId; + } + + /** + * GET /delete --> Delete the user having the passed id. + */ + @RequestMapping("/delete") + @ResponseBody + public String delete(long id) { + try { + User user = new User(id); + userDao.delete(user); + } + catch (Exception ex) { + return "Error deleting the user:" + ex.toString(); + } + return "User succesfully deleted!"; + } + + /** + * GET /get-by-email --> Return the id for the user having the passed + * email. + */ + @RequestMapping("/get-by-email/{email}") + @ResponseBody + public String getByEmail(@PathVariable("email") String email) { + String userId = ""; + try { + User user = userDao.findByEmail(email); + userId = String.valueOf(user.getId()); + } + catch (Exception ex) { + return "User not found"; + } + return "The user id is: " + userId; + } + + /** + * GET /update --> Update the email and the name for the user in the + * database having the passed id. + */ + @RequestMapping("/update") + @ResponseBody + public String updateUser(long id, String email, String name) { + try { + User user = userDao.findById(id).get(); + user.setEmail(email); + user.setName(name); + userDao.save(user); + } + catch (Exception ex) { + return "Error updating the user: " + ex.toString(); + } + return "User succesfully updated!"; + } + + // Private fields + + @Autowired + private UserDao userDao; + +} \ No newline at end of file diff --git a/src/main/java/sample/data/jpa/web/UtilisateurController.java b/src/main/java/sample/data/jpa/web/UtilisateurController.java new file mode 100644 index 0000000..0ab4534 --- /dev/null +++ b/src/main/java/sample/data/jpa/web/UtilisateurController.java @@ -0,0 +1,6 @@ +package sample.data.jpa.web; + +@Controller +public class UtilisateurController { + +} \ No newline at end of file diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 7277b7d..0000000 --- a/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - org.hibernate.jpa.HibernatePersistenceProvider - - - - - - - - - - - - org.hibernate.jpa.HibernatePersistenceProvider - - - - - - - - - - - - - - org.hibernate.jpa.HibernatePersistenceProvider - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..26841b8 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,24 @@ +spring.h2.console.enabled=true + +logging.level.org.hibernate.SQL=debug + +# DataSource settings: set here your own configurations for the database +# connection. In this example we have "netgloo_blog" as database name and +# "root" as username and password. +spring.datasource.url = jdbc:mysql://localhost:3306/testspringdata?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC +spring.datasource.username = tlc +spring.datasource.password = tlc + + +# Show or not log for each sql query +spring.jpa.show-sql = true + +# Hibernate ddl auto (create, create-drop, update) +spring.jpa.hibernate.ddl-auto = update + + +# Use spring.jpa.properties.* for Hibernate native properties (the prefix is +# stripped before adding them to the entity manager) + +# The SQL dialect makes Hibernate generate better SQL for the chosen database +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql new file mode 100644 index 0000000..fbd4846 --- /dev/null +++ b/src/main/resources/import.sql @@ -0,0 +1,186 @@ +-- +-- Sample dataset containing a number of Hotels in various Cities across the world. The reviews are entirely fictional :) +-- + +-- ================================================================================================= +-- AUSTRALIA + +-- Brisbane +insert into city(country, name, state, map) values ('Australia', 'Brisbane', 'Queensland', '-27.470933, 153.023502') +insert into hotel(city_id, name, address, zip) values (1, 'Conrad Treasury Place', 'William & George Streets', '4001') + +-- Melbourne +insert into city(country, name, state, map) values ('Australia', 'Melbourne', 'Victoria', '-37.813187, 144.96298') +insert into hotel(city_id, name, address, zip) values (2, 'The Langham', '1 Southgate Ave, Southbank', '3006') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (2, 0, '2005-05-10', 2, 4, 'Pretty average', 'I stayed in 2005, the hotel was nice enough but nothing special.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (2, 1, '2006-01-12', 4, 2, 'Bright hotel with big rooms', 'This hotel has a fantastic lovely big windows. The room we stayed in had lots of space. Recommended.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (2, 2, '2006-05-25', 3, 1, 'Pretty good', 'I liked this hotel and would stay again.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (2, 3, '2009-01-20', 3, 2, 'Nice clean rooms', 'The rooms are maintained to a high standard and very clean, the bathroom was spotless!!') + +-- Sydney +insert into city(country, name, state, map) values ('Australia', 'Sydney', 'New South Wales', '-33.868901, 151.207091') +insert into hotel(city_id, name, address, zip) values (3, 'Swissotel', '68 Market Street', '2000') + + +-- ================================================================================================= +-- CANADA + +-- Montreal +insert into city(country, name, state, map) values ('Canada', 'Montreal', 'Quebec', '45.508889, -73.554167') +insert into hotel(city_id, name, address, zip) values (4, 'Ritz Carlton', '1228 Sherbrooke St', 'H3G1H6') + + +-- ================================================================================================= +-- ISRAEL + +-- Tel Aviv +insert into city(country, name, state, map) values ('Israel', 'Tel Aviv', '', '32.066157, 34.777821') +insert into hotel(city_id, name, address, zip) values (5, 'Hilton Tel Aviv', 'Independence Park', '63405') + + +-- ================================================================================================= +-- JAPAN + +-- Tokyo +insert into city(country, name, state, map) values ('Japan', 'Tokyo', '', '35.689488, 139.691706') +insert into hotel(city_id, name, address, zip) values (6, 'InterContinental Tokyo Bay', 'Takeshiba Pier', '105') + + +-- ================================================================================================= +-- SPAIN + +-- Barcelona +insert into city(country, name, state, map) values ('Spain', 'Barcelona', 'Catalunya', '41.387917, 2.169919') +insert into hotel(city_id, name, address, zip) values (7, 'Hilton Diagonal Mar', 'Passeig del Taulat 262-264', '08019') + +-- ================================================================================================= +-- SWITZERLAND + +-- Neuchatel +insert into city(country, name, state, map) values ('Switzerland', 'Neuchatel', '', '46.992979, 6.931933') +insert into hotel(city_id, name, address, zip) values (8, 'Hotel Beaulac', ' Esplanade Leopold-Robert 2', '2000') + + +-- ================================================================================================= +-- UNITED KINGDOM + +-- Bath +insert into city(country, name, state, map) values ('UK', 'Bath', 'Somerset', '51.381428, -2.357454') +insert into hotel(city_id, name, address, zip) values (9, 'The Bath Priory Hotel', 'Weston Road', 'BA1 2XT') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 0, '2000-01-23', 4, 1, 'A lovely hotel', 'We stayed here after a wedding and it was fantastic. Recommend to all.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 1, '2000-08-04', 3, 1, 'Very special', 'A very special hotel with lovely staff.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 2, '2001-01-01', 2, 4, 'Nice but too hot', 'Stayed during the summer heat wave (exceptional for England!) and the room was very hot. Still recommended.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 3, '2002-01-20', 3, 1, 'Big rooms and a great view', 'Considering how central this hotel is the rooms are a very good size.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 4, '2002-11-03', 2, 1, 'Good but pricey', 'A nice hotel but be prepared to pay over the odds for your stay.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 5, '2003-09-18', 4, 1, 'Fantastic place', 'Just lovely.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 6, '2004-03-21', 4, 3, 'A very special place', 'I stayed here in 2004 and found it to be very relaxing, a nice pool and good gym is cherry on the cake.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 7, '2004-04-10', 0, 0, 'Terrible', 'I complained after I was told I could not check out after 11pm. Ridiculous!!!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 8, '2004-12-20', 4, 4, 'A perfect location', 'Central location makes this a perfect hotel. Be warned though, it''s not cheap.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 9, '2005-04-19', 3, 2, 'Expensive but worth it', 'Dig deep into your pockets and enjoy this lovely City and fantastic hotel.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 10, '2005-05-21', 4, 1, 'The best hotel in the area', 'Top hotel in the area, would not stay anywhere else.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 11, '2005-11-17', 4, 2, 'Lovely hotel, fantastic grounds', 'The garden upkeep run into thousands (perhaps explaining why the rooms are so much) but so lovely and relaxing.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 12, '2006-01-04', 3, 4, 'Gorgeous Top Quality Hotel', 'Top draw stuff.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 13, '2006-01-21', 4, 1, 'Fabulous Hotel and Restaurant', 'The food at this hotel is second to none, try the peppered steak!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 14, '2006-01-29', 4, 4, 'Feels like home', 'A lovely home away from home.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 15, '2006-03-21', 1, 1, 'Far too expensive', 'Overpriced, Overpriced, Overpriced!!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 16, '2006-05-10', 4, 1, 'Excellent Hotel, Wonderful Staff', 'The staff went out of their way to help us after we missed our last train home, organising a Taxi back to Newport even after we had checked out.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 17, '2007-09-11', 3, 2, 'The perfect retreat', 'If you want a relaxing stay, this is the place.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 18, '2008-06-01', 3, 3, 'Lovely stay, fantastic staff', 'As other reviews have noted, the staff in this hotel really are the best in Bath.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 19, '2009-05-14', 4, 2, 'Can''t Wait to go back', 'We will stay again for sure.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 20, '2010-04-26', 4, 1, 'Amazing Hotel', 'We won a trip here after entering a competition. Not sure we would pay the full price but such a wonderful place.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (9, 21, '2010-10-26', 2, 2, 'Dissapointed', 'The pool was closed, the chief was ill, the staff were rude my wallet is bruised!') +insert into hotel(city_id, name, address, zip) values (9, 'Bath Travelodge', 'Rossiter Road, Widcombe Basin', 'BA2 4JP') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 0, '2002-08-21', 0, 2, 'Terrible hotel', 'One of the worst hotels that I have ever stayed in.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 1, '2003-01-28', 0, 0, 'Rude and unpleasant staff', 'The staff refused to help me with any aspect of my stay, I will not stay here again.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 2, '2004-06-17', 1, 0, 'Below par', 'Don''t stay here!!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 3, '2005-07-12', 0, 1, 'Small and Unpleasant', 'The room was far too small and felt unclean. Not recommended.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 4, '2006-01-07', 1, 4, 'Cheap if you are not fussy', 'This hotel has some rough edges but I challenge you to find somewhere cheaper.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 5, '2006-01-13', 0, 2, 'Terrible', 'Just terrible!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 6, '2006-03-25', 0, 0, 'Smelly and dirty room', 'My room smelt of damp and I found the socks of the previous occupant under my bed.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 7, '2006-04-09', 0, 4, 'Grim', 'Grim. I would try elsewhere before staying here.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 8, '2006-08-01', 1, 3, 'Very Noisy', 'Building work during the day and a disco at night. Good grief!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 9, '2009-01-03', 1, 4, 'Tired and falling down', 'This hotel is in serious need of refurbishment, the windows are rotting, the paintwork is tired and the carpets are from the 1970s.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 10, '2009-07-20', 0, 0, 'Not suitable for human habitation', 'I would not put my dog up in this hotel.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 11, '2010-05-20', 1, 0, 'Conveient for the railway', 'Average place but useful if you need to commute') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 12, '2010-01-22', 2, 2, 'Not as bad as the reviews', 'Some of the reviews seem a bit harsh, it''s not too bad for the price.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (10, 13, '2011-01-10', 3, 1, 'Reburished and nice', 'Looks like this hotel has had a major facelift. If you have stayed before 2011 perhaps it''s time to give this hotel another try. Very good value for money and pretty nice.') + +-- London +insert into city(country, name, state, map) values ('UK', 'London', '', '51.500152, -0.126236') +insert into hotel(city_id, name, address, zip) values (10, 'Melia White House', 'Albany Street', 'NW1 3UP') + +-- Southampton +insert into city(country, name, state, map) values ('UK', 'Southampton', 'Hampshire', '50.902571, -1.397238') +insert into hotel(city_id, name, address, zip) values (11, 'Chilworth Manor', 'The Cottage, Southampton Business Park', 'SO16 7JF') + + +-- ================================================================================================= +-- USA + +-- Atlanta +insert into city(country, name, state, map) values ('USA', 'Atlanta', 'GA', '33.748995, -84.387982') +insert into hotel(city_id, name, address, zip) values (12, 'Marriott Courtyard', 'Tower Place, Buckhead', '30305') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (13, 0, '2009-01-20', 3, 0, 'Better than most', 'Most other hotels is this area are a bit ropey, this one is actually pretty good.') +insert into hotel(city_id, name, address, zip) values (12, 'Ritz Carlton', 'Peachtree Rd, Buckhead', '30326') +insert into hotel(city_id, name, address, zip) values (12, 'Doubletree', 'Tower Place, Buckhead', '30305') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (15, 0, '2006-01-12', 2, 3, 'No fuss hotel', 'Cheap, no fuss hotel. Good if you are travelling on business and just need a place to stay.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (15, 1, '2009-01-20', 2, 2, 'Nice area but small rooms', 'The area felt nice and safe but the rooms are a little on the small side') + +-- Chicago +insert into city(country, name, state, map) values ('USA', 'Chicago', 'IL', '41.878114, -87.629798') +insert into hotel(city_id, name, address, zip) values (13, 'Hotel Allegro', '171 West Randolph Street', '60601') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (16, 0, '2009-12-15', 3, 2, 'Cheap and Recommended', 'Good value for money, can''t really fault it.') + +-- Eau Claire +insert into city(country, name, state, map) values ('USA', 'Eau Claire', 'WI', '44.811349, -91.498494') +insert into hotel(city_id, name, address, zip) values (14, 'Sea Horse Inn', '2106 N Clairemont Ave', '54703') +insert into hotel(city_id, name, address, zip) values (14, 'Super 8 Eau Claire Campus Area', '1151 W Macarthur Ave', '54701') + +-- Hollywood +insert into city(country, name, state, map) values ('USA', 'Hollywood', 'FL', '26.011201, -80.14949') +insert into hotel(city_id, name, address, zip) values (15, 'Westin Diplomat', '3555 S. Ocean Drive', '33019') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (19, 0, '2006-01-11', 0, 0, 'Avoid', 'The hotel has a very bad reputation. I would avoid it if I were you.') + +-- Miami +insert into city(country, name, state, map) values ('USA', 'Miami', 'FL', '25.788969, -80.226439') +insert into hotel(city_id, name, address, zip) values (16, 'Conrad Miami', '1395 Brickell Ave', '33131') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (20, 0, '2010-01-09', 3, 2, 'Close to the local attractions', 'Fantastic access to all the local attractions mean you won''t mind the small rooms.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (20, 1, '2010-09-10', 2, 2, 'Good value and friendly', 'Not expensive and very welcoming staff. I would stay again.') + +-- Melbourne +insert into city(country, name, state, map) values ('USA', 'Melbourne', 'FL', '28.083627, -80.608109') +insert into hotel(city_id, name, address, zip) values (17, 'Radisson Suite Hotel Oceanfront', '3101 North Hwy', '32903') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (21, 0, '2005-06-15', 3, 3, 'A very nice hotel', 'I can''t fault this hotel and I have stayed here many times. Always friendly staff and lovely atmosphere.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (21, 1, '2006-01-20', 2, 4, 'Comfortable and good value', 'To complaints at all.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (21, 2, '2007-08-21', 3, 1, 'Above average', 'Better than a lot of hotels in the area and not too pricey.') + +-- New York +insert into city(country, name, state, map) values ('USA', 'New York', 'NY', '40.714353, -74.005973') +insert into hotel(city_id, name, address, zip) values (18, 'W Union Hotel', 'Union Square, Manhattan', '10011') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (22, 0, '2002-01-19', 0, 1, 'Too noisy, too small', 'The city never sleeps and neither will you if you say here. The rooms are small and the sound insulation is poor!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (22, 1, '2004-03-10', 1, 4, 'Overpriced', 'Far too much money for such a tiny room!') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (22, 2, '2007-04-11', 2, 0, 'So so, nothing special', 'Not brilliant but not too bad either.') +insert into hotel(city_id, name, address, zip) values (18, 'W Lexington Hotel', 'Lexington Ave, Manhattan', '10011') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (23, 0, '2004-07-21', 3, 2, 'Excellent location', 'So close to the heart of the city. Recommended.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (23, 1, '2006-05-20', 3, 1, 'Very nice', 'I can''t fault this hotel, clean, good location and nice staff.') +insert into hotel(city_id, name, address, zip) values (18, '70 Park Avenue Hotel', '70 Park Avenue', '10011') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (24, 0, '2003-11-10', 4, 1, 'Great!!', 'I own this hotel and I think it is pretty darn good.') + +-- Palm Bay +insert into city(country, name, state, map) values ('USA', 'Palm Bay', 'FL', '28.034462, -80.588665') +insert into hotel(city_id, name, address, zip) values (19, 'Jameson Inn', '890 Palm Bay Rd NE', '32905') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (25, 0, '2005-10-20', 3, 2, 'Fantastical', 'This is the BEST hotel in Palm Bay, not complaints at all.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (25, 1, '2006-01-12', 4, 1, 'Top marks', 'I rate this hotel 5 stars, the best in the area by miles.') + +-- San Francisco +insert into city(country, name, state, map) values ('USA', 'San Francisco', 'CA', '37.77493, -122.419415') +insert into hotel(city_id, name, address, zip) values (20, 'Marriot Downtown', '55 Fourth Street', '94103') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (26, 0, '2006-07-02', 2, 3, 'Could be better', 'I stayed in late 2006 with work, the room was very small and the restaurant does not stay open very late.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (26, 1, '2008-07-01', 1, 4, 'Brrrr cold!', 'My room was freezing cold, I would not recommend this place.') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (26, 2, '2009-01-05', 3, 2, 'Nice for money', 'You can''t really go wrong here for the money. There may be better places to stay but not for this price.') + +-- Washington +insert into city(country, name, state, map) values ('USA', 'Washington', 'DC', '38.895112, -77.036366') +insert into hotel(city_id, name, address, zip) values (21, 'Hotel Rouge', '1315 16th Street NW', '20036') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (27, 0, '2000-01-29', 0, 2, 'Never again', 'I will never ever stay here again!! They wanted extra cash to get fresh batteries for the TV remote') +insert into review(hotel_id, idx, check_in_date, rating, trip_type, title, details) values (27, 1, '2006-02-20', 0, 0, 'Avoid', 'This place is the pits, they charged us twice for a single night stay. I only got refunded after contacting my credit card company.') diff --git a/src/test/java/sample/data/jpa/SampleDataJpaApplicationTests.java b/src/test/java/sample/data/jpa/SampleDataJpaApplicationTests.java new file mode 100644 index 0000000..7a4cef0 --- /dev/null +++ b/src/test/java/sample/data/jpa/SampleDataJpaApplicationTests.java @@ -0,0 +1,80 @@ +/* + * Copyright 2012-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample.data.jpa; + +import java.lang.management.ManagementFactory; + +import javax.management.ObjectName; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Integration test to run the application. + * + * @author Oliver Gierke + * @author Dave Syer + */ +@RunWith(SpringRunner.class) +@SpringBootTest +// Enable JMX so we can test the MBeans (you can't do this in a properties file) +@TestPropertySource(properties = { "spring.jmx.enabled:true", + "spring.datasource.jmx-enabled:true" }) +@ActiveProfiles("scratch") +// Separate profile for web tests to avoid clashing databases +public class SampleDataJpaApplicationTests { + + @Autowired + private WebApplicationContext context; + + private MockMvc mvc; + + @Before + public void setUp() { + this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build(); + } + + @Test + public void testHome() throws Exception { + + this.mvc.perform(get("/")).andExpect(status().isOk()) + .andExpect(content().string("Bath")); + } + + @Test + public void testJmx() throws Exception { + assertThat(ManagementFactory.getPlatformMBeanServer() + .queryMBeans(new ObjectName("jpa.sample:type=ConnectionPool,*"), null)) + .hasSize(1); + } + +} diff --git a/src/test/resources/application-scratch.properties b/src/test/resources/application-scratch.properties new file mode 100644 index 0000000..782bef1 --- /dev/null +++ b/src/test/resources/application-scratch.properties @@ -0,0 +1,2 @@ +spring.datasource.name=scratchdb +spring.jmx.default-domain=jpa.sample \ No newline at end of file