diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index f1d745e10c7d3720c463d6c9f03bfe6fac462f74..0cdf532d6c76d9b15b6ace7cac1967604592bd9a 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,12 +7,14 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
-        <module name="TD4" />
+        <module name="filestore" />
       </profile>
     </annotationProcessing>
     <bytecodeTargetLevel>
+      <module name="filestroe" target="17" />
       <module name="jayblanc" target="17" />
       <module name="td2" target="17" />
+      <module name="TD4" target="17" />
     </bytecodeTargetLevel>
   </component>
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 1bb9b745c7bb5f50eb5476141dbb994c8846678e..279627492fad5149bf701d7940afabb75cd01d1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,35 +3,23 @@
          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>fr.miage23.filestore</groupId>
-    <artifactId>jayblanc</artifactId>
+    <groupId>fr.ul.miage</groupId>
+    <artifactId>filestore</artifactId>
     <version>0.1-SNAPSHOT</version>
     <packaging>war</packaging>
 
     <name>The FileStore Application</name>
     <organization>
-        <name>Miage Nancy</name>
-        <url>http://www.miage-nancy.fr</url>
+        <name>IDMC</name>
+        <url>http://www.idmc.fr</url>
     </organization>
-    <developers>
-        <developer>
-            <id>jayblanc</id>
-            <name>Jerome Blanchard</name>
-            <email>jayblanc@gmail.com</email>
-            <url>http://wiki.jayblanc.fr</url>
-            <organization>Equasens</organization>
-            <organizationUrl>http://www.equasens.fr</organizationUrl>
-            <roles>
-                <role>developer</role>
-            </roles>
-            <timezone>Europe/Paris</timezone>
-        </developer>
-    </developers>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.report.sourceEncoding>UTF-8</project.report.sourceEncoding>
         <maven.compiler.release>17</maven.compiler.release>
+
+        <jboss.home>C:\Users\LB-C\Bureau\Logiciels\wildfly-29.0.1.Final</jboss.home>
         <jakartaee-api.version>10.0.0</jakartaee-api.version>
         <wildfly.version>30.0.0.Final</wildfly.version>
         <compiler-plugin.version>3.11.0</compiler-plugin.version>
@@ -40,9 +28,12 @@
 
         <version.wildfly-bom>30.0.0.Final</version.wildfly-bom>
         <version.tika>2.5.0</version.tika>
-        <version.apache-commons-io>2.11.0</version.apache-commons-io>
         <version.apache-commons-codec>1.15</version.apache-commons-codec>
         <version.freemarker>2.3.30</version.freemarker>
+
+        <version.junit>4.13.2</version.junit>
+        <version.arquillian>1.8.0.Final</version.arquillian>
+        <version.wildfly-arquillian>5.0.1.Final</version.wildfly-arquillian>
     </properties>
 
     <repositories>
@@ -67,9 +58,17 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>org.jboss.arquillian</groupId>
+                <artifactId>arquillian-bom</artifactId>
+                <version>${version.arquillian}</version>
+                <scope>import</scope>
+                <type>pom</type>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
+
     <dependencies>
         <dependency>
             <groupId>jakarta.platform</groupId>
@@ -77,13 +76,11 @@
             <version>${jakartaee-api.version}</version>
             <scope>provided</scope>
         </dependency>
-
         <dependency>
             <groupId>org.jboss.resteasy</groupId>
             <artifactId>resteasy-multipart-provider</artifactId>
             <scope>provided</scope>
         </dependency>
-
         <dependency>
             <groupId>org.freemarker</groupId>
             <artifactId>freemarker</artifactId>
@@ -94,16 +91,59 @@
             <artifactId>commons-codec</artifactId>
             <version>${version.apache-commons-codec}</version>
         </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>${version.apache-commons-io}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.tika</groupId>
             <artifactId>tika-core</artifactId>
             <version>${version.tika}</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${version.junit}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.shrinkwrap</groupId>
+            <artifactId>shrinkwrap-api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.shrinkwrap.resolver</groupId>
+            <artifactId>shrinkwrap-resolver-depchain</artifactId>
+            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.shrinkwrap</groupId>
+            <artifactId>shrinkwrap-impl-base</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.shrinkwrap</groupId>
+            <artifactId>shrinkwrap-spi</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.wildfly.arquillian</groupId>
+            <artifactId>wildfly-arquillian-common</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.junit</groupId>
+            <artifactId>arquillian-junit-container</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.jboss.arquillian.protocol</groupId>
+            <artifactId>arquillian-protocol-servlet-jakarta</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.wildfly.arquillian</groupId>
+            <artifactId>wildfly-arquillian-container-managed</artifactId>
+            <version>${version.wildfly-arquillian}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -131,7 +171,7 @@
                 <configuration>
                     <version>${wildfly.version}</version>
                     <server-config>standalone-full.xml</server-config>
-                    <jbossHome>/opt/wildfly</jbossHome>
+                    <jbossHome>${jboss.home}</jbossHome>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java b/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java
deleted file mode 100644
index b714528fc40d9e6e8239998162e3a638819456a6..0000000000000000000000000000000000000000
--- a/src/main/java/fr/miage23/filestore/api/dto/InputNodeDto.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package fr.miage23.filestore.api.dto;
-
-import fr.miage23.filestore.api.validation.Filename;
-import jakarta.validation.constraints.Pattern;
-import jakarta.validation.constraints.Size;
-import jakarta.ws.rs.FormParam;
-import jakarta.ws.rs.core.MediaType;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jboss.resteasy.annotations.providers.multipart.PartType;
-
-import java.io.InputStream;
-
-@Data
-@NoArgsConstructor // Default constructor needed for JAX-RS
-public class InputNodeDto {
-
-    @FormParam("name")
-    @PartType(MediaType.TEXT_PLAIN)
-    @Filename
-    private String name;
-    @FormParam("data")
-    @PartType(MediaType.APPLICATION_OCTET_STREAM)
-    private InputStream data = null;
-    @Size(max=2000000, message="content size is 2Mo max, for larger content use a multipart-form-data with data parameter")
-    private byte[] content;
-
-}
-
diff --git a/src/main/java/fr/miage23/filestore/api/dto/OutputNodeDto.java b/src/main/java/fr/miage23/filestore/api/dto/OutputNodeDto.java
deleted file mode 100644
index 2899cb3e0ce38732c1fccb1bc39c4860f42b7ef4..0000000000000000000000000000000000000000
--- a/src/main/java/fr/miage23/filestore/api/dto/OutputNodeDto.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package fr.miage23.filestore.api.dto;
-
-import fr.miage23.filestore.files.entity.TypeNode;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class OutputNodeDto {
-    private TypeNode type;
-    private String id;
-    private String parent;
-    private String name;
-    private long size;
-    private long creation;
-    private long modification;
-}
diff --git a/src/main/java/fr/miage23/filestore/api/exceptions/NodeNotFoundExceptionMapper.java b/src/main/java/fr/miage23/filestore/api/exceptions/NodeNotFoundExceptionMapper.java
deleted file mode 100644
index 09ca011fed0791d0d9d0473bb89da25193cb0540..0000000000000000000000000000000000000000
--- a/src/main/java/fr/miage23/filestore/api/exceptions/NodeNotFoundExceptionMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package fr.miage23.filestore.api.exceptions;
-
-import fr.miage23.filestore.files.exceptions.NodeNotFoundException;
-import jakarta.ws.rs.core.Response;
-import jakarta.ws.rs.ext.ExceptionMapper;
-import jakarta.ws.rs.ext.Provider;
-
-@Provider
-public class NodeNotFoundExceptionMapper implements ExceptionMapper<NodeNotFoundException> {
-
-    @Override
-    public Response toResponse(NodeNotFoundException e) {
-        return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
-    }
-}
-
diff --git a/src/main/java/fr/miage23/filestore/api/FilestoreApplication.java b/src/main/java/fr/ul/miage/api/FilestoreApplication.java
similarity index 87%
rename from src/main/java/fr/miage23/filestore/api/FilestoreApplication.java
rename to src/main/java/fr/ul/miage/api/FilestoreApplication.java
index ecd8bf018149e9cfa3adc2f282976a39dae587c8..a78169b4cdb70958c9156e4c6690806a73c4e3c9 100644
--- a/src/main/java/fr/miage23/filestore/api/FilestoreApplication.java
+++ b/src/main/java/fr/ul/miage/api/FilestoreApplication.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api;
+package fr.ul.miage.api;
 
 import jakarta.servlet.annotation.MultipartConfig;
 import jakarta.ws.rs.ApplicationPath;
diff --git a/src/main/java/fr/miage23/filestore/api/dto/CollectionDto.java b/src/main/java/fr/ul/miage/api/dto/CollectionDto.java
similarity index 95%
rename from src/main/java/fr/miage23/filestore/api/dto/CollectionDto.java
rename to src/main/java/fr/ul/miage/api/dto/CollectionDto.java
index a5a304e06b95e80f1065ac33b0b95df1b29993dc..ded7c1c88224bcfad0460502fd2b84dc0b808e05 100644
--- a/src/main/java/fr/miage23/filestore/api/dto/CollectionDto.java
+++ b/src/main/java/fr/ul/miage/api/dto/CollectionDto.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.dto;
+package fr.ul.miage.api.dto;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/fr/miage23/filestore/api/dto/ErrorDto.java b/src/main/java/fr/ul/miage/api/dto/ErrorDto.java
similarity index 97%
rename from src/main/java/fr/miage23/filestore/api/dto/ErrorDto.java
rename to src/main/java/fr/ul/miage/api/dto/ErrorDto.java
index ff7c964b9b7eed70d27a133e366161ff06fbfd37..f215c4c122cb7115cde0b9ce1eee5c78d25cae1e 100644
--- a/src/main/java/fr/miage23/filestore/api/dto/ErrorDto.java
+++ b/src/main/java/fr/ul/miage/api/dto/ErrorDto.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.dto;
+package fr.ul.miage.api.dto;
 
 import java.util.UUID;
 
diff --git a/src/main/java/fr/miage23/filestore/api/dto/NodeCreateDto.java b/src/main/java/fr/ul/miage/api/dto/InputNodeDto.java
similarity index 91%
rename from src/main/java/fr/miage23/filestore/api/dto/NodeCreateDto.java
rename to src/main/java/fr/ul/miage/api/dto/InputNodeDto.java
index 1f2ec415da07523db6fb90060655e967198bf8ce..4447ef440b57c07df9ef293fc93f6859ed4fbb71 100644
--- a/src/main/java/fr/miage23/filestore/api/dto/NodeCreateDto.java
+++ b/src/main/java/fr/ul/miage/api/dto/InputNodeDto.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.dto;
+package fr.ul.miage.api.dto;
 
 import jakarta.validation.constraints.Pattern;
 import jakarta.validation.constraints.Size;
@@ -8,7 +8,7 @@ import org.jboss.resteasy.annotations.providers.multipart.PartType;
 
 import java.io.InputStream;
 
-public class NodeCreateDto {
+public class InputNodeDto {
 
     @FormParam("name")
     @PartType(MediaType.TEXT_PLAIN)
@@ -20,7 +20,7 @@ public class NodeCreateDto {
     @Size(max=2000000, message="content size is 2Mo max, for larger content use a multipart-form-data with data parameter")
     private byte[] content;
 
-    public NodeCreateDto() {
+    public InputNodeDto() {
     }
 
     public String getName() {
diff --git a/src/main/java/fr/miage23/filestore/api/dto/NodeDto.java b/src/main/java/fr/ul/miage/api/dto/OutputNodeDto.java
similarity index 90%
rename from src/main/java/fr/miage23/filestore/api/dto/NodeDto.java
rename to src/main/java/fr/ul/miage/api/dto/OutputNodeDto.java
index 575e990d5405eec3be46adccef1855886cc0fdde..33b81ec802b658e8a6fbf02a6c5ffd27719b4220 100644
--- a/src/main/java/fr/miage23/filestore/api/dto/NodeDto.java
+++ b/src/main/java/fr/ul/miage/api/dto/OutputNodeDto.java
@@ -1,11 +1,8 @@
-package fr.miage23.filestore.api.dto;
+package fr.ul.miage.api.dto;
 
-import fr.miage23.filestore.files.entity.Node;
+import fr.ul.miage.files.entity.Node;
 
-import java.util.ArrayList;
-import java.util.List;
-
-public class NodeDto {
+public class OutputNodeDto {
 
     private Node.Type type;
     private String id;
@@ -16,7 +13,7 @@ public class NodeDto {
     private long creation;
     private long modification;
 
-    public NodeDto() {
+    public OutputNodeDto() {
     }
 
     public void setNode(Node node) {
diff --git a/src/main/java/fr/miage23/filestore/api/exception/ContentExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/ContentExceptionMapper.java
similarity index 76%
rename from src/main/java/fr/miage23/filestore/api/exception/ContentExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/ContentExceptionMapper.java
index 06681ea59d97713b9f8c245b32b26836af421db0..a3b64026f90250f967dc67113d5c205283e56ad8 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/ContentExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/ContentExceptionMapper.java
@@ -1,8 +1,8 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
-import fr.miage23.filestore.files.exceptions.ContentException;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
+import fr.ul.miage.files.exceptions.ContentException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exceptions/IllegalArgumentExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/IllegalArgumentExceptionMapper.java
similarity index 90%
rename from src/main/java/fr/miage23/filestore/api/exceptions/IllegalArgumentExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/IllegalArgumentExceptionMapper.java
index 4e5e9ce58f0875a331e9af2ab7c8bda82ec023b6..149e8205600f40bc0d3e7134d79d29225f5c193a 100644
--- a/src/main/java/fr/miage23/filestore/api/exceptions/IllegalArgumentExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/IllegalArgumentExceptionMapper.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.exceptions;
+package fr.ul.miage.api.exception;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exception/NodeAlreadyExistsExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/NodeAlreadyExistsExceptionMapper.java
similarity index 76%
rename from src/main/java/fr/miage23/filestore/api/exception/NodeAlreadyExistsExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/NodeAlreadyExistsExceptionMapper.java
index d082e1f9dd58903fddc31299766e7c373b732fb5..61e51f1dccd4c23e1b153afad41902de5e3b21c3 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/NodeAlreadyExistsExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/NodeAlreadyExistsExceptionMapper.java
@@ -1,8 +1,8 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
-import fr.miage23.filestore.files.exceptions.NodeAlreadyExistsException;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
+import fr.ul.miage.files.exceptions.NodeAlreadyExistsException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exception/NodeNotEmptyExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/NodeNotEmptyExceptionMapper.java
similarity index 71%
rename from src/main/java/fr/miage23/filestore/api/exception/NodeNotEmptyExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/NodeNotEmptyExceptionMapper.java
index 86e1b85d4010df973ce19ea4e99c188f64126f07..ea7b0e45a669802faca952557e04aabf65efb413 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/NodeNotEmptyExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/NodeNotEmptyExceptionMapper.java
@@ -1,9 +1,8 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
-import fr.miage23.filestore.files.exceptions.NodeNotEmptyException;
-import fr.miage23.filestore.files.exceptions.NodeNotFoundException;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
+import fr.ul.miage.files.exceptions.NodeNotEmptyException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exception/NodeNotFoundExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/NodeNotFoundExceptionMapper.java
similarity index 76%
rename from src/main/java/fr/miage23/filestore/api/exception/NodeNotFoundExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/NodeNotFoundExceptionMapper.java
index 746050cd37c694a1899637550a69edaf3b7bfd06..bb3de88cacf0e6e2b31a485ff43b06b8f42e80db 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/NodeNotFoundExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/NodeNotFoundExceptionMapper.java
@@ -1,8 +1,8 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
-import fr.miage23.filestore.files.exceptions.NodeNotFoundException;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
+import fr.ul.miage.files.exceptions.NodeNotFoundException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exception/NodeTypeExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/NodeTypeExceptionMapper.java
similarity index 76%
rename from src/main/java/fr/miage23/filestore/api/exception/NodeTypeExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/NodeTypeExceptionMapper.java
index 5efdf17f9efc6a130de3f14a8a1010637b5bff59..0f4a95e95c92c25339ed4d8301e92d8854a29064 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/NodeTypeExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/NodeTypeExceptionMapper.java
@@ -1,8 +1,8 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
-import fr.miage23.filestore.files.exceptions.NodeTypeException;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
+import fr.ul.miage.files.exceptions.NodeTypeException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
 import jakarta.ws.rs.ext.Provider;
diff --git a/src/main/java/fr/miage23/filestore/api/exception/WebApplicationExceptionMapper.java b/src/main/java/fr/ul/miage/api/exception/WebApplicationExceptionMapper.java
similarity index 84%
rename from src/main/java/fr/miage23/filestore/api/exception/WebApplicationExceptionMapper.java
rename to src/main/java/fr/ul/miage/api/exception/WebApplicationExceptionMapper.java
index 65847bd479da841ef4605ef7e0d205a5779f68da..6a06829ac91629019f9050acaac02a2e35796cb6 100644
--- a/src/main/java/fr/miage23/filestore/api/exception/WebApplicationExceptionMapper.java
+++ b/src/main/java/fr/ul/miage/api/exception/WebApplicationExceptionMapper.java
@@ -1,7 +1,7 @@
-package fr.miage23.filestore.api.exception;
+package fr.ul.miage.api.exception;
 
-import fr.miage23.filestore.api.FilestoreApplication;
-import fr.miage23.filestore.api.dto.ErrorDto;
+import fr.ul.miage.api.FilestoreApplication;
+import fr.ul.miage.api.dto.ErrorDto;
 import jakarta.ws.rs.WebApplicationException;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.ext.ExceptionMapper;
diff --git a/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java b/src/main/java/fr/ul/miage/api/filter/VersionFilter.java
similarity index 93%
rename from src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java
rename to src/main/java/fr/ul/miage/api/filter/VersionFilter.java
index 92bb75354aaedd0cc65d9229a4411cdda45aaed8..ab3342dff29fe4f3530da6d7f29ec66f208250e5 100644
--- a/src/main/java/fr/miage23/filestore/api/filter/VersionFilter.java
+++ b/src/main/java/fr/ul/miage/api/filter/VersionFilter.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.filter;
+package fr.ul.miage.api.filter;
 
 import jakarta.ws.rs.container.ContainerRequestContext;
 import jakarta.ws.rs.container.ContainerResponseContext;
diff --git a/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java b/src/main/java/fr/ul/miage/api/resources/NodesResource.java
similarity index 77%
rename from src/main/java/fr/miage23/filestore/api/resources/NodesResource.java
rename to src/main/java/fr/ul/miage/api/resources/NodesResource.java
index e54397d106537510f880a03ef5c9245e7ea7e09e..87880ff7f55a202b754870142f79d265a0168f11 100644
--- a/src/main/java/fr/miage23/filestore/api/resources/NodesResource.java
+++ b/src/main/java/fr/ul/miage/api/resources/NodesResource.java
@@ -1,15 +1,15 @@
-package fr.miage23.filestore.api.resources;
-
-import fr.miage23.filestore.api.dto.CollectionDto;
-import fr.miage23.filestore.api.dto.NodeCreateDto;
-import fr.miage23.filestore.api.template.Template;
-import fr.miage23.filestore.api.template.TemplateContent;
-import fr.miage23.filestore.auth.entity.Profile;
-import fr.miage23.filestore.config.FilestoreConfig;
-import fr.miage23.filestore.files.FileService;
-import fr.miage23.filestore.files.InMemoryFileServiceBean;
-import fr.miage23.filestore.files.entity.Node;
-import fr.miage23.filestore.files.exceptions.*;
+package fr.ul.miage.api.resources;
+
+import fr.ul.miage.api.dto.CollectionDto;
+import fr.ul.miage.api.dto.InputNodeDto;
+import fr.ul.miage.api.template.Template;
+import fr.ul.miage.api.template.TemplateContent;
+import fr.ul.miage.auth.entity.Profile;
+import fr.ul.miage.config.FilestoreConfig;
+import fr.ul.miage.files.FileService;
+import fr.ul.miage.files.FileServiceBean;
+import fr.ul.miage.files.entity.Node;
+import fr.ul.miage.files.exceptions.*;
 import jakarta.inject.Inject;
 import jakarta.validation.Valid;
 import jakarta.ws.rs.*;
@@ -32,7 +32,7 @@ public class NodesResource {
 
     private static final Logger LOGGER = Logger.getLogger(NodesResource.class.getName());
 
-    private FileService service = InMemoryFileServiceBean.getInstance();
+    private FileService service = FileServiceBean.getInstance();
     @Inject
     private FilestoreConfig config;
 
@@ -112,7 +112,7 @@ public class NodesResource {
     @Path("{id}")
     @Produces(MediaType.APPLICATION_JSON)
     @Consumes(MediaType.APPLICATION_JSON)
-    public Response create(@PathParam("id") final String id, @Valid NodeCreateDto dto, @Context UriInfo info) throws NodeNotFoundException, NodeTypeException, NodeAlreadyExistsException, ContentException {
+    public Response create(@PathParam("id") final String id, @Valid InputNodeDto dto, @Context UriInfo info) throws NodeNotFoundException, NodeTypeException, NodeAlreadyExistsException, ContentException {
         LOGGER.log(Level.INFO, "POST /api/nodes/" + id);
         String nid;
         if (dto.getContent() != null) {
@@ -128,7 +128,7 @@ public class NodesResource {
     @Path("{id}")
     @Produces(MediaType.TEXT_HTML)
     @Consumes(MediaType.MULTIPART_FORM_DATA)
-    public Response createView(@PathParam("id") final String id, @MultipartForm @Valid NodeCreateDto dto, @Context UriInfo info) throws NodeNotFoundException, NodeTypeException, NodeAlreadyExistsException, ContentException, IOException {
+    public Response createView(@PathParam("id") final String id, @MultipartForm @Valid InputNodeDto dto, @Context UriInfo info) throws NodeNotFoundException, NodeTypeException, NodeAlreadyExistsException, ContentException, IOException {
         LOGGER.log(Level.INFO, "POST /api/nodes/" + id + " (html)");
         if (dto.getData() != null) {
             service.add(id, dto.getName(), dto.getData());
@@ -139,23 +139,6 @@ public class NodesResource {
         return Response.seeOther(createdUri).build();
     }
 
-    /*
-    @POST
-    @Path("{id}")
-    @Produces(MediaType.TEXT_HTML)
-    @Consumes(MediaType.MULTIPART_FORM_DATA)
-    public Response createView(@PathParam("id") final String id, @FormParam("name") EntityPart name, @FormParam("data") EntityPart data, @Context UriInfo info) throws NodeNotFoundException, NodeTypeException, NodeAlreadyExistsException, ContentException, IOException {
-        LOGGER.log(Level.INFO, "POST /api/nodes/" + id + " (html)");
-        if (data != null) {
-            service.add(id, name.getContent(String.class), data.getContent());
-        } else {
-            service.add(id, name.getContent(String.class));
-        }
-        URI createdUri = info.getBaseUriBuilder().path(NodesResource.class).path(id).path("content").build();
-        return Response.seeOther(createdUri).build();
-    }
-     */
-
     @PUT
     @Path("{id}/{name}")
     @Produces(MediaType.APPLICATION_JSON)
diff --git a/src/main/java/fr/miage23/filestore/api/template/Template.java b/src/main/java/fr/ul/miage/api/template/Template.java
similarity index 86%
rename from src/main/java/fr/miage23/filestore/api/template/Template.java
rename to src/main/java/fr/ul/miage/api/template/Template.java
index 3458727108dd71bda2c0e3a4d813c6110b0006e2..e506592a2a1473e956a2395df8ffc8d5b9c9fcb4 100644
--- a/src/main/java/fr/miage23/filestore/api/template/Template.java
+++ b/src/main/java/fr/ul/miage/api/template/Template.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.template;
+package fr.ul.miage.api.template;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/src/main/java/fr/miage23/filestore/api/template/TemplateBodyWriter.java b/src/main/java/fr/ul/miage/api/template/TemplateBodyWriter.java
similarity index 98%
rename from src/main/java/fr/miage23/filestore/api/template/TemplateBodyWriter.java
rename to src/main/java/fr/ul/miage/api/template/TemplateBodyWriter.java
index 4d57223e8b1be369334c7725761ff48a7b78e249..d67e2c899fc19570b305a62b8136b5c654feb3bc 100644
--- a/src/main/java/fr/miage23/filestore/api/template/TemplateBodyWriter.java
+++ b/src/main/java/fr/ul/miage/api/template/TemplateBodyWriter.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.template;
+package fr.ul.miage.api.template;
 
 import freemarker.template.Configuration;
 import freemarker.template.TemplateException;
diff --git a/src/main/java/fr/miage23/filestore/api/template/TemplateContent.java b/src/main/java/fr/ul/miage/api/template/TemplateContent.java
similarity index 94%
rename from src/main/java/fr/miage23/filestore/api/template/TemplateContent.java
rename to src/main/java/fr/ul/miage/api/template/TemplateContent.java
index fc772a474a134e6df412b4d1bcd6f3ceefe2fc17..a409b94c53030e90f839f5ab9748bd67acb6f7f3 100644
--- a/src/main/java/fr/miage23/filestore/api/template/TemplateContent.java
+++ b/src/main/java/fr/ul/miage/api/template/TemplateContent.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.template;
+package fr.ul.miage.api.template;
 
 public class TemplateContent<T> {
 
diff --git a/src/main/java/fr/miage23/filestore/api/template/TemplateHelper.java b/src/main/java/fr/ul/miage/api/template/TemplateHelper.java
similarity index 97%
rename from src/main/java/fr/miage23/filestore/api/template/TemplateHelper.java
rename to src/main/java/fr/ul/miage/api/template/TemplateHelper.java
index eda68aecd820fe2dd6d3b09aa5b011a8a80c2711..e46aa6a9590f4f6ef7528a93d593c74685a89f2f 100644
--- a/src/main/java/fr/miage23/filestore/api/template/TemplateHelper.java
+++ b/src/main/java/fr/ul/miage/api/template/TemplateHelper.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.template;
+package fr.ul.miage.api.template;
 
 public class TemplateHelper {
 
diff --git a/src/main/java/fr/miage23/filestore/api/validation/Filename.java b/src/main/java/fr/ul/miage/api/validation/Filename.java
similarity index 93%
rename from src/main/java/fr/miage23/filestore/api/validation/Filename.java
rename to src/main/java/fr/ul/miage/api/validation/Filename.java
index 74a4ac7ce16f506eb59dd2cddf31958d122b1892..ab65e7346d5505e16964801a07c6640841130c26 100644
--- a/src/main/java/fr/miage23/filestore/api/validation/Filename.java
+++ b/src/main/java/fr/ul/miage/api/validation/Filename.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.validation;
+package fr.ul.miage.api.validation;
 
 import jakarta.validation.Constraint;
 import jakarta.validation.Payload;
diff --git a/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java b/src/main/java/fr/ul/miage/api/validation/ValidationPattern.java
similarity index 68%
rename from src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java
rename to src/main/java/fr/ul/miage/api/validation/ValidationPattern.java
index 2802ef6b703e9b247e3d28fe264c997439ec8805..a50bc926a40a860a2c165c54db5b56270fa7c4dc 100644
--- a/src/main/java/fr/miage23/filestore/api/validation/ValidationPattern.java
+++ b/src/main/java/fr/ul/miage/api/validation/ValidationPattern.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.api.validation;
+package fr.ul.miage.api.validation;
 
 public class ValidationPattern {
 
diff --git a/src/main/java/fr/miage23/filestore/auth/AuthenticationService.java b/src/main/java/fr/ul/miage/auth/AuthenticationService.java
similarity index 70%
rename from src/main/java/fr/miage23/filestore/auth/AuthenticationService.java
rename to src/main/java/fr/ul/miage/auth/AuthenticationService.java
index 9330f030cb7fc40553582e00e1365e8df09c8cdf..711a4079f55064cc03bca152789d571b6af22a83 100644
--- a/src/main/java/fr/miage23/filestore/auth/AuthenticationService.java
+++ b/src/main/java/fr/ul/miage/auth/AuthenticationService.java
@@ -1,6 +1,6 @@
-package fr.miage23.filestore.auth;
+package fr.ul.miage.auth;
 
-import fr.miage23.filestore.auth.entity.Profile;
+import fr.ul.miage.auth.entity.Profile;
 
 public interface AuthenticationService {
 
diff --git a/src/main/java/fr/miage23/filestore/auth/entity/Profile.java b/src/main/java/fr/ul/miage/auth/entity/Profile.java
similarity index 94%
rename from src/main/java/fr/miage23/filestore/auth/entity/Profile.java
rename to src/main/java/fr/ul/miage/auth/entity/Profile.java
index 030ce5546e074d78e1bbe9bdb941311fcd136c78..05912c8857bc1e1264d88ac151ea2e84ff7c5861 100644
--- a/src/main/java/fr/miage23/filestore/auth/entity/Profile.java
+++ b/src/main/java/fr/ul/miage/auth/entity/Profile.java
@@ -1,6 +1,6 @@
-package fr.miage23.filestore.auth.entity;
+package fr.ul.miage.auth.entity;
 
-import fr.miage23.filestore.auth.AuthenticationService;
+import fr.ul.miage.auth.AuthenticationService;
 import org.apache.commons.codec.digest.DigestUtils;
 
 public class Profile {
diff --git a/src/main/java/fr/miage23/filestore/config/FilestoreConfig.java b/src/main/java/fr/ul/miage/config/FilestoreConfig.java
similarity index 87%
rename from src/main/java/fr/miage23/filestore/config/FilestoreConfig.java
rename to src/main/java/fr/ul/miage/config/FilestoreConfig.java
index bf4e7cab05f14dec3d7ae9f78d0a87b26fc1db36..6bfbdede3d1af68a1555758f62df92b8f1337e8f 100644
--- a/src/main/java/fr/miage23/filestore/config/FilestoreConfig.java
+++ b/src/main/java/fr/ul/miage/config/FilestoreConfig.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.config;
+package fr.ul.miage.config;
 
 import java.nio.file.Path;
 
diff --git a/src/main/java/fr/miage23/filestore/config/FilestoreConfigBean.java b/src/main/java/fr/ul/miage/config/FilestoreConfigBean.java
similarity index 95%
rename from src/main/java/fr/miage23/filestore/config/FilestoreConfigBean.java
rename to src/main/java/fr/ul/miage/config/FilestoreConfigBean.java
index d5f23fc53b3447a764db81cb7ded5c4f4012ae67..11cb38edddfb3a030e9fa148a144879171dfc52c 100644
--- a/src/main/java/fr/miage23/filestore/config/FilestoreConfigBean.java
+++ b/src/main/java/fr/ul/miage/config/FilestoreConfigBean.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.config;
+package fr.ul.miage.config;
 
 import jakarta.annotation.PostConstruct;
 import jakarta.enterprise.context.ApplicationScoped;
@@ -116,4 +116,12 @@ public class FilestoreConfigBean implements FilestoreConfig {
     private static String camelToProp(String var) {
         return var.replaceAll("([a-z])([A-Z]+)", "$1.$2").toLowerCase();
     }
+
+    public Path getHome() {
+        return home;
+    }
+
+    public void setHome(Path home) {
+        this.home = home;
+    }
 }
diff --git a/src/main/java/fr/miage23/filestore/files/FileService.java b/src/main/java/fr/ul/miage/files/FileService.java
similarity index 86%
rename from src/main/java/fr/miage23/filestore/files/FileService.java
rename to src/main/java/fr/ul/miage/files/FileService.java
index 13354663ee3a98529f85665c59c8a2492e241e53..0e2859eb19642bad16ea7ff3bd077935c62eadc3 100644
--- a/src/main/java/fr/miage23/filestore/files/FileService.java
+++ b/src/main/java/fr/ul/miage/files/FileService.java
@@ -1,7 +1,7 @@
-package fr.miage23.filestore.files;
+package fr.ul.miage.files;
 
-import fr.miage23.filestore.files.entity.Node;
-import fr.miage23.filestore.files.exceptions.*;
+import fr.ul.miage.files.entity.Node;
+import fr.ul.miage.files.exceptions.*;
 
 import java.io.InputStream;
 import java.util.List;
diff --git a/src/main/java/fr/miage23/filestore/files/InMemoryFileServiceBean.java b/src/main/java/fr/ul/miage/files/FileServiceBean.java
similarity index 88%
rename from src/main/java/fr/miage23/filestore/files/InMemoryFileServiceBean.java
rename to src/main/java/fr/ul/miage/files/FileServiceBean.java
index cb29ee662e46f34b56ed67fe6714246427adc186..8192ff4841e78290f3dbb8560c3afd3df104bccf 100644
--- a/src/main/java/fr/miage23/filestore/files/InMemoryFileServiceBean.java
+++ b/src/main/java/fr/ul/miage/files/FileServiceBean.java
@@ -1,7 +1,9 @@
-package fr.miage23.filestore.files;
+package fr.ul.miage.files;
 
-import fr.miage23.filestore.files.entity.Node;
-import fr.miage23.filestore.files.exceptions.*;
+import fr.ul.miage.files.entity.Node;
+import fr.ul.miage.files.exceptions.*;
+import jakarta.ws.rs.core.MediaType;
+import org.apache.tika.Tika;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -12,25 +14,24 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
 
-public class InMemoryFileServiceBean implements FileService {
+public class FileServiceBean implements FileService {
 
-    private static final Logger LOGGER = Logger.getLogger(InMemoryFileServiceBean.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(FileServiceBean.class.getName());
 
-    private static Map<String, Node> nodes;
-    private static Map<String, byte[]> contents;
+    private static Map<String, Node> nodes = new ConcurrentHashMap<>();
+    private static Map<String, byte[]> contents = new HashMap<>();
+    private static Tika tika = new Tika();
 
     private static final class InstanceHolder {
-        private static final FileService instance = new InMemoryFileServiceBean();
+        private static final FileService instance = new FileServiceBean();
     }
 
     public static FileService getInstance(){
         return InstanceHolder.instance;
     }
 
-    private InMemoryFileServiceBean() {
+    private FileServiceBean() {
         LOGGER.log(Level.INFO, "Instantiating file service bean");
-        contents = new HashMap<>();
-        nodes = new ConcurrentHashMap<>();
         Node root = new Node(Node.Type.TREE, "", ROOT_NODE_ID, "root");
         nodes.put(root.getId(), root);
     }
@@ -124,13 +125,19 @@ public class InMemoryFileServiceBean implements FileService {
         if (nodes.values().stream().filter(n -> n.getParent().equals(pid)).anyMatch(n -> n.getName().equals(name))) {
             throw new NodeAlreadyExistsException("A node with name: " + name + " already exists in tree with id: " + pid);
         }
+        String mimetype = MediaType.APPLICATION_OCTET_STREAM;
+        try {
+            mimetype = tika.detect(content, name);
+        } catch (IOException e) {
+            throw new ContentException("unable to read file content", e);
+        }
         String cid = UUID.randomUUID().toString();
         try {
             contents.put(cid, content.readAllBytes());
             Node node = new Node(Node.Type.BLOB, pid, UUID.randomUUID().toString(), name);
             node.setContent(cid);
             node.setSize(contents.get(cid).length);
-            node.setMimetype("application/octet-stream");
+            node.setMimetype(mimetype);
             nodes.put(node.getId(), node);
             pnode.setSize(pnode.getSize()+1);
             return node.getId();
diff --git a/src/main/java/fr/miage23/filestore/files/entity/Node.java b/src/main/java/fr/ul/miage/files/entity/Node.java
similarity index 97%
rename from src/main/java/fr/miage23/filestore/files/entity/Node.java
rename to src/main/java/fr/ul/miage/files/entity/Node.java
index d52979dba589cc5beb6ddd8b6843aab4e1809ceb..db2061d142f4a6b74710f34c5d36af2144b43d2c 100644
--- a/src/main/java/fr/miage23/filestore/files/entity/Node.java
+++ b/src/main/java/fr/ul/miage/files/entity/Node.java
@@ -1,11 +1,10 @@
-package fr.miage23.filestore.files.entity;
+package fr.ul.miage.files.entity;
 
-import fr.miage23.filestore.files.FileService;
+import fr.ul.miage.files.FileService;
 
 import java.io.Serializable;
 import java.util.Comparator;
 import java.util.Objects;
-import java.util.UUID;
 
 public class Node implements Comparable<Node>, Serializable {
 
diff --git a/src/main/java/fr/miage23/filestore/files/entity/TypeNode.java b/src/main/java/fr/ul/miage/files/entity/TypeNode.java
similarity index 51%
rename from src/main/java/fr/miage23/filestore/files/entity/TypeNode.java
rename to src/main/java/fr/ul/miage/files/entity/TypeNode.java
index 5f235677f04a28be9839fcfa7e7da269b9581dae..403ab6fae01b1c20360f745daa5eb1ef4841e50a 100644
--- a/src/main/java/fr/miage23/filestore/files/entity/TypeNode.java
+++ b/src/main/java/fr/ul/miage/files/entity/TypeNode.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.entity;
+package fr.ul.miage.files.entity;
 
 public enum TypeNode {
     TREE,
diff --git a/src/main/java/fr/miage23/filestore/files/exceptions/ContentException.java b/src/main/java/fr/ul/miage/files/exceptions/ContentException.java
similarity index 82%
rename from src/main/java/fr/miage23/filestore/files/exceptions/ContentException.java
rename to src/main/java/fr/ul/miage/files/exceptions/ContentException.java
index 3a4e0fa71cab5842c4f4b6067ea2ac75932d6d0d..351085622cd96611ae6bcc8a3de3d109694672dc 100644
--- a/src/main/java/fr/miage23/filestore/files/exceptions/ContentException.java
+++ b/src/main/java/fr/ul/miage/files/exceptions/ContentException.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.exceptions;
+package fr.ul.miage.files.exceptions;
 
 public class ContentException extends Exception {
 
diff --git a/src/main/java/fr/miage23/filestore/files/exceptions/NodeAlreadyExistsException.java b/src/main/java/fr/ul/miage/files/exceptions/NodeAlreadyExistsException.java
similarity index 76%
rename from src/main/java/fr/miage23/filestore/files/exceptions/NodeAlreadyExistsException.java
rename to src/main/java/fr/ul/miage/files/exceptions/NodeAlreadyExistsException.java
index 529f709719743737912904faf877613344109ae3..64c2c3e5c6d4a78e919f5e67ffa13f946237270e 100644
--- a/src/main/java/fr/miage23/filestore/files/exceptions/NodeAlreadyExistsException.java
+++ b/src/main/java/fr/ul/miage/files/exceptions/NodeAlreadyExistsException.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.exceptions;
+package fr.ul.miage.files.exceptions;
 
 public class NodeAlreadyExistsException extends Exception {
     public NodeAlreadyExistsException(String message) {
diff --git a/src/main/java/fr/miage23/filestore/files/exceptions/NodeNotEmptyException.java b/src/main/java/fr/ul/miage/files/exceptions/NodeNotEmptyException.java
similarity index 74%
rename from src/main/java/fr/miage23/filestore/files/exceptions/NodeNotEmptyException.java
rename to src/main/java/fr/ul/miage/files/exceptions/NodeNotEmptyException.java
index 1e97d12176e04ce4fcca342fae01e6aedaf2faab..ad71712fa1444c990bf31a4d02cbd0f81d410b36 100644
--- a/src/main/java/fr/miage23/filestore/files/exceptions/NodeNotEmptyException.java
+++ b/src/main/java/fr/ul/miage/files/exceptions/NodeNotEmptyException.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.exceptions;
+package fr.ul.miage.files.exceptions;
 
 public class NodeNotEmptyException extends Exception {
     public NodeNotEmptyException(String message) {
diff --git a/src/main/java/fr/miage23/filestore/files/exceptions/NodeNotFoundException.java b/src/main/java/fr/ul/miage/files/exceptions/NodeNotFoundException.java
similarity index 83%
rename from src/main/java/fr/miage23/filestore/files/exceptions/NodeNotFoundException.java
rename to src/main/java/fr/ul/miage/files/exceptions/NodeNotFoundException.java
index 0995a3a5fa74983711f6a3ceb38019fcee2d4043..9b0eae3a692773171281dde2ee067fa7580d0c87 100644
--- a/src/main/java/fr/miage23/filestore/files/exceptions/NodeNotFoundException.java
+++ b/src/main/java/fr/ul/miage/files/exceptions/NodeNotFoundException.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.exceptions;
+package fr.ul.miage.files.exceptions;
 
 public class NodeNotFoundException extends Exception {
     public NodeNotFoundException(String message) {
diff --git a/src/main/java/fr/miage23/filestore/files/exceptions/NodeTypeException.java b/src/main/java/fr/ul/miage/files/exceptions/NodeTypeException.java
similarity index 73%
rename from src/main/java/fr/miage23/filestore/files/exceptions/NodeTypeException.java
rename to src/main/java/fr/ul/miage/files/exceptions/NodeTypeException.java
index 3a845ded18dc5ea6aa3922b54f55cef6bd2dcec2..c3015096a3476d9cbc54a94f04a205d783573b70 100644
--- a/src/main/java/fr/miage23/filestore/files/exceptions/NodeTypeException.java
+++ b/src/main/java/fr/ul/miage/files/exceptions/NodeTypeException.java
@@ -1,4 +1,4 @@
-package fr.miage23.filestore.files.exceptions;
+package fr.ul.miage.files.exceptions;
 
 public class NodeTypeException extends Exception {
     public NodeTypeException(String message) {
diff --git a/src/main/java/fr/ul/miage/store/data/DataStore.java b/src/main/java/fr/ul/miage/store/data/DataStore.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce23bb9a208806017207d0192742f736886f1bc8
--- /dev/null
+++ b/src/main/java/fr/ul/miage/store/data/DataStore.java
@@ -0,0 +1,17 @@
+package fr.ul.miage.store.data;
+
+import java.io.InputStream;
+import fr.ul.miage.store.data.exception.*;
+
+public interface DataStore {
+    boolean exists(String key) throws DataStoreException;
+
+    String put(InputStream is) throws DataStoreException;
+
+    InputStream get(String key) throws DataStoreException, DataNotFoundException;
+
+    long size(String key) throws DataStoreException, DataNotFoundException;
+
+    void delete(String key) throws DataStoreException;
+
+}
diff --git a/src/main/java/fr/ul/miage/store/data/DataStoreBean.java b/src/main/java/fr/ul/miage/store/data/DataStoreBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..96a7f28855b78648c1ac242df50746ada8ca22bd
--- /dev/null
+++ b/src/main/java/fr/ul/miage/store/data/DataStoreBean.java
@@ -0,0 +1,98 @@
+package fr.ul.miage.store.data;
+
+import fr.ul.miage.config.FilestoreConfigBean;
+import fr.ul.miage.store.data.exception.*;
+import jakarta.annotation.PostConstruct;
+import jakarta.ejb.Singleton;
+import jakarta.ejb.Startup;
+import jakarta.inject.Inject;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.*;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@Startup
+@Singleton
+public class DataStoreBean implements DataStore {
+
+    private static final Logger LOGGER = Logger.getLogger(DataStore.class.getName());
+
+    public static final String DATA_STORE_HOME = "data";
+
+    @Inject
+    public FilestoreConfigBean config;
+
+    private Path base;
+
+    public DataStoreBean() {
+    }
+
+    @PostConstruct
+    public void init() {
+        this.base = Paths.get(config.getHome().toString(), DATA_STORE_HOME);
+        LOGGER.log(Level.FINEST, "Initializing service with base folder: " + base);
+        try {
+            Files.createDirectories(base);
+        } catch (Exception e) {
+            LOGGER.log(Level.SEVERE, "unable to initialize data store", e);
+        }
+    }
+
+    @Override
+    public boolean exists(String key) throws DataStoreException {
+        Path file = Paths.get(base.toString(), key);
+        return Files.exists(file);
+    }
+
+    @Override
+    public String put(InputStream is) throws DataStoreException {
+        String key = UUID.randomUUID().toString();
+        Path file = Paths.get(base.toString(), key);
+        if ( Files.exists(file) ) {
+            throw new DataStoreException("unable to create file, key already exists");
+        }
+        try {
+            Files.copy(is, file, StandardCopyOption.REPLACE_EXISTING);
+        } catch (IOException e) {
+            throw new DataStoreException("unexpected error during stream copy", e);
+        }
+        return key;
+    }
+
+    @Override
+    public InputStream get(String key) throws DataStoreException, DataNotFoundException {
+        Path file = Paths.get(base.toString(), key);
+        if ( !Files.exists(file) ) {
+            throw new DataNotFoundException("file not found in storage");
+        }
+        try {
+            return Files.newInputStream(file, StandardOpenOption.READ);
+        } catch (IOException e) {
+            throw new DataStoreException("unexpected error while opening stream", e);
+        }
+    }
+
+    //size
+    public long size(String key) throws DataStoreException, DataNotFoundException {
+        Path file = Paths.get(base.toString(), key);
+        if ( !Files.exists(file) ) {
+            throw new DataNotFoundException("file not found in storage");
+        }
+        try {
+            return Files.size(file);
+        } catch (IOException e) {
+            throw new DataStoreException("unexpected error while opening stream", e);
+        }
+    }
+
+
+    @Override
+    public void delete(String key) throws DataStoreException {
+        throw new DataStoreException("NOT IMPLEMETED");
+    }
+
+}
+
diff --git a/src/main/java/fr/ul/miage/store/data/exception/DataNotFoundException.java b/src/main/java/fr/ul/miage/store/data/exception/DataNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e78eecfa71c634303cea0320f06ec43b51f1c22
--- /dev/null
+++ b/src/main/java/fr/ul/miage/store/data/exception/DataNotFoundException.java
@@ -0,0 +1,6 @@
+package fr.ul.miage.store.data.exception;
+
+public class DataNotFoundException extends Exception {
+    public DataNotFoundException(String fileNotFoundInStorage) {
+    }
+}
diff --git a/src/main/java/fr/ul/miage/store/data/exception/DataStoreException.java b/src/main/java/fr/ul/miage/store/data/exception/DataStoreException.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f481787f846262943d5751a55d515af8de7354d
--- /dev/null
+++ b/src/main/java/fr/ul/miage/store/data/exception/DataStoreException.java
@@ -0,0 +1,11 @@
+package fr.ul.miage.store.data.exception;
+
+import java.io.IOException;
+
+public class DataStoreException extends Exception {
+    public DataStoreException(String s) {
+    }
+
+    public DataStoreException(String unexpectedErrorDuringStreamCopy, IOException e) {
+    }
+}
diff --git a/src/test/java/fr/ul/miage/config/TestFilestoreConfigBean.java b/src/test/java/fr/ul/miage/config/TestFilestoreConfigBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..1243a6fa7dcc89e12aca7ecd589595c0dd223cc5
--- /dev/null
+++ b/src/test/java/fr/ul/miage/config/TestFilestoreConfigBean.java
@@ -0,0 +1,68 @@
+package fr.ul.miage.config;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Alternative;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+@Alternative
+@ApplicationScoped
+public class TestFilestoreConfigBean implements  FilestoreConfig {
+
+    private static final Logger LOGGER = Logger.getLogger(TestFilestoreConfigBean.class.getName());
+
+    private Path home;
+    private String owner;
+    private InstanceConfig instance;
+
+    @PostConstruct
+    public void init() {
+        LOGGER.log(Level.INFO, "Initialising config");
+        home = Paths.get("/tmp", String.valueOf(System.currentTimeMillis()));
+        LOGGER.log(Level.INFO, "home set to: " + home);
+        owner = "test";
+        LOGGER.log(Level.INFO, "owner set to: " + owner);
+        instance = new InstanceConfig() {
+            @Override
+            public boolean https() {
+                return false;
+            }
+
+            @Override
+            public String host() {
+                return "localhost";
+            }
+
+            @Override
+            public int port() {
+                return 8080;
+            }
+
+            @Override
+            public String ctx() {
+                return "filestore";
+            }
+        };
+        LOGGER.log(Level.INFO, "instance set to: " + instance);
+    }
+
+    @Override
+    public InstanceConfig instance() {
+        return instance;
+    }
+
+    @Override
+    public Path home() {
+        return home;
+    }
+
+    @Override
+    public String owner() {
+        return owner;
+    }
+}
+
diff --git a/src/test/java/fr/ul/miage/data/DataStoreTest.java b/src/test/java/fr/ul/miage/data/DataStoreTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..987c76158ec8a8524e50791cbda3903dc8e81e58
--- /dev/null
+++ b/src/test/java/fr/ul/miage/data/DataStoreTest.java
@@ -0,0 +1,63 @@
+package fr.ul.miage.data;
+
+import fr.ul.miage.store.data.DataStore;
+import fr.ul.miage.store.data.exception.DataNotFoundException;
+import fr.ul.miage.store.data.exception.DataStoreException;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+import static org.junit.Assert.*;
+
+import org.apache.commons.io.IOUtils;
+
+@RunWith(Arquillian.class)
+public class DataStoreTest {
+
+    private static Logger LOGGER = Logger.getLogger(DataStoreTest.class.getName());
+    private DataStore store;
+
+    @Deployment
+    public static Archive createDeployment() throws Exception {
+        WebArchive archive = ShrinkWrap.create(WebArchive.class);
+        archive.addPackage("fr.ul.miage.store.data");
+        archive.addPackage("fr.ul.miage.store.data.exception");
+        archive.addPackage("fr.ul.miage.config");
+        archive.addAsResource("test-beans.xml", "META-INF/beans.xml");
+        File[] file = Maven.resolver().loadPomFromFile("pom.xml")
+                .importCompileAndRuntimeDependencies()
+                .resolve("commons-io:commons-io:2.11.0")
+                .withTransitivity().asFile();
+        archive.addAsLibraries(file);
+        return archive;
+    }
+
+    @Test
+    public void simpleCreateFileTest() throws DataStoreException, DataNotFoundException, IOException {
+        LOGGER.log(Level.INFO, "Starting Simple Create File Test");
+        String content = "This is a test";
+
+        ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes());
+        String KEY = store.put(inputStream);
+        LOGGER.log(Level.INFO, "File stored with key: " + KEY);
+        assertNotNull(KEY);
+        assertTrue(store.exists(KEY));
+        InputStream inputStream1 = store.get(KEY);
+        //assertEquals(14, store.size(KEY));
+        String retrieved = new String(IOUtils.toByteArray(inputStream1));
+        assertEquals(content, retrieved);
+    }
+
+}
diff --git a/src/test/resources/arquilian.xml b/src/test/resources/arquilian.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0556b50f215ed0bdc2fd4452d05122c77879c88c
--- /dev/null
+++ b/src/test/resources/arquilian.xml
@@ -0,0 +1,13 @@
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://jboss.org/schema/arquillian
+        http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+    <container qualifier="wildfly-managed" default="true">
+        <configuration>
+            <property name="jbossHome">C:\Users\LB-C\Bureau\Logiciels\wildfly-29.0.1.Final</property>
+            <property name="serverConfig">C:\Users\LB-C\Bureau\Logiciels\wildfly-29.0.1.Final\bin\standalone.xml</property>
+            <property name="allowConnectingToRunningServer">true</property>
+            <property name="javaVmArguments">-DfilestoreHome=~/.filestore-test</property>
+        </configuration>
+    </container>
+</arquillian>
\ No newline at end of file
diff --git a/src/test/resources/test-beans.xml b/src/test/resources/test-beans.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3e93f3a1225e27582b24d545caddf1fd3f074505
--- /dev/null
+++ b/src/test/resources/test-beans.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+    <alternatives>
+        <class>fr.ul.miage.config.TestFilestoreConfigBean</class>
+    </alternatives>
+</beans>