diff --git a/.gitignore b/.gitignore index b93b112ce4ceff13732085413cd21bd47299d808..878e2ae147591f8e3a70d26f96b59e66f1fbee01 100644 --- a/.gitignore +++ b/.gitignore @@ -130,4 +130,6 @@ fabric.properties .idea/httpRequests # Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser \ No newline at end of file +.idea/caches/build_file_checksums.ser + +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 608ed947e31cd2f38e9184821475d16084752aed..2cff4c686eb805568b6aa7376b6d40236b3cf600 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM maven:3.6.3-jdk-8 WORKDIR /app COPY . . -EXPOSE 8002 +EXPOSE 8000 RUN mvn clean install CMD ["mvn", "tomcat7:run"] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 2c0b7ff1435c4025cdf00473a0661ee9a68f5f9e..7a00f4f057bcb9fbc1f0f671286b7ffe53eaabcf 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -5,19 +5,17 @@ services: ports: - 8000:8000 hostname: tubes-soap-service - # env_file: .env + env_file: .env volumes: - .:/usr/src/app -# mysql: -# image: mysql:latest -# ports: -# - "3307:3306" -# # env_file: .env -# hostname: db-soap-service -# volumes: -# - ./db:/var/lib/mysql -# networks: -# - soap-services -# volumes: -# db: -# driver: local + depends_on: + - soap-service-db + soap-service-db: + image: mysql:latest + ports: + - "3307:3306" + env_file: .env + hostname: tubes-soap-db +volumes: + db: + driver: local diff --git a/pom.xml b/pom.xml index 07982d532a444773127dad1984fa979aa63bdba6..4764cad3781d46cd3f8d8f111abec51c07e30b74 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tubes</groupId> @@ -29,18 +29,6 @@ <artifactId>jaxws-api</artifactId> <version>2.3.1</version> </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-api</artifactId> - <version>${junit.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-jupiter-engine</artifactId> - <version>${junit.version}</version> - <scope>test</scope> - </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> @@ -66,123 +54,129 @@ <artifactId>hibernate-core</artifactId> <version>5.6.0.Final</version> </dependency> - <dependency> + <!-- <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.3</version> + </dependency> --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.30</version> + <scope>provided</scope> </dependency> </dependencies> <build> <pluginManagement> - <plugins> - <plugin> - <groupId>org.apache.tomcat.maven</groupId> - <artifactId>tomcat7-maven-plugin</artifactId> - <version>2.2</version> - <configuration> - <port>8000</port> - <path>/</path> - </configuration> - <dependencies> - <dependency> - <groupId>org.apache.tomcat.embed</groupId> - <artifactId>tomcat-embed-core</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-util</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-coyote</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-api</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-jdbc</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-dbcp</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-servlet-api</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-jsp-api</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-jasper</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-jasper-el</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-el-api</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-catalina</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-tribes</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-catalina-ha</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-annotations-api</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-juli</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat.embed</groupId> - <artifactId>tomcat-embed-logging-juli</artifactId> - <version>${tomcat.version}</version> - </dependency> - <dependency> - <groupId>org.apache.tomcat.embed</groupId> - <artifactId>tomcat-embed-logging-log4j</artifactId> - <version>${tomcat.version}</version> - </dependency> - </dependencies> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-war-plugin</artifactId> - <version>3.3.0</version> - </plugin> - </plugins> + <plugins> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat7-maven-plugin</artifactId> + <version>2.2</version> + <configuration> + <port>8000</port> + <path>/</path> + </configuration> + <dependencies> + <dependency> + <groupId>org.apache.tomcat.embed</groupId> + <artifactId>tomcat-embed-core</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-util</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-coyote</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-api</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-jdbc</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-dbcp</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-servlet-api</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-jsp-api</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-jasper</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-jasper-el</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-el-api</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-catalina</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-tribes</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-catalina-ha</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-annotations-api</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-juli</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat.embed</groupId> + <artifactId>tomcat-embed-logging-juli</artifactId> + <version>${tomcat.version}</version> + </dependency> + <dependency> + <groupId>org.apache.tomcat.embed</groupId> + <artifactId>tomcat-embed-logging-log4j</artifactId> + <version>${tomcat.version}</version> + </dependency> + </dependencies> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <version>3.3.0</version> + </plugin> + </plugins> </pluginManagement> </build> </project> \ No newline at end of file diff --git a/src/main/java/soapserver/Main.java b/src/main/java/soapserver/Main.java index 01eeca38cb8b83e929b888670e90a13d4f6d6e57..c97a4bdb8c3692e200ceeb0073e02451f6d9dd59 100644 --- a/src/main/java/soapserver/Main.java +++ b/src/main/java/soapserver/Main.java @@ -1,20 +1,20 @@ package soapserver; -import java.util.List; +// import java.util.List; import javax.xml.ws.Endpoint; -import javax.xml.ws.handler.Handler; +// import javax.xml.ws.handler.Handler; public class Main { - public static void main(String[] args) { - // HibernateUtil.getSessionFactory(); + public static void main(String[] args) { + // HibernateUtil.getSessionFactory(); + // System.out.println("WOWOWOWOO"); + // Endpoint endpoint = Endpoint.create(new SubscriptionService()); - Endpoint endpoint = Endpoint.create(new SubscriptionService()); + // List<Handler> handlerChain = endpoint.getBinding().getHandlerChain(); + // handlerChain.add(new LoggerServlet()); + // endpoint.getBinding().setHandlerChain(handlerChain); - List<Handler> handlerChain = endpoint.getBinding().getHandlerChain(); - // handlerChain.add(new LoggerServlet()); - endpoint.getBinding().setHandlerChain(handlerChain); - - endpoint.publish("http://localhost:8000/api/subscribe"); - } + // endpoint.publish("http://localhost:8000/api/subscribe"); + } } diff --git a/src/main/java/soapserver/SubscriptionService.java b/src/main/java/soapserver/SubscriptionService.java index 24a2b74b5946b8502fa19bdd521497847ad283f1..062fe5f777a2efa027ee449ed3b7c1c6e877635c 100644 --- a/src/main/java/soapserver/SubscriptionService.java +++ b/src/main/java/soapserver/SubscriptionService.java @@ -1,12 +1,46 @@ package soapserver; import javax.jws.WebMethod; +// import javax.jws.WebParam; import javax.jws.WebService; +import javax.jws.soap.SOAPBinding; + +import soapserver.repositories.SubscriptionRepository; @WebService +@SOAPBinding(style = SOAPBinding.Style.DOCUMENT) public class SubscriptionService { + private SubscriptionRepository subscriptionRepo = new SubscriptionRepository(); + @WebMethod public String hello() { + System.out.println("WOJWEKEJWFJEIF"); + subscriptionRepo.getMessages(); return "TEKS INI DIKIRIM MELALUI SABUN :o"; } + + @WebMethod + public String checkSubscription(int id_user) { + try { + System.out.println(id_user); + System.out.println(subscriptionRepo.isSubscribed(id_user)); + + return "wowowowo"; + } catch (Exception e) { + System.out.println(e.getMessage()); + return e.getMessage(); + } + } + + @WebMethod + public String seedSubscription() { + try { + boolean success = subscriptionRepo.seedSubscription(); + + return success ? "success" : "seeding failed"; + } catch (Exception e) { + System.out.println(e.getMessage()); + return "error"; + } + } } diff --git a/src/main/java/soapserver/models/Subscription.java b/src/main/java/soapserver/models/Subscription.java new file mode 100644 index 0000000000000000000000000000000000000000..4d874f67be73e9ddb33e17676b9f53c80f284928 --- /dev/null +++ b/src/main/java/soapserver/models/Subscription.java @@ -0,0 +1,25 @@ +package soapserver.models; + +import java.io.Serializable; +import java.sql.Timestamp; + +import javax.persistence.Basic; +// import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table(name = "subscriptions") +@Getter +@Setter +public class Subscription implements Serializable { + @Id + private Integer id_user; + + @Basic + private Timestamp expiration_date; +} diff --git a/src/main/java/soapserver/repositories/SubscriptionRepository.java b/src/main/java/soapserver/repositories/SubscriptionRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..8c55c6c3a827433d239cccb355f3ce46d933df85 --- /dev/null +++ b/src/main/java/soapserver/repositories/SubscriptionRepository.java @@ -0,0 +1,109 @@ +package soapserver.repositories; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; +import java.util.TimeZone; + +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Root; + +import org.hibernate.Session; +import org.hibernate.SessionFactory; + +import soapserver.models.Subscription; +import soapserver.utils.HibernateUtil; + +public class SubscriptionRepository { + public List<String> getMessages() { + try { + SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + + session.beginTransaction(); + + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery<Subscription> criteria = builder.createQuery(Subscription.class); + Root<Subscription> root = criteria.from(Subscription.class); + criteria.select(root); + + List<Subscription> subscriptions = session.createQuery(criteria).getResultList(); + for (Subscription s : subscriptions) { + System.out.println("kucing"); + System.out.println(s.getId_user()); + System.out.println(s.getExpiration_date()); + } + + session.getTransaction().commit(); + + return new ArrayList<String>(); + } catch (Exception e) { + System.out.println(e); + return new ArrayList<String>(); + } + } + + public boolean isSubscribed(int idUser) { + try { + SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + + session.beginTransaction(); + + CriteriaBuilder builder = session.getCriteriaBuilder(); + CriteriaQuery<Subscription> criteria = builder.createQuery(Subscription.class); + Root<Subscription> root = criteria.from(Subscription.class); + criteria.select(root).where(builder.equal(root.get("id_user"), idUser)); + + List<Subscription> userSubData = session.createQuery(criteria).getResultList(); + + session.getTransaction().commit(); + + if (userSubData.size() <= 0) { + return false; + } + + Subscription userSubscription = userSubData.get(0); + if (userSubscription == null) { + return false; + } + + Timestamp expirationDate = userSubscription.getExpiration_date(); + Timestamp currentTime = new Timestamp(System.currentTimeMillis()); + System.out.println(expirationDate); + System.out.println(currentTime); + if (expirationDate.compareTo(currentTime) < 0) { + return false; + } + + return true; + } catch (Exception e) { + System.out.println(e.getMessage()); + return false; + } + } + + public boolean seedSubscription() { + try { + SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); + Session session = sessionFactory.getCurrentSession(); + + session.beginTransaction(); + + for (int i = 0; i < 100; i++) { + Subscription subscription = new Subscription(); + subscription.setId_user(i + 1); + subscription.setExpiration_date(new Timestamp(System.currentTimeMillis() + (1000 * 60))); + session.save(subscription); + } + + session.getTransaction().commit(); + + return true; + } catch (Exception e) { + System.out.println(e.getMessage()); + return false; + } + } +} diff --git a/src/main/java/soapserver/utils/HibernateUtil.java b/src/main/java/soapserver/utils/HibernateUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..55168b607f28c111c758dda75f71f9939bd91107 --- /dev/null +++ b/src/main/java/soapserver/utils/HibernateUtil.java @@ -0,0 +1,53 @@ +package soapserver.utils; + +import java.util.Properties; + +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.cfg.Configuration; +import org.hibernate.service.ServiceRegistry; +import io.github.cdimascio.dotenv.Dotenv; + +import soapserver.models.Subscription; + +public class HibernateUtil { + private static final String DB_HOST = Dotenv.load().get("MYSQL_HOST", ""); + private static final String DB_PORT = Dotenv.load().get("MYSQL_PORT", ""); + private static final String DB_NAME = Dotenv.load().get("MYSQL_DATABASE", ""); + + private static final String DB_USER = Dotenv.load().get("MYSQL_USER", ""); + private static final String DB_PASSWORD = Dotenv.load().get("MYSQL_PASSWORD", ""); + private static final String DB_URL = String.format("jdbc:mysql://%s:%s/%s", HibernateUtil.DB_HOST, + HibernateUtil.DB_PORT, HibernateUtil.DB_NAME); + + private static SessionFactory sessionFactory; + + private static SessionFactory createSessionFactory() { + Properties properties = new Properties(); + properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect"); + properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); + properties.setProperty("hibernate.connection.url", HibernateUtil.DB_URL); + properties.setProperty("hibernate.connection.username", HibernateUtil.DB_USER); + properties.setProperty("hibernate.connection.password", HibernateUtil.DB_PASSWORD); + properties.setProperty("hibernate.hbm2ddl.auto", "update"); + properties.setProperty("hibernate.jdbc.time_zone", "UTC"); + properties.put("hibernate.current_session_context_class", "thread"); + + Configuration configuration = new Configuration(); + configuration.setProperties(properties); + configuration.addAnnotatedClass(Subscription.class); + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()) + .build(); + SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); + return sessionFactory; + } + + public static SessionFactory getSessionFactory() { + if (HibernateUtil.sessionFactory == null) { + HibernateUtil.sessionFactory = HibernateUtil.createSessionFactory(); + } + + return HibernateUtil.sessionFactory; + } +} diff --git a/src/main/webapp/WEB-INF/sun-jaxws.xml b/src/main/webapp/WEB-INF/sun-jaxws.xml index 842d841d0404f57f9d5e0b6d54ebaa4609a117a2..b40bc372cf9d9d19e2ba71e41e6ac881fb4b6bbf 100644 --- a/src/main/webapp/WEB-INF/sun-jaxws.xml +++ b/src/main/webapp/WEB-INF/sun-jaxws.xml @@ -3,5 +3,5 @@ <endpoint name="SubscriptionWebService" implementation="soapserver.SubscriptionService" - url-pattern="/api/subscribe" /> + url-pattern="/subscription" /> </endpoints> \ No newline at end of file