diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..decf36541199d23f84be403d354f2829983d84e7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,41 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Intellij IDEA ###
+.idea/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 3090d107a5878ed24086fa14f8b17c323d22b568..38d1bbd8d4d6f0e2a95908e1b2cc32cc2dbfd519 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,10 +1,8 @@
-FROM maven:latest
+FROM maven:amazoncorretto
 WORKDIR /app/nutricraft-soap
 
 COPY . .
 
-RUN mvn clean
-RUN mvn compile
-RUN mvn package
+RUN mvn clean package -DskipTests
 
 ENTRYPOINT ["java", "-jar", "target/nutricraft-soap.jar"]
\ No newline at end of file
diff --git a/db/db.sql b/db/db.sql
new file mode 100644
index 0000000000000000000000000000000000000000..2e7701ba87f6374f77efff9c8ac6dac2e26601b3
--- /dev/null
+++ b/db/db.sql
@@ -0,0 +1,92 @@
+
+DROP TABLE IF EXISTS `coins`;
+CREATE TABLE `coins` (
+  `id` varchar(255) NOT NULL,
+  `coin` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
+
+
+INSERT INTO `coins` (`id`, `coin`) VALUES
+  ('4169868951', 10),
+  ('6621876564', 45),
+  ('0068131062', 54),
+  ('2534892940', 5345),
+  ('2542003092', 645),
+  ('2076048790', 6564),
+  ('7833528552', 8),
+  ('5858179630', 4),
+  ('7807240504', 23),
+  ('7589780480', 1);
+
+DROP TABLE IF EXISTS `creatorlevels`;
+CREATE TABLE `creatorlevels` (
+  `id` varchar(255) NOT NULL,
+  `exp` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
+
+INSERT INTO `creatorlevels`(`id`, `exp`) VALUES
+    ('4169868951', 103),
+      ('6621876564', 3459),
+      ('0068131062', 325),
+      ('2534892940', 645),
+      ('2542003092', 745),
+      ('2076048790', 8567),
+      ('7833528552', 7456),
+      ('5858179630', 25456),
+      ('7807240504', 6734),
+      ('7589780480', 1);
+
+
+
+DROP TABLE IF EXISTS `subscribers`;
+CREATE TABLE `subscribers` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `id_user` int(11) NOT NULL,
+  `id_creator` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`,`id_user`,`id_creator`)
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
+
+INSERT INTO `subscribers` VALUES
+    (1,3,'4169868951'),
+    (2,1,'6621876564'),
+    (3,3,'0068131062'),
+    (4,3,'2534892940'),
+    (5,4,'2542003092'),
+    (6,2,'2076048790'),
+    (7,4,'7833528552'),
+    (8,2,'5858179630'),
+    (9,2,'7807240504'),
+    (10,2,'7589780480');
+
+
+DROP TABLE IF EXISTS `userlevels`;
+CREATE TABLE `userlevels` (
+  `id` int(11) NOT NULL,
+  `exp` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
+
+INSERT INTO `userlevels` (`id`, `exp`) VALUES
+    (2,100),
+    (3,7594),
+    (4,32894),
+    (1,72);
+
+
+
+
+DROP TABLE IF EXISTS `logging`;
+CREATE TABLE `logging`
+(
+    id INT NOT NULL AUTO_INCREMENT,
+    description VARCHAR(255) NOT NULL,
+    IP VARCHAR(16) NOT NULL,
+    endpoint VARCHAR(255) NOT NULL,
+    requested_at TIMESTAMP NOT NULL,
+    PRIMARY KEY (id)
+);
+
+INSERT INTO `logging` (`id`, `description`, `ip`, `endpoint`, `requested_at`) VALUES
+  (1, 'coba log', '127.0.0.1', 'localhost.com', '2008-01-01 00:00:01');
diff --git a/pom.xml b/pom.xml
index e5fdad6161e1cbcddb5884fd5223b532ce81aac1..f90055480d06c524a8de5d345bfb2fc0281f5a42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,138 +1,114 @@
-<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/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.example</groupId>
-  <artifactId>nutricraft-soap</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <name>nutricraft-soap Maven Webapp</name>
-  <url>http://maven.apache.org</url>
-  <properties>
-    <maven.compiler.source>19</maven.compiler.source>
-    <maven.compiler.target>19</maven.compiler.target>
-  </properties>
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.13.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>jakarta.xml.ws</groupId>
-      <artifactId>jakarta.xml.ws-api</artifactId>
-      <version>4.0.0</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt -->
-    <dependency>
-      <groupId>com.sun.xml.ws</groupId>
-      <artifactId>jaxws-rt</artifactId>
-      <version>4.0.1</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-ri -->
-    <dependency>
-      <groupId>com.sun.xml.ws</groupId>
-      <artifactId>jaxws-ri</artifactId>
-      <version>4.0.1</version>
-      <type>pom</type>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
-    <dependency>
-      <groupId>jakarta.annotation</groupId>
-      <artifactId>jakarta.annotation-api</artifactId>
-      <version>2.1.1</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
-    <dependency>
-      <groupId>javax.xml.ws</groupId>
-      <artifactId>jaxws-api</artifactId>
-      <version>2.3.1</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>8.0.33</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-shade-plugin -->
-    <dependency>
-      <groupId>org.apache.maven.plugins</groupId>
-      <artifactId>maven-shade-plugin</artifactId>
-      <version>3.3.0</version>
-    </dependency>
-    <dependency>
-      <groupId>io.github.cdimascio</groupId>
-      <artifactId>dotenv-java</artifactId>
-      <version>2.3.1</version>
-    </dependency>
-    <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
-    <dependency>
-      <groupId>jakarta.servlet</groupId>
-      <artifactId>jakarta.servlet-api</artifactId>
-      <version>6.0.0</version>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-clean-plugin</artifactId>
-        <version>3.1.0</version>
-      </plugin>
-      <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
-      <plugin>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>3.0.2</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.8.0</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>2.22.1</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>3.0.2</version>
-        <configuration>
-          <archive>
-            <manifest>
-              <addClasspath>true</addClasspath>
-              <mainClass>com.nutricraft.App</mainClass>
-            </manifest>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifest>
-              <mainClass>com.nutricraft.App</mainClass>
-            </manifest>
-          </archive>
-          <descriptorRefs>
-            <descriptorRef>jar-with-dependencies</descriptorRef>
-          </descriptorRefs>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-install-plugin</artifactId>
-        <version>2.5.2</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-deploy-plugin</artifactId>
-        <version>2.8.2</version>
-      </plugin>
-      <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
-      <plugin>
-        <artifactId>maven-site-plugin</artifactId>
-        <version>3.7.1</version>
-      </plugin>
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>3.0.0</version>
-      </plugin>
-    </plugins>
-    <finalName>nutricraft-soap</finalName>
-  </build>
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.nutricraft</groupId>
+    <artifactId>nutricraft-soap</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.ws</groupId>
+            <artifactId>jaxws-rt</artifactId>
+            <version>2.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.messaging.saaj</groupId>
+            <artifactId>saaj-impl</artifactId>
+            <version>1.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml.soap</groupId>
+            <artifactId>javax.xml.soap-api</artifactId>
+            <version>1.4.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.ws</groupId>
+            <artifactId>jaxws-ri</artifactId>
+            <version>2.3.3</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>javax.xml.ws</groupId>
+            <artifactId>jaxws-api</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <transformers>
+                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                            <mainClass>org.nutricraft.Main</mainClass>
+                        </transformer>
+                    </transformers>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-clean-plugin</artifactId>
+                <version>3.1.0</version>
+            </plugin>
+            <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.0.2</version>
+            </plugin>
+            <plugin>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.0</version>
+            </plugin>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.22.1</version>
+            </plugin>
+            <plugin>
+                <artifactId>maven-install-plugin</artifactId>
+                <version>2.5.2</version>
+            </plugin>
+            <plugin>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8.2</version>
+            </plugin>
+            <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <version>3.7.1</version>
+            </plugin>
+            <plugin>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>3.0.0</version>
+            </plugin>
+        </plugins>
+        <finalName>nutricraft-soap</finalName>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/src/main/java/com/nutricraft/App.java b/src/main/java/com/nutricraft/App.java
deleted file mode 100644
index 55da91b582315742f0c079d2094558cf488bddfd..0000000000000000000000000000000000000000
--- a/src/main/java/com/nutricraft/App.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.nutricraft;
-
-public class App {
-    public static void main( String[] args )
-    {
-        System.out.println(" tesssssss sddgjmbsg");
-    }
-}
diff --git a/src/main/java/org/nutricraft/Database/Database.java b/src/main/java/org/nutricraft/Database/Database.java
new file mode 100644
index 0000000000000000000000000000000000000000..30ba5825d2ab385d34653cf83e1757773589a79d
--- /dev/null
+++ b/src/main/java/org/nutricraft/Database/Database.java
@@ -0,0 +1,42 @@
+package org.nutricraft.Database;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+
+public class Database {
+
+    protected Connection connection;
+
+    public Database(){
+        try{
+            String url = System.getenv("DATABASE_URL");
+            String username = System.getenv("DB_USER");
+            String password = System.getenv("DB_PASSWORD");
+            System.out.println("url: " + url);
+            this.connection = DriverManager.getConnection(url, username, password);
+
+            System.out.println("Connected to database");
+        }catch (Exception e){
+            e.printStackTrace();
+            System.out.println("Something went wrong when connecting to database");
+        }
+    }
+    
+    public Connection getConn(){
+        return connection;
+    }
+
+    public void InsertLog(String desc, String endpoint, String ip, String requested_at) {
+        try {
+            Statement statement = this.connection.createStatement();
+            String query = "INSERT INTO logging (description, endpoint, IP, requested_at) VALUES ('" + desc + "', '" + endpoint + "', '" + ip + "','" + requested_at +"')";
+            statement.executeUpdate(query);
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("Failed to insert log");
+        }
+        System.out.println("Successfully inserted log");
+    }
+
+}
diff --git a/src/main/java/org/nutricraft/Main.java b/src/main/java/org/nutricraft/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cc1116d7ff9e586e261a1acb5c21bffb015932c
--- /dev/null
+++ b/src/main/java/org/nutricraft/Main.java
@@ -0,0 +1,24 @@
+package org.nutricraft;
+
+
+import org.nutricraft.Services.CoinServicesImpl;
+import org.nutricraft.Services.LevelCreatorServicesImpl;
+import org.nutricraft.Services.LevelUserServicesImpl;
+import org.nutricraft.Services.SubscriptionServicesImpl;
+import javax.xml.ws.Endpoint;
+
+
+public class Main {
+    public static void main(String[] args) {
+        try {
+
+            Endpoint.publish("http://nutricraft-soap:8081/ws/subscription", new SubscriptionServicesImpl());
+            Endpoint.publish("http://nutricraft-soap:8081/ws/userLevels", new LevelUserServicesImpl());
+            Endpoint.publish("http://nutricraft-soap:8081/ws/creatorLevels", new LevelCreatorServicesImpl());
+            Endpoint.publish("http://nutricraft-soap:8081/ws/coins", new CoinServicesImpl());
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("Something went wrong....");
+        }
+    }
+}
diff --git a/src/main/java/org/nutricraft/Model/Coins.java b/src/main/java/org/nutricraft/Model/Coins.java
new file mode 100644
index 0000000000000000000000000000000000000000..e85621634a456862888be8062818bd92419390c7
--- /dev/null
+++ b/src/main/java/org/nutricraft/Model/Coins.java
@@ -0,0 +1,29 @@
+package org.nutricraft.Model;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class Coins {
+    private String id;
+    private int coins;
+
+    public Coins() {
+        this.id = "";
+        this.coins = 0;
+    }
+
+    public Coins(String id, int coins) {
+        this.id = id;
+        this.coins = coins;
+    }
+
+    @XmlElement
+    public String getId() {
+        return this.id;
+    }
+    @XmlElement
+    public int getCoins() {
+        return this.coins;
+    }
+}
diff --git a/src/main/java/org/nutricraft/Model/CreatorLevels.java b/src/main/java/org/nutricraft/Model/CreatorLevels.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d79cb3ac51524683f98ae53b67d1925f4b927a2
--- /dev/null
+++ b/src/main/java/org/nutricraft/Model/CreatorLevels.java
@@ -0,0 +1,28 @@
+package org.nutricraft.Model;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class CreatorLevels {
+
+    private String id_creator;
+    private int exp;
+
+    public CreatorLevels(){
+        this.id_creator="";
+        this.exp=0;
+    }
+    public CreatorLevels(String id_creator, int exp){
+        this.id_creator = id_creator;
+        this.exp = exp;
+    }
+    @XmlElement
+    public int getExp(){
+        return this.exp;
+    }
+    @XmlElement
+    public String getId(){
+        return this.id_creator;
+    }
+}
diff --git a/src/main/java/org/nutricraft/Model/Subscibers.java b/src/main/java/org/nutricraft/Model/Subscibers.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ca08ffec58022b769ccd5e74cea861cc74904fd
--- /dev/null
+++ b/src/main/java/org/nutricraft/Model/Subscibers.java
@@ -0,0 +1,37 @@
+package org.nutricraft.Model;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class Subscibers {
+    private int id;
+    private String id_creator;
+    private int id_user;
+
+    public Subscibers() {
+        this.id = 0;
+        this.id_creator = "";
+        this.id_user = 0;
+    }
+    public Subscibers(int id, String id_creator, int id_user){
+        this.id = id;
+        this.id_creator = id_creator;
+        this.id_user = id_user;
+    }
+
+    @XmlElement
+    public int getId(){
+        return this.id;
+    }
+    @XmlElement
+    public String getId_creator(){
+        return this.id_creator;
+    }
+    @XmlElement
+    public int getId_user(){
+        return this.id_user;
+    }
+
+
+}
diff --git a/src/main/java/org/nutricraft/Model/UserLevels.java b/src/main/java/org/nutricraft/Model/UserLevels.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a3b118832141610f79420ce9d9458452a895802
--- /dev/null
+++ b/src/main/java/org/nutricraft/Model/UserLevels.java
@@ -0,0 +1,27 @@
+package org.nutricraft.Model;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class UserLevels {
+    private int exp;
+    private int id_user;
+
+    public UserLevels(){
+        this.exp=0;
+        this.id_user=0;
+    }
+    public UserLevels(int id_user, int exp){
+        this.id_user = id_user;
+        this.exp = exp;
+    }
+    @XmlElement
+    public int getExp(){
+        return this.exp;
+    }
+    @XmlElement
+    public int getId(){
+        return this.id_user;
+    }
+}
diff --git a/src/main/java/org/nutricraft/Services/CoinServices.java b/src/main/java/org/nutricraft/Services/CoinServices.java
new file mode 100644
index 0000000000000000000000000000000000000000..923bdd80ca39d5b25411dc12a463b749b27dc7df
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/CoinServices.java
@@ -0,0 +1,32 @@
+package org.nutricraft.Services;
+
+
+import org.nutricraft.Model.Coins;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService
+public interface CoinServices {
+
+    @WebMethod
+    public String newCoins(String id);
+
+    @WebMethod
+    public List<Coins> getAllCoins();
+
+    @WebMethod
+    public Integer getCoins(String id);
+
+    @WebMethod
+    public String addCoins(String id, int coins);
+
+    @WebMethod
+    public String substractCoins(String id, int coins);
+
+    @WebMethod
+    public String deleteCoins(String id);
+
+
+}
diff --git a/src/main/java/org/nutricraft/Services/CoinServicesImpl.java b/src/main/java/org/nutricraft/Services/CoinServicesImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..dab2df5415a23683b51693a1e66d0ddbfac2abf6
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/CoinServicesImpl.java
@@ -0,0 +1,148 @@
+package org.nutricraft.Services;
+
+import org.nutricraft.Database.Database;
+import org.nutricraft.Model.Coins;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+@WebService(endpointInterface = "org.nutricraft.Services.CoinServices")
+public class CoinServicesImpl extends Services implements CoinServices{
+
+    @WebMethod
+    public String newCoins(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "INSERT INTO coins (id, coin) VALUES ('" + id + "', 0)";
+            statement.executeUpdate(query);
+            log("New Coins");
+            return "Successfully created new coins";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to create new coins";
+    }
+
+    @WebMethod
+    public List<Coins> getAllCoins() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<Coins> coins = new ArrayList<Coins>();
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT * FROM coins";
+            ResultSet result = statement.executeQuery(query);
+            while (result.next()) {
+                coins.add(new Coins(result.getString("id"), result.getInt("coin")));
+            }
+            log("Get All Coins");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        for (Coins coin : coins) {
+            System.out.print(coin.getId()+" ");
+            System.out.println(coin.getCoins());
+        }
+
+        return coins;
+    }
+
+    @WebMethod
+    public Integer getCoins(String id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        int coin=0;
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT coin FROM coins JOIN subscribers ON coins.id = subscribers.id_creator WHERE coins.id = '" + id + "'";
+            ResultSet result = statement.executeQuery(query);
+            if(result.next()){
+                coin = result.getInt("coin");
+            }
+            log("Get Coins");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return coin;
+    }
+
+    @WebMethod
+    public String addCoins(String id, int coins) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE coins SET coin = coin + " + coins + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Add Coins");
+            return "Successfully added coins";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to add coins";
+    }
+
+    @WebMethod
+    public String substractCoins(String id, int coins) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE coins SET coin = coin - " + coins + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Substract Coins");
+            return "Successfully removed coins";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to remove coins";
+    }
+
+    @WebMethod
+    public String deleteCoins(String id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "DELETE FROM coins WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Delete Coins");
+            return "Successfully deleted coins";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to delete coins";
+    }
+
+}
diff --git a/src/main/java/org/nutricraft/Services/LevelCreatorServices.java b/src/main/java/org/nutricraft/Services/LevelCreatorServices.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5c87c88a1d7c3532fa8da01b1e49415589000e7
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/LevelCreatorServices.java
@@ -0,0 +1,29 @@
+package org.nutricraft.Services;
+
+
+import org.nutricraft.Model.CreatorLevels;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+@WebService
+public interface LevelCreatorServices {
+
+    @WebMethod
+    public String newCreator(String id);
+
+    @WebMethod
+    public List<CreatorLevels> getAllLevelCreator();
+
+    @WebMethod
+    public Integer getExpCreator(String id);
+
+    @WebMethod
+    public String addExpCreator(String id, int exp);
+
+    @WebMethod
+    public String substractExpCreator(String id, int exp);
+
+    @WebMethod
+    public String deleteExpCreator(String id);
+}
diff --git a/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java b/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..9944d3a5b713a9270ea4ce0b8a889b308fd744e2
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/LevelCreatorServicesImpl.java
@@ -0,0 +1,144 @@
+package org.nutricraft.Services;
+
+
+import org.nutricraft.Database.Database;
+import org.nutricraft.Model.CreatorLevels;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+@WebService(endpointInterface = "org.nutricraft.Services.LevelCreatorServices")
+public class LevelCreatorServicesImpl extends Services implements LevelCreatorServices{
+
+    @WebMethod
+    public String newCreator(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "INSERT INTO creatorlevels (id, exp) VALUES ('" + id + "', 0)";
+            statement.executeUpdate(query);
+            log("New Creator");
+            return "Successfully created new creator";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to create new creator";
+    }
+
+    @WebMethod
+    public List<CreatorLevels> getAllLevelCreator(){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<CreatorLevels> creator = new ArrayList<CreatorLevels>();
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT * FROM creatorlevels";
+            ResultSet result = statement.executeQuery(query);
+            while (result.next()){
+                creator.add(new CreatorLevels(result.getString("id"),result.getInt("exp")));
+            }
+            log("Get All Levels Creators");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return creator;
+    }
+
+    @WebMethod
+    public Integer getExpCreator(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        int exp=0;
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT exp FROM creatorlevels WHERE id = '" + id + "'";
+            ResultSet result = statement.executeQuery(query);
+            if(result.next()){
+                exp = result.getInt("exp");
+            }
+            log("Get Exp");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return exp;
+    }
+
+    @WebMethod
+    public String addExpCreator(String id, int exp){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE creatorlevels SET exp = exp + " + exp + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Add Exp");
+            return "Successfully add exp creator";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to add exp creator";
+    }
+
+    @WebMethod
+    public String substractExpCreator(String id, int exp){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE creatorlevels SET exp = exp - " + exp + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Substract Exp");
+            return "Successfully substract exp creator";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to substract exp creator";
+    }
+
+    @WebMethod
+    public String deleteExpCreator(String id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "DELETE FROM creatorlevels WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Delete Exp");
+            return "Successfully delete exp creator";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to delete exp creator";
+    }
+
+}
diff --git a/src/main/java/org/nutricraft/Services/LevelUserServices.java b/src/main/java/org/nutricraft/Services/LevelUserServices.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c7c2af62a69e6b4d53abdffed52d8881fb941fa
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/LevelUserServices.java
@@ -0,0 +1,30 @@
+package org.nutricraft.Services;
+
+
+import org.nutricraft.Model.UserLevels;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService
+public interface LevelUserServices {
+
+    @WebMethod
+    public String newUser(int id);
+
+    @WebMethod
+    public List<UserLevels> getAllLevelUser();
+
+    @WebMethod
+    public Integer getExpUser(int id);
+
+    @WebMethod
+    public String addExpUser(int id, int exp);
+
+    @WebMethod
+    public String substractExpUser(int id, int exp);
+
+    @WebMethod
+    public String deleteExpUser(int id);
+}
diff --git a/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java b/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..243538063a52628a296a9834a0227036464b1be7
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/LevelUserServicesImpl.java
@@ -0,0 +1,146 @@
+package org.nutricraft.Services;
+
+import org.nutricraft.Database.Database;
+import org.nutricraft.Model.UserLevels;
+
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@WebService(endpointInterface = "org.nutricraft.Services.LevelUserServices")
+public class LevelUserServicesImpl extends Services implements LevelUserServices {
+
+    @WebMethod
+    public String newUser(int id){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "INSERT INTO userlevels (id, exp) VALUES ('" + id + "', 0)";
+            statement.executeUpdate(query);
+            log("New User");
+            return "Successfully created new user";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to create new user";
+    }
+
+    @WebMethod
+    public List<UserLevels> getAllLevelUser() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<UserLevels> user = new ArrayList<UserLevels>();
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT * FROM userlevels";
+            ResultSet result = statement.executeQuery(query);
+            while (result.next()){
+                user.add(new UserLevels(result.getInt("id"),result.getInt("exp")));
+            }
+            log("Get All Levels User");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return user;
+    }
+
+    @WebMethod
+    public Integer getExpUser(int id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        int exp=0;
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT exp FROM userlevels WHERE id = '" + id + "'";
+            ResultSet result = statement.executeQuery(query);
+            if(result.next()){
+                exp = result.getInt("exp");
+            }
+            log("Get Exp User");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return exp;
+    }
+
+    @WebMethod
+    public String addExpUser(int id, int exp) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE userlevels SET exp = exp + " + exp + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Add Exp User");
+            return "Successfully added exp";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to add exp";
+    }
+
+    @WebMethod
+    public String substractExpUser(int id, int exp) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "UPDATE userlevels SET exp = exp - " + exp + " WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Substract Exp User");
+            return "Successfully substract exo";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to subsctract exp";
+    }
+
+    @WebMethod
+    public String deleteExpUser(int id) {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try{
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "DELETE FROM userlevels WHERE id = '" + id + "'";
+            statement.executeUpdate(query);
+            log("Delete Exp User");
+            return "Successfully deleted userlevels";
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return "Failed to delete userlevels";
+    }
+
+
+}
diff --git a/src/main/java/org/nutricraft/Services/Services.java b/src/main/java/org/nutricraft/Services/Services.java
new file mode 100644
index 0000000000000000000000000000000000000000..22dfbe0e24028055a5a1bdb12dcb7b7e23531d0a
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/Services.java
@@ -0,0 +1,44 @@
+package org.nutricraft.Services;
+
+import org.nutricraft.Database.Database;
+
+import javax.annotation.Resource;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import java.sql.Timestamp;
+import java.util.Date;
+
+public class Services {
+    @Resource
+    private WebServiceContext wsContext;
+    protected Boolean validateApiKey() {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        if(keyValue.length==0 || !keyValue[0].equals("APIkey")){
+            return false;
+        }
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        if(apiKey.equals("lalala")||apiKey.equals("hahaha")){
+            return true;
+        }else{
+            return false;
+        }
+    }
+    //
+    protected void log(String description) {
+        MessageContext messageContext = wsContext.getMessageContext();
+        String queryString = (String) messageContext.get("javax.xml.ws.http.request.querystring");
+        System.out.println("messageContext: " + queryString);
+        String[] keyValue = queryString.split("=");
+        String apiKey = keyValue[1];
+        System.out.println("API KEY: " + apiKey);
+        String ip = "123";
+        String endpoint = (String) messageContext.get("javax.xml.ws.service.endpoint.address");
+        Timestamp timestamp = new Timestamp(new Date().getTime());
+        Database db = new Database();
+        db.InsertLog(description, endpoint, ip, timestamp.toString());
+    }
+}
diff --git a/src/main/java/org/nutricraft/Services/SubscriptionServices.java b/src/main/java/org/nutricraft/Services/SubscriptionServices.java
new file mode 100644
index 0000000000000000000000000000000000000000..9260763dfffe13483d1f5781e3b5a501a7b3fc2f
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/SubscriptionServices.java
@@ -0,0 +1,26 @@
+package org.nutricraft.Services;
+
+
+import org.nutricraft.Model.Subscibers;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.util.List;
+
+@WebService
+public interface SubscriptionServices {
+    @WebMethod
+    public String newSubscription(String idCreator, int idSubscriber);
+
+    @WebMethod
+    public Boolean checkSubscription(String idCreator, int idSubscriber);
+
+    @WebMethod
+    public List<Integer> getSubscribers(String idCreator);
+
+    @WebMethod
+    public List<String> getCreators (int idSubscriber);
+
+    @WebMethod
+    public List<Subscibers> getAllSubscription();
+}
diff --git a/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java b/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f058e7c4258736ee6ee86ef135e3924539996ecb
--- /dev/null
+++ b/src/main/java/org/nutricraft/Services/SubscriptionServicesImpl.java
@@ -0,0 +1,141 @@
+package org.nutricraft.Services;
+
+import org.nutricraft.Database.Database;
+import org.nutricraft.Model.Subscibers;
+
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+@WebService (endpointInterface = "org.nutricraft.Services.SubscriptionServices")
+public class SubscriptionServicesImpl extends Services implements SubscriptionServices{
+
+    @WebMethod
+    public String newSubscription(String idCreator, int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return "API KEY INVALID";
+        }
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "INSERT INTO subscribers (id_creator, id_user) VALUES ('" + idCreator + "', '" + idSubscriber + "')";
+            statement.executeUpdate(query);
+            log("New Subscription");
+            return "Successfully inserted new subscription";
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "Failed to insert new subscription";
+    }
+    @WebMethod
+    public Boolean checkSubscription(String idCreator, int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT * FROM subscribers WHERE id_creator = '" + idCreator + "' AND id_user = '" + idSubscriber + "'";
+            ResultSet result = statement.executeQuery(query);
+            if (result.next()) {
+                log("Check Subscription");
+                return true;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    @WebMethod
+    public List<Integer> getSubscribers(String idCreator){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<Integer> listSubscribers = new ArrayList<Integer>();
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT id_user FROM subscribers WHERE id_creator = '" + idCreator + "'";
+            ResultSet result = statement.executeQuery(query);
+            while (result.next()) {
+                int id = result.getInt("id_user");
+                System.out.println("id: " + id);
+                listSubscribers.add(id);
+            }
+            log("Get Subscribers");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return listSubscribers;
+    }
+
+    @WebMethod
+    public List<String> getCreators(int idSubscriber){
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<String> listCreators = new ArrayList<String>();
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT id_creator FROM subscribers WHERE id_user = '" + idSubscriber + "'";
+            ResultSet result = statement.executeQuery(query);
+            while (result.next()) {
+                String id = result.getString("id_creator");
+                System.out.println("id: " + id);
+                listCreators.add(id);
+            }
+            log("Get Creators");
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return listCreators;
+    }
+
+    @WebMethod
+    public List<Subscibers> getAllSubscription() {
+        if(!validateApiKey()){
+            System.out.println("API KEY INVALID");
+            return null;
+        }
+        List<Subscibers> listSubscribers = new ArrayList<Subscibers>();
+
+        try {
+            Database db = new Database();
+            Connection connection = db.getConn();
+            Statement statement = connection.createStatement();
+            String query = "SELECT * FROM subscribers";
+            ResultSet result = statement.executeQuery(query);
+
+            while (result.next()) {
+                int id = result.getInt("id");
+                String idCreator = result.getString("id_creator");
+                int idSubscriber = result.getInt("id_user");
+                listSubscribers.add(new Subscibers(id,idCreator,idSubscriber));
+            }
+            log("Get All Subscription");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println("==================");
+        for(Subscibers sub : listSubscribers){
+            System.out.println("id: " + sub.getId() + " id_creator: " + sub.getId_creator() + " id_user: " + sub.getId_user());
+        }
+        return listSubscribers;
+    }
+
+}
+