This commit is contained in:
		
							
								
								
									
										70
									
								
								modules/pathit-core/deployment/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								modules/pathit-core/deployment/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|   <artifactId>pathit-core-deployment</artifactId> | ||||
|   <name>Pathit Core - Deployment</name> | ||||
|   <parent> | ||||
|     <groupId>fr.codeanddata.pathit</groupId> | ||||
|     <artifactId>pathit-core-parent</artifactId> | ||||
|     <version>1.0-SNAPSHOT</version> | ||||
|     <relativePath>../pom.xml</relativePath> | ||||
|   </parent> | ||||
|  | ||||
|   <dependencies> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-arc-deployment</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-rest-deployment</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-rest-jackson-deployment</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-security-deployment</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-qute-deployment</artifactId> | ||||
|     </dependency> | ||||
|  | ||||
|     <dependency> | ||||
|       <groupId>fr.codeanddata.pathit</groupId> | ||||
|       <artifactId>pathit-core</artifactId> | ||||
|       <version>${project.version}</version> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-junit5-internal</artifactId> | ||||
|       <scope>test</scope> | ||||
|     </dependency> | ||||
|   </dependencies> | ||||
|  | ||||
|   <build> | ||||
|     <plugins> | ||||
|       <plugin> | ||||
|         <artifactId>maven-compiler-plugin</artifactId> | ||||
|         <executions> | ||||
|           <execution> | ||||
|             <id>default-compile</id> | ||||
|             <configuration> | ||||
|               <annotationProcessorPaths> | ||||
|                 <path> | ||||
|                   <groupId>io.quarkus</groupId> | ||||
|                   <artifactId>quarkus-extension-processor</artifactId> | ||||
|                   <version>${quarkus.version}</version> | ||||
|                 </path> | ||||
|               </annotationProcessorPaths> | ||||
|             </configuration> | ||||
|           </execution> | ||||
|         </executions> | ||||
|       </plugin> | ||||
|     </plugins> | ||||
|   </build> | ||||
| </project> | ||||
| @@ -0,0 +1,41 @@ | ||||
| package fr.codeanddata.pathit.core.deployment; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.mappers.PathMapMapper; | ||||
| import fr.codeanddata.pathit.core.mappers.PathMapMapperImpl; | ||||
| import fr.codeanddata.pathit.core.resources.AdminResource; | ||||
| import fr.codeanddata.pathit.core.resources.PathMapResource; | ||||
| import fr.codeanddata.pathit.core.services.PathMapService; | ||||
| import io.quarkus.arc.deployment.AdditionalBeanBuildItem; | ||||
| import io.quarkus.deployment.annotations.BuildProducer; | ||||
| import io.quarkus.deployment.annotations.BuildStep; | ||||
| import io.quarkus.deployment.builditem.FeatureBuildItem; | ||||
| import io.quarkus.deployment.builditem.IndexDependencyBuildItem; | ||||
|  | ||||
| class PathitCoreProcessor { | ||||
|  | ||||
|   private static final String FEATURE = "pathit-core"; | ||||
|  | ||||
|   @BuildStep | ||||
|   FeatureBuildItem feature() { | ||||
|     return new FeatureBuildItem(FEATURE); | ||||
|   } | ||||
|  | ||||
|   @BuildStep | ||||
|   IndexDependencyBuildItem index() { | ||||
|     return new IndexDependencyBuildItem("fr.codeanddata.pathit.core", FEATURE); | ||||
|   } | ||||
|  | ||||
|   @BuildStep | ||||
|   void addRestEndpoints(BuildProducer<AdditionalBeanBuildItem> additionalBeans) { | ||||
|     additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(AdminResource.class)); | ||||
|     additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(PathMapResource.class)); | ||||
|     additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(PathMapService.class)); | ||||
|   } | ||||
|  | ||||
|   @BuildStep | ||||
|   AdditionalBeanBuildItem indexMapper() { | ||||
|     return new AdditionalBeanBuildItem(PathMapMapperImpl.class); | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,23 @@ | ||||
| package fr.codeanddata.pathit.core.test; | ||||
|  | ||||
| import org.jboss.shrinkwrap.api.ShrinkWrap; | ||||
| import org.jboss.shrinkwrap.api.spec.JavaArchive; | ||||
| import org.junit.jupiter.api.Assertions; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.api.extension.RegisterExtension; | ||||
|  | ||||
| import io.quarkus.test.QuarkusDevModeTest; | ||||
|  | ||||
| public class PathitCoreDevModeTest { | ||||
|  | ||||
|     // Start hot reload (DevMode) test with your extension loaded | ||||
|     @RegisterExtension | ||||
|     static final QuarkusDevModeTest devModeTest = new QuarkusDevModeTest() | ||||
|             .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); | ||||
|  | ||||
|     @Test | ||||
|     public void writeYourOwnDevModeTest() { | ||||
|         // Write your dev mode tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-hot-reload for more information | ||||
|         Assertions.assertTrue(true, "Add dev mode assertions to " + getClass().getName()); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,22 @@ | ||||
| package fr.codeanddata.pathit.core.test; | ||||
|  | ||||
| import io.quarkus.test.QuarkusUnitTest; | ||||
| import org.jboss.shrinkwrap.api.ShrinkWrap; | ||||
| import org.jboss.shrinkwrap.api.spec.JavaArchive; | ||||
| import org.junit.jupiter.api.Assertions; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.api.extension.RegisterExtension; | ||||
|  | ||||
| public class PathitCoreTest { | ||||
|  | ||||
|   // Start unit test with your extension loaded | ||||
|   @RegisterExtension | ||||
|   static final QuarkusUnitTest unitTest = new QuarkusUnitTest() | ||||
|     .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); | ||||
|  | ||||
|   @Test | ||||
|   public void writeYourOwnUnitTest() { | ||||
|     // Write your unit tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-extensions for more information | ||||
|     Assertions.assertTrue(true, "Add some assertions to " + getClass().getName()); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										97
									
								
								modules/pathit-core/integration-tests/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								modules/pathit-core/integration-tests/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|     <parent> | ||||
|         <groupId>fr.codeanddata.pathit</groupId> | ||||
|         <artifactId>pathit-core-parent</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
|     <artifactId>pathit-core-integration-tests</artifactId> | ||||
|     <name>Pathit Core - Integration Tests</name> | ||||
|  | ||||
|     <properties> | ||||
|         <skipITs>true</skipITs> | ||||
|     </properties> | ||||
|  | ||||
|     <dependencies> | ||||
|         <dependency> | ||||
|             <groupId>io.quarkus</groupId> | ||||
|             <artifactId>quarkus-rest</artifactId> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>fr.codeanddata.pathit</groupId> | ||||
|             <artifactId>pathit-core</artifactId> | ||||
|             <version>${project.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>io.quarkus</groupId> | ||||
|             <artifactId>quarkus-junit5</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>io.rest-assured</groupId> | ||||
|             <artifactId>rest-assured</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|     <build> | ||||
|         <plugins> | ||||
|             <plugin> | ||||
|                 <groupId>io.quarkus</groupId> | ||||
|                 <artifactId>quarkus-maven-plugin</artifactId> | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <goals> | ||||
|                             <goal>build</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                 </executions> | ||||
|             </plugin> | ||||
|             <plugin> | ||||
|                 <artifactId>maven-failsafe-plugin</artifactId> | ||||
|                 <executions> | ||||
|                     <execution> | ||||
|                         <goals> | ||||
|                             <goal>integration-test</goal> | ||||
|                             <goal>verify</goal> | ||||
|                         </goals> | ||||
|                     </execution> | ||||
|                 </executions> | ||||
|                 <configuration> | ||||
|                     <systemPropertyVariables> | ||||
|                         <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path> | ||||
|                         <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> | ||||
|                         <maven.home>${maven.home}</maven.home> | ||||
|                     </systemPropertyVariables> | ||||
|                 </configuration> | ||||
|             </plugin> | ||||
|         </plugins> | ||||
|     </build> | ||||
|  | ||||
|     <profiles> | ||||
|         <profile> | ||||
|             <id>native-image</id> | ||||
|             <activation> | ||||
|                 <property> | ||||
|                     <name>native</name> | ||||
|                 </property> | ||||
|             </activation> | ||||
|             <build> | ||||
|                 <plugins> | ||||
|                     <plugin> | ||||
|                         <artifactId>maven-surefire-plugin</artifactId> | ||||
|                         <configuration> | ||||
|                             <skipTests>${native.surefire.skip}</skipTests> | ||||
|                         </configuration> | ||||
|                     </plugin> | ||||
|                 </plugins> | ||||
|             </build> | ||||
|             <properties> | ||||
|                 <skipITs>false</skipITs> | ||||
|                 <quarkus.native.enabled>true</quarkus.native.enabled> | ||||
|             </properties> | ||||
|         </profile> | ||||
|     </profiles> | ||||
| </project> | ||||
| @@ -0,0 +1,32 @@ | ||||
| /* | ||||
| * Licensed to the Apache Software Foundation (ASF) under one or more | ||||
| * contributor license agreements.  See the NOTICE file distributed with | ||||
| * this work for additional information regarding copyright ownership. | ||||
| * The ASF licenses this file to You under the Apache License, Version 2.0 | ||||
| * (the "License"); you may not use this file except in compliance with | ||||
| * the License.  You may obtain a copy of the License at | ||||
| * | ||||
| *      http://www.apache.org/licenses/LICENSE-2.0 | ||||
| * | ||||
| * Unless required by applicable law or agreed to in writing, software | ||||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | ||||
| */ | ||||
| package fr.codeanddata.pathit.core.it; | ||||
|  | ||||
| import jakarta.enterprise.context.ApplicationScoped; | ||||
| import jakarta.ws.rs.GET; | ||||
| import jakarta.ws.rs.Path; | ||||
|  | ||||
| @Path("/pathit-pathit") | ||||
| @ApplicationScoped | ||||
| public class PathitCoreResource { | ||||
|     // add some rest methods here | ||||
|  | ||||
|     @GET | ||||
|     public String hello() { | ||||
|         return "Hello pathit-pathit"; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,7 @@ | ||||
| package fr.codeanddata.pathit.core.it; | ||||
|  | ||||
| import io.quarkus.test.junit.QuarkusIntegrationTest; | ||||
|  | ||||
| @QuarkusIntegrationTest | ||||
| public class PathitCoreResourceIT extends PathitCoreResourceTest { | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package fr.codeanddata.pathit.core.it; | ||||
|  | ||||
| import static io.restassured.RestAssured.given; | ||||
| import static org.hamcrest.Matchers.is; | ||||
|  | ||||
| import org.junit.jupiter.api.Test; | ||||
|  | ||||
| import io.quarkus.test.junit.QuarkusTest; | ||||
|  | ||||
| @QuarkusTest | ||||
| public class PathitCoreResourceTest { | ||||
|  | ||||
|     @Test | ||||
|     public void testHelloEndpoint() { | ||||
|         given() | ||||
|                 .when().get("/pathit-pathit") | ||||
|                 .then() | ||||
|                 .statusCode(200) | ||||
|                 .body(is("Hello pathit-pathit")); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										61
									
								
								modules/pathit-core/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								modules/pathit-core/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
|   <artifactId>pathit-core-parent</artifactId> | ||||
|   <name>Pathit Core - Parent</name> | ||||
|   <packaging>pom</packaging> | ||||
|  | ||||
|   <parent> | ||||
|     <groupId>fr.codeanddata.pathit</groupId> | ||||
|     <artifactId>pathit-pom</artifactId> | ||||
|     <version>1.0-SNAPSHOT</version> | ||||
|     <relativePath>../../pom.xml</relativePath> | ||||
|   </parent> | ||||
|  | ||||
|   <modules> | ||||
|     <module>deployment</module> | ||||
|     <module>runtime</module> | ||||
|   </modules> | ||||
|  | ||||
|   <build> | ||||
|     <pluginManagement> | ||||
|       <plugins> | ||||
|         <plugin> | ||||
|           <groupId>io.quarkus</groupId> | ||||
|           <artifactId>quarkus-maven-plugin</artifactId> | ||||
|           <version>${quarkus.version}</version> | ||||
|         </plugin> | ||||
|         <plugin> | ||||
|           <artifactId>maven-surefire-plugin</artifactId> | ||||
|           <version>${surefire-plugin.version}</version> | ||||
|           <configuration> | ||||
|             <systemPropertyVariables> | ||||
|               <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> | ||||
|               <maven.home>${maven.home}</maven.home> | ||||
|               <maven.repo>${settings.localRepository}</maven.repo> | ||||
|             </systemPropertyVariables> | ||||
|           </configuration> | ||||
|         </plugin> | ||||
|         <plugin> | ||||
|           <artifactId>maven-failsafe-plugin</artifactId> | ||||
|           <version>${failsafe-plugin.version}</version> | ||||
|           <configuration> | ||||
|             <systemPropertyVariables> | ||||
|               <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> | ||||
|               <maven.home>${maven.home}</maven.home> | ||||
|               <maven.repo>${settings.localRepository}</maven.repo> | ||||
|             </systemPropertyVariables> | ||||
|           </configuration> | ||||
|         </plugin> | ||||
|         <plugin> | ||||
|           <artifactId>maven-compiler-plugin</artifactId> | ||||
|           <version>${compiler-plugin.version}</version> | ||||
|           <configuration> | ||||
|             <parameters>true</parameters> | ||||
|           </configuration> | ||||
|         </plugin> | ||||
|       </plugins> | ||||
|     </pluginManagement> | ||||
|   </build> | ||||
| </project> | ||||
							
								
								
									
										108
									
								
								modules/pathit-core/runtime/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								modules/pathit-core/runtime/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|   <modelVersion>4.0.0</modelVersion> | ||||
|  | ||||
|   <artifactId>pathit-core</artifactId> | ||||
|   <name>Pathit Core - Runtime</name> | ||||
|   <parent> | ||||
|     <groupId>fr.codeanddata.pathit</groupId> | ||||
|     <artifactId>pathit-core-parent</artifactId> | ||||
|     <version>1.0-SNAPSHOT</version> | ||||
|     <relativePath>../pom.xml</relativePath> | ||||
|   </parent> | ||||
|  | ||||
|   <dependencies> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-arc</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-rest</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-rest-jackson</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-security</artifactId> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-qute</artifactId> | ||||
|     </dependency> | ||||
|  | ||||
|  | ||||
|     <dependency> | ||||
|       <groupId>org.projectlombok</groupId> | ||||
|       <artifactId>lombok</artifactId> | ||||
|       <version>${lombok.version}</version> | ||||
|       <scope>provided</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>org.mapstruct</groupId> | ||||
|       <artifactId>mapstruct</artifactId> | ||||
|       <version>${mapstruct.version}</version> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.quarkus</groupId> | ||||
|       <artifactId>quarkus-junit5</artifactId> | ||||
|       <scope>test</scope> | ||||
|     </dependency> | ||||
|     <dependency> | ||||
|       <groupId>io.rest-assured</groupId> | ||||
|       <artifactId>rest-assured</artifactId> | ||||
|       <scope>test</scope> | ||||
|     </dependency> | ||||
|   </dependencies> | ||||
|  | ||||
|   <build> | ||||
|     <plugins> | ||||
|       <plugin> | ||||
|         <groupId>io.quarkus</groupId> | ||||
|         <artifactId>quarkus-extension-maven-plugin</artifactId> | ||||
|         <version>${quarkus.version}</version> | ||||
|         <executions> | ||||
|           <execution> | ||||
|             <phase>compile</phase> | ||||
|             <goals> | ||||
|               <goal>extension-descriptor</goal> | ||||
|             </goals> | ||||
|             <configuration> | ||||
|               <deployment>${project.groupId}:${project.artifactId}-deployment:${project.version}</deployment> | ||||
|             </configuration> | ||||
|           </execution> | ||||
|         </executions> | ||||
|       </plugin> | ||||
|       <plugin> | ||||
|         <artifactId>maven-compiler-plugin</artifactId> | ||||
|         <executions> | ||||
|           <execution> | ||||
|             <id>default-compile</id> | ||||
|             <configuration> | ||||
|               <annotationProcessorPaths> | ||||
|                 <path> | ||||
|                   <groupId>org.projectlombok</groupId> | ||||
|                   <artifactId>lombok</artifactId> | ||||
|                   <version>${lombok.version}</version> | ||||
|                 </path> | ||||
|                 <path> | ||||
|                   <groupId>org.mapstruct</groupId> | ||||
|                   <artifactId>mapstruct-processor</artifactId> | ||||
|                   <version>${mapstruct.version}</version> | ||||
|                 </path> | ||||
|                 <path> | ||||
|                   <groupId>io.quarkus</groupId> | ||||
|                   <artifactId>quarkus-extension-processor</artifactId> | ||||
|                   <version>${quarkus.version}</version> | ||||
|                 </path> | ||||
|               </annotationProcessorPaths> | ||||
|             </configuration> | ||||
|           </execution> | ||||
|         </executions> | ||||
|       </plugin> | ||||
|     </plugins> | ||||
|   </build> | ||||
| </project> | ||||
| @@ -0,0 +1,9 @@ | ||||
| package fr.codeanddata.pathit.core; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.models.PathMap; | ||||
| import io.smallrye.mutiny.Uni; | ||||
|  | ||||
| public interface PathMapRepository { | ||||
|   Uni<PathMap> create(PathMap pathMap); | ||||
|   Uni<PathMap> getByHash(String hash); | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package fr.codeanddata.pathit.core.mappers; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.models.PathMap; | ||||
| import fr.codeanddata.pathit.core.models.PushRequest; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.MappingConstants; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| @Mapper(componentModel = MappingConstants.ComponentModel.CDI) | ||||
| public abstract class PathMapMapper { | ||||
|   public  PathMap toModel(PushRequest pushRequest) { | ||||
|     return PathMap.builder() | ||||
|       .hash(pushRequest.getHash()) | ||||
|       .destination(pushRequest.getDestination()) | ||||
|       .creationDate(LocalDateTime.now()) | ||||
|       .build(); | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,27 @@ | ||||
| package fr.codeanddata.pathit.core.models; | ||||
|  | ||||
| import lombok.*; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| @Getter | ||||
| @Setter | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class PathMap { | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   String hash; | ||||
|  | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   String destination; | ||||
|  | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   LocalDateTime creationDate; | ||||
| } | ||||
| @@ -0,0 +1,21 @@ | ||||
| package fr.codeanddata.pathit.core.models; | ||||
|  | ||||
|  | ||||
| import lombok.*; | ||||
|  | ||||
| @Getter | ||||
| @Setter | ||||
| @Builder | ||||
| @AllArgsConstructor | ||||
| @NoArgsConstructor | ||||
| public class PushRequest { | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   String hash; | ||||
|  | ||||
|   /** | ||||
|    * | ||||
|    */ | ||||
|   String destination; | ||||
| } | ||||
| @@ -0,0 +1,28 @@ | ||||
| package fr.codeanddata.pathit.core.resources; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.models.PathMap; | ||||
| import fr.codeanddata.pathit.core.models.PushRequest; | ||||
| import fr.codeanddata.pathit.core.services.PathMapService; | ||||
| import io.smallrye.mutiny.Uni; | ||||
| import jakarta.annotation.security.RolesAllowed; | ||||
| import jakarta.inject.Inject; | ||||
| import jakarta.ws.rs.Consumes; | ||||
| import jakarta.ws.rs.POST; | ||||
| import jakarta.ws.rs.Path; | ||||
| import jakarta.ws.rs.Produces; | ||||
| import jakarta.ws.rs.core.MediaType; | ||||
|  | ||||
| @Path("/admin/api/pathmap") | ||||
| public class AdminResource { | ||||
|  | ||||
|   @Inject | ||||
|   PathMapService pathMapService; | ||||
|  | ||||
|   @POST | ||||
|   @Consumes(MediaType.APPLICATION_JSON) | ||||
|   @Produces(MediaType.APPLICATION_JSON) | ||||
|   @RolesAllowed("pathit") | ||||
|   public Uni<PathMap> push(PushRequest pushRequest) { | ||||
|     return pathMapService.push(pushRequest); | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,40 @@ | ||||
| package fr.codeanddata.pathit.core.resources; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.services.PathMapService; | ||||
| import io.quarkus.qute.Template; | ||||
| import io.smallrye.mutiny.Uni; | ||||
| import jakarta.annotation.security.PermitAll; | ||||
| import jakarta.inject.Inject; | ||||
| import jakarta.ws.rs.GET; | ||||
| import jakarta.ws.rs.Path; | ||||
| import jakarta.ws.rs.Produces; | ||||
| import jakarta.ws.rs.core.MediaType; | ||||
| import jakarta.ws.rs.core.Response; | ||||
| import org.jboss.resteasy.reactive.RestPath; | ||||
|  | ||||
| @Path("/") | ||||
| public class PathMapResource { | ||||
|  | ||||
|   @Inject | ||||
|   PathMapService pathMapService; | ||||
|  | ||||
|   @Inject | ||||
|   Template redirect; | ||||
|  | ||||
|   @GET | ||||
|   @Path("{hash}") | ||||
|   @Produces(MediaType.TEXT_HTML) | ||||
|   @PermitAll | ||||
|   public Uni<Response> mapPath(@RestPath String hash) { | ||||
|     return pathMapService.getByHash(hash) | ||||
|       .map(pathMap -> Response.status(Response.Status.FOUND) | ||||
|         .header("Location", pathMap.getDestination()) | ||||
|         .entity(redirect.data("location", pathMap.getDestination()).render()) | ||||
|         .build()) | ||||
|  | ||||
|       .onFailure().recoverWithItem(e -> Response | ||||
|         .status(Response.Status.SERVICE_UNAVAILABLE) | ||||
|         .entity(redirect.data("location", hash).render()) | ||||
|         .build()); | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,26 @@ | ||||
| package fr.codeanddata.pathit.core.services; | ||||
|  | ||||
| import fr.codeanddata.pathit.core.PathMapRepository; | ||||
| import fr.codeanddata.pathit.core.mappers.PathMapMapper; | ||||
| import fr.codeanddata.pathit.core.models.PathMap; | ||||
| import fr.codeanddata.pathit.core.models.PushRequest; | ||||
| import io.smallrye.mutiny.Uni; | ||||
| import jakarta.enterprise.context.ApplicationScoped; | ||||
| import jakarta.inject.Inject; | ||||
|  | ||||
| @ApplicationScoped | ||||
| public class PathMapService { | ||||
|   @Inject | ||||
|   PathMapRepository pathMapRepository; | ||||
|  | ||||
|   @Inject | ||||
|   PathMapMapper mapper; | ||||
|  | ||||
|   public Uni<PathMap> push(PushRequest pushRequest) { | ||||
|     return pathMapRepository.create(mapper.toModel(pushRequest)); | ||||
|   } | ||||
|  | ||||
|   public Uni<PathMap> getByHash(String hash) { | ||||
|     return pathMapRepository.getByHash(hash); | ||||
|   } | ||||
| } | ||||
| @@ -0,0 +1,9 @@ | ||||
| name: Pathit Core | ||||
| #description: Do something useful. | ||||
| metadata: | ||||
| #  keywords: | ||||
| #    - pathit-pathit | ||||
| #  guide: ... # To create and publish this guide, see https://github.com/quarkiverse/quarkiverse/wiki#documenting-your-extension | ||||
| #  categories: | ||||
| #    - "miscellaneous" | ||||
| #  status: "preview" | ||||
| @@ -0,0 +1 @@ | ||||
| quarkus.native.resources.includes=src/main/resources/templates/** | ||||
| @@ -0,0 +1,9 @@ | ||||
| <html lang="en"> | ||||
| <head> | ||||
|   <title>{location}</title> | ||||
|   <meta http-equiv="refresh" content="5;url={location}"/> | ||||
| </head> | ||||
| <body> | ||||
|   <p>You will be redirect soon. Please wait.</p> | ||||
| </body> | ||||
| </html> | ||||
		Reference in New Issue
	
	Block a user
	 Guillaume Dugas
					Guillaume Dugas