diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 549e00a..0000000 --- a/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/pom.xml b/pom.xml index 287f17b..014a09e 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,10 @@ 21 + + org.springframework.boot + spring-boot-starter-validation + org.springframework.boot spring-boot-starter-actuator diff --git a/src/main/java/com/stktrk/app/AppApplication.java b/src/main/java/com/stktrk/app/AppApplication.java index a30c64b..3265a3e 100644 --- a/src/main/java/com/stktrk/app/AppApplication.java +++ b/src/main/java/com/stktrk/app/AppApplication.java @@ -1,63 +1,18 @@ package com.stktrk.app; -import com.arcadedb.gremlin.ArcadeGraph; - -import com.github.javafaker.Faker; -import com.stktrk.app.configuration.GraphDbConfig; -import com.stktrk.app.db.ConnectionPool; -import org.apache.tinkerpop.gremlin.structure.Vertex; +import jakarta.annotation.Nullable; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Comparator; -import java.util.List; -import java.util.Random; -import java.util.StringJoiner; // https://stackoverflow.com/questions/51221777/failed-to-configure-a-datasource-url-attribute-is-not-specified-and-no-embedd @SpringBootApplication(exclude = {FlywayAutoConfiguration.class}) -@RestController + public class AppApplication extends SpringBootServletInitializer { - public static void main(String[] args) { + public static void main(@Nullable String[] args) { SpringApplication.run(AppApplication.class, args); } -// klkljgh - @GetMapping("/hello") - public String sayHello(@RequestParam(value = "myName", defaultValue = "World") String name) { - - - List x = List.of(); - ArcadeGraph g = ConnectionPool.getGraph(); - x = g.traversal().V().toList(); - Vertex target = !x.isEmpty() ? x.get(new Random().nextInt(x.size())) : null; - Faker faker = new Faker(); - Vertex res = g.traversal().addV("Profile").property("name", faker.name().firstName()).property("lastName", faker.name().lastName()) - .next(); - if (target != null) { - g.traversal().V(res.id()).addE("friend").to(target).iterate(); - } - g.close(); - - x.add(res); - x.sort(Comparator.comparing(a -> a.id().toString())); - StringJoiner sj = new StringJoiner("
\n"); - x.forEach(v -> sj.add(v.id().toString() + " - " + (String) v.property("name").value() + " " + (String) v.property("lastName").value())); - return "Hello, " + name + "! Added " + res.property("name").value() + ". There are " + x.size() + " vertices.
\n" + sj; - } - - @GetMapping("/delete") - public String delete() { - ArcadeGraph g = ConnectionPool.getGraph(); - g.traversal().V().hasLabel("Profile").drop().iterate(); - g.close(); - return "Done."; - - } } diff --git a/src/main/java/com/stktrk/app/application/profile/ProfileController.java b/src/main/java/com/stktrk/app/application/profile/ProfileController.java new file mode 100644 index 0000000..907215a --- /dev/null +++ b/src/main/java/com/stktrk/app/application/profile/ProfileController.java @@ -0,0 +1,74 @@ +package com.stktrk.app.application.profile; + +import com.stktrk.app.domain.profile.ProfileService; +import com.stktrk.app.domain.profile.types.Profile; +import jakarta.annotation.Nonnull; +import jakarta.validation.Valid; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.*; + +import java.security.InvalidKeyException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("profile") +@AllArgsConstructor(access = AccessLevel.PROTECTED) +public class ProfileController { + + @Autowired + @Nonnull + private final ProfileService profileService; + + + // TODO figure out how to handle the exception. + @Nonnull + @GetMapping("/") + public List findAll() { + return profileService.findAll(); + } + + @PostMapping ("/") + public void addProfile (@Nonnull @Valid @RequestBody Profile profile){ + profileService.addProfile(profile); + } + + + @GetMapping("/_delete") + @Nonnull + public ResponseEntity delete() { + profileService.deleteAll (); + return ResponseEntity.status(HttpStatus.OK) + .body("Deleted all Profiles"); + } + + @GetMapping ("/_fake") + @Nonnull + public ResponseEntity _fake() { + profileService.createFakeProfile(); + return ResponseEntity.status(HttpStatus.OK) + .body("Created Profile"); + } + + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(MethodArgumentNotValidException.class) + @Nonnull + public Map handleValidationExceptions( + @Nonnull MethodArgumentNotValidException ex) { + Map errors = new HashMap<>(); + ex.getBindingResult().getAllErrors().forEach((error) -> { + String fieldName = ((FieldError) error).getField(); + String errorMessage = error.getDefaultMessage(); + errors.put(fieldName, errorMessage); + }); + return errors; + } +} diff --git a/src/main/java/com/stktrk/app/domain/profile/ProfileRepository.java b/src/main/java/com/stktrk/app/domain/profile/ProfileRepository.java new file mode 100644 index 0000000..16cd786 --- /dev/null +++ b/src/main/java/com/stktrk/app/domain/profile/ProfileRepository.java @@ -0,0 +1,17 @@ +package com.stktrk.app.domain.profile; + +import com.stktrk.app.domain.profile.types.Profile; +import jakarta.annotation.Nonnull; + +import java.util.List; + +public interface ProfileRepository { + @Nonnull + List findAll(); + + void addProfile(@Nonnull Profile profile); + + void createFakeProfile(); + + void deleteAll(); +} diff --git a/src/main/java/com/stktrk/app/domain/profile/ProfileService.java b/src/main/java/com/stktrk/app/domain/profile/ProfileService.java new file mode 100644 index 0000000..23b9f26 --- /dev/null +++ b/src/main/java/com/stktrk/app/domain/profile/ProfileService.java @@ -0,0 +1,31 @@ +package com.stktrk.app.domain.profile; + +import com.stktrk.app.domain.profile.types.Profile; +import jakarta.annotation.Nonnull; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@AllArgsConstructor +public class ProfileService { + @Nonnull private final ProfileRepository profileRepository; + + @Nonnull + public List findAll() { + return profileRepository.findAll (); + } + + public void addProfile (@Nonnull Profile profile) { + profileRepository.addProfile (profile); + } + + public void createFakeProfile() { + profileRepository.createFakeProfile(); + } + + public void deleteAll() { + profileRepository.deleteAll(); + } +} diff --git a/src/main/java/com/stktrk/app/domain/profile/types/Profile.java b/src/main/java/com/stktrk/app/domain/profile/types/Profile.java new file mode 100644 index 0000000..dec3485 --- /dev/null +++ b/src/main/java/com/stktrk/app/domain/profile/types/Profile.java @@ -0,0 +1,20 @@ +package com.stktrk.app.domain.profile.types; + + +import jakarta.annotation.Nullable; +import jakarta.validation.constraints.NotEmpty; +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class Profile { + + @Nullable + private String id; + @NotEmpty(message = "Name is mandatory") + private String name; + @NotEmpty(message = "Last name is mandatory") + private String lastName; + +} diff --git a/src/main/java/com/stktrk/app/configuration/GraphDbConfig.java b/src/main/java/com/stktrk/app/integration/configuration/types/GraphDbConfig.java similarity index 51% rename from src/main/java/com/stktrk/app/configuration/GraphDbConfig.java rename to src/main/java/com/stktrk/app/integration/configuration/types/GraphDbConfig.java index a9b77f6..612938c 100644 --- a/src/main/java/com/stktrk/app/configuration/GraphDbConfig.java +++ b/src/main/java/com/stktrk/app/integration/configuration/types/GraphDbConfig.java @@ -1,7 +1,6 @@ -package com.stktrk.app.configuration; +package com.stktrk.app.integration.configuration.types; - -import lombok.Builder; +import jakarta.annotation.Nonnull; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -13,11 +12,15 @@ import org.springframework.stereotype.Component; @ConfigurationProperties(prefix = "graph") public class GraphDbConfig { - String host; - int httpPort; - int postgresPort; - String graphName; - String user; - String password; + @Nonnull + String host; + int httpPort; + int postgresPort; + @Nonnull + String graphName; + @Nonnull + String user; + @Nonnull + String password; } diff --git a/src/main/java/com/stktrk/app/db/ConnectionPool.java b/src/main/java/com/stktrk/app/integration/flyway/ConnectionPool.java similarity index 51% rename from src/main/java/com/stktrk/app/db/ConnectionPool.java rename to src/main/java/com/stktrk/app/integration/flyway/ConnectionPool.java index d73f1fa..86c72e7 100644 --- a/src/main/java/com/stktrk/app/db/ConnectionPool.java +++ b/src/main/java/com/stktrk/app/integration/flyway/ConnectionPool.java @@ -1,9 +1,10 @@ -package com.stktrk.app.db; +package com.stktrk.app.integration.flyway; import com.arcadedb.gremlin.ArcadeGraph; import com.arcadedb.gremlin.ArcadeGraphFactory; -import com.stktrk.app.configuration.GraphDbConfig; -import org.apache.commons.configuration2.Configuration; +import com.stktrk.app.integration.configuration.types.GraphDbConfig; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -11,21 +12,23 @@ import javax.annotation.PostConstruct; @Component public class ConnectionPool { - static ArcadeGraphFactory pool; + @Nullable + static ArcadeGraphFactory pool; @Autowired + @Nullable GraphDbConfig graphDbConfig; @PostConstruct - void init () { - try { - pool = ArcadeGraphFactory.withRemote(graphDbConfig.getHost(), graphDbConfig.getHttpPort(), graphDbConfig.getGraphName(), graphDbConfig.getUser(), graphDbConfig.getPassword()); - - } catch (Exception e) { - throw new RuntimeException(e); - } + void init() { + pool = ArcadeGraphFactory.withRemote(graphDbConfig.getHost(), + graphDbConfig.getHttpPort(), + graphDbConfig.getGraphName(), + graphDbConfig.getUser(), + graphDbConfig.getPassword()); } + @Nonnull public static ArcadeGraph getGraph() { return pool.get(); } diff --git a/src/main/java/com/stktrk/app/db/FlywayConfig.java b/src/main/java/com/stktrk/app/integration/flyway/FlywayConfig.java similarity index 89% rename from src/main/java/com/stktrk/app/db/FlywayConfig.java rename to src/main/java/com/stktrk/app/integration/flyway/FlywayConfig.java index 645f39a..e578207 100644 --- a/src/main/java/com/stktrk/app/db/FlywayConfig.java +++ b/src/main/java/com/stktrk/app/integration/flyway/FlywayConfig.java @@ -1,5 +1,6 @@ -package com.stktrk.app.db; +package com.stktrk.app.integration.flyway; +import jakarta.annotation.Nullable; import jakarta.annotation.PostConstruct; import org.flywaydb.core.Flyway; import org.flywaydb.core.api.migration.JavaMigration; @@ -13,13 +14,17 @@ import java.sql.SQLException; @Configuration public class FlywayConfig { + // TODO move to properties // Custom migration history table name + @Nullable private static final String SCHEMA_HISTORY_TABLE = "flyway_schema_history"; @Autowired + @Nullable private DataSource dataSource; @Autowired + @Nullable private ApplicationContext applicationContext; @PostConstruct @@ -35,7 +40,7 @@ public class FlywayConfig { Flyway flyway = Flyway.configure() .dataSource(dataSource) // No need to configure flyway JDBC URL by using the original DataSource .defaultSchema(dataSource.getConnection().getSchema()) - .locations("db/migration") // Default migration script path + .locations("integration/flyway/migration") // Default migration script path .table(SCHEMA_HISTORY_TABLE) // Default migration history table is `flyway_schema_history` .baselineOnMigrate(true) // Default false, must be set to true for initial migration on existing databases .baselineVersion("0") // Default "1" diff --git a/src/main/java/com/stktrk/app/db/MigrationWrapper.java b/src/main/java/com/stktrk/app/integration/flyway/MigrationWrapper.java similarity index 90% rename from src/main/java/com/stktrk/app/db/MigrationWrapper.java rename to src/main/java/com/stktrk/app/integration/flyway/MigrationWrapper.java index 1d0ac2c..702badc 100644 --- a/src/main/java/com/stktrk/app/db/MigrationWrapper.java +++ b/src/main/java/com/stktrk/app/integration/flyway/MigrationWrapper.java @@ -1,6 +1,6 @@ -package com.stktrk.app.db; +package com.stktrk.app.integration.flyway; -import com.stktrk.app.configuration.GraphDbConfig; +import com.stktrk.app.integration.configuration.types.GraphDbConfig; import jakarta.annotation.Nonnull; import java.sql.Connection; diff --git a/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java b/src/main/java/com/stktrk/app/integration/flyway/migrations/V1__CreateTest.java similarity index 52% rename from src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java rename to src/main/java/com/stktrk/app/integration/flyway/migrations/V1__CreateTest.java index d27660a..213e0cf 100644 --- a/src/main/java/com/stktrk/app/db/migrations/V1__CreateTest.java +++ b/src/main/java/com/stktrk/app/integration/flyway/migrations/V1__CreateTest.java @@ -1,20 +1,24 @@ -package com.stktrk.app.db.migrations; +package com.stktrk.app.integration.flyway.migrations; -import com.stktrk.app.configuration.GraphDbConfig; -import com.stktrk.app.db.MigrationWrapper; -import lombok.Data; +import com.stktrk.app.integration.configuration.types.GraphDbConfig; +import com.stktrk.app.integration.flyway.MigrationWrapper; +import jakarta.annotation.Nonnull; +import lombok.EqualsAndHashCode; +import lombok.Value; import org.flywaydb.core.api.migration.BaseJavaMigration; import org.flywaydb.core.api.migration.Context; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +@EqualsAndHashCode(callSuper = true) @Component -@Data +@Value public class V1__CreateTest extends BaseJavaMigration implements MigrationWrapper { @Autowired + @Nonnull GraphDbConfig graphDbConfig; - public void migrate(Context context) throws Exception { + public void migrate(@Nonnull Context context) throws Exception { this.executeQuery(graphDbConfig,"CREATE VERTEX TYPE test"); } diff --git a/src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java b/src/main/java/com/stktrk/app/integration/flyway/migrations/V2__CreateUser.java similarity index 52% rename from src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java rename to src/main/java/com/stktrk/app/integration/flyway/migrations/V2__CreateUser.java index b9bc34b..23b034b 100644 --- a/src/main/java/com/stktrk/app/db/migrations/V2__CreateUser.java +++ b/src/main/java/com/stktrk/app/integration/flyway/migrations/V2__CreateUser.java @@ -1,20 +1,24 @@ -package com.stktrk.app.db.migrations; +package com.stktrk.app.integration.flyway.migrations; -import com.stktrk.app.configuration.GraphDbConfig; -import com.stktrk.app.db.MigrationWrapper; -import lombok.Data; +import com.stktrk.app.integration.configuration.types.GraphDbConfig; +import com.stktrk.app.integration.flyway.MigrationWrapper; +import jakarta.annotation.Nonnull; +import lombok.EqualsAndHashCode; +import lombok.Value; import org.flywaydb.core.api.migration.BaseJavaMigration; import org.flywaydb.core.api.migration.Context; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +@EqualsAndHashCode(callSuper = true) @Component -@Data +@Value public class V2__CreateUser extends BaseJavaMigration implements MigrationWrapper { @Autowired + @Nonnull GraphDbConfig graphDbConfig; - public void migrate(Context context) throws Exception { + public void migrate(@Nonnull Context context) throws Exception { this.executeQuery(graphDbConfig,"CREATE VERTEX TYPE user"); } diff --git a/src/main/java/com/stktrk/app/integration/flyway/migrations/V3__CreateProfile.java b/src/main/java/com/stktrk/app/integration/flyway/migrations/V3__CreateProfile.java new file mode 100644 index 0000000..a0d2a6f --- /dev/null +++ b/src/main/java/com/stktrk/app/integration/flyway/migrations/V3__CreateProfile.java @@ -0,0 +1,24 @@ +package com.stktrk.app.integration.flyway.migrations; + +import com.stktrk.app.integration.configuration.types.GraphDbConfig; +import com.stktrk.app.integration.flyway.MigrationWrapper; +import jakarta.annotation.Nonnull; +import lombok.EqualsAndHashCode; +import lombok.Value; +import org.flywaydb.core.api.migration.BaseJavaMigration; +import org.flywaydb.core.api.migration.Context; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@EqualsAndHashCode(callSuper = true) +@Component +@Value +public class V3__CreateProfile extends BaseJavaMigration implements MigrationWrapper { + @Nonnull + @Autowired + GraphDbConfig graphDbConfig; + + public void migrate(@Nonnull Context context) throws Exception { + this.executeQuery(graphDbConfig,"CREATE VERTEX TYPE Profile IF NOT EXISTS; CREATE PROPERTY Profile.name STRING (MANDATORY true); CREATE PROPERTY Profile.lastName STRING (MANDATORY true, notnull true);"); + } +} diff --git a/src/main/java/com/stktrk/app/integration/profile/ProfileRepositoryImpl.java b/src/main/java/com/stktrk/app/integration/profile/ProfileRepositoryImpl.java new file mode 100644 index 0000000..508a93a --- /dev/null +++ b/src/main/java/com/stktrk/app/integration/profile/ProfileRepositoryImpl.java @@ -0,0 +1,70 @@ +package com.stktrk.app.integration.profile; + +import com.arcadedb.gremlin.ArcadeGraph; +import com.github.javafaker.Faker; +import com.stktrk.app.integration.flyway.ConnectionPool; +import com.stktrk.app.domain.profile.ProfileRepository; +import com.stktrk.app.domain.profile.types.Profile; +import com.stktrk.app.utils.EncryptId; +import jakarta.annotation.Nonnull; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Random; + +@Repository +public class ProfileRepositoryImpl implements ProfileRepository { + @Nonnull + @Override + public List findAll() { + ArcadeGraph g = ConnectionPool.getGraph(); + List profiles = g.traversal().V().hasLabel("Profile").toList(); + g.close(); + + return profiles.stream() + .map(this::buildProfile) + .toList(); + } + + @Override + public void addProfile(@Nonnull Profile profile) { + ArcadeGraph g = ConnectionPool.getGraph(); + Vertex profiles = g.traversal() + .addV("Profile") + .property("name", profile.getName()) + .property("lastName", profile.getLastName()) + .next(); + g.close(); + } + + @Override + public void createFakeProfile() { + Faker faker = new Faker(); + ArcadeGraph g = ConnectionPool.getGraph(); + List vertices = g.traversal().V().hasLabel("Profile").toList(); + Vertex target = vertices.isEmpty() ? null : vertices.get(new Random().nextInt(vertices.size())); + + Vertex res = g.traversal().addV("Profile").property("name", faker.name().firstName()).property("lastName", faker.name().lastName()) + .next(); + if (target != null) { + g.traversal().V(res.id()).addE("friend").to(target).iterate(); + } + g.close(); + } + + @Override + public void deleteAll () { + ArcadeGraph g = ConnectionPool.getGraph(); + g.traversal().V().hasLabel("Profile").drop().iterate(); + } + @Nonnull + private Profile buildProfile (@Nonnull Vertex v) { + return Profile.builder() + .name((String) v.property("name").value()) + .lastName((String) v.property("lastName").value()) + .id(EncryptId.encrypt ((String)v.id())) + .build(); + } + +} diff --git a/src/main/java/com/stktrk/app/utils/EncryptId.java b/src/main/java/com/stktrk/app/utils/EncryptId.java new file mode 100644 index 0000000..b0e9746 --- /dev/null +++ b/src/main/java/com/stktrk/app/utils/EncryptId.java @@ -0,0 +1,44 @@ +package com.stktrk.app.utils; + +import com.arcadedb.database.RID; +import jakarta.annotation.Nonnull; +import jakarta.validation.constraints.NotEmpty; +import org.hashids.Hashids; + +import java.security.InvalidKeyException; + +public class EncryptId { + + // TODO move salt into properties + @Nonnull + private static final String SALT = "yG8kWVG0kei4wqwXGgt99AXxJWD7K2fnK4xv3BDR0M0AHchvFFCjFJK4VH1nLvm1"; + + @Nonnull + public static String encrypt(@Nonnull RID rid) { + return new Hashids(SALT).encode(rid.getBucketId(), rid.getPosition()); + } + + // TODO illegal argument exception thrown from RID - if we only allow this to come from the DB, we should be good. + @Nonnull + public static String encrypt(@NotEmpty String rid) { + RID obj = new RID(rid); + return new Hashids(SALT).encode(obj.getBucketId(), obj.getPosition()); + + } + + @Nonnull + public static RID decrypt(@NotEmpty String hash) throws InvalidKeyException { + long[] res = new Hashids(SALT).decode(hash); + if (res == null || res.length != 2 ) { + throw new InvalidKeyException("invalid id"); + } + return new RID((int) res[0], res[1]); + } + + @Nonnull + private Boolean isValidRid (String rid) { + return rid.matches("#\\d+\\.\\d+"); + } + + +} diff --git a/src/main/resources/application-rasmus.properties b/src/main/resources/application-rasmus.properties index e714dbb..4a5d075 100644 --- a/src/main/resources/application-rasmus.properties +++ b/src/main/resources/application-rasmus.properties @@ -10,16 +10,16 @@ springdoc.swagger-ui.path=/swagger-ui.html spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url= jdbc:postgresql://localhost:7654/flyway_db +spring.datasource.url= jdbc:postgresql://192.168.178.50:7654/flyway_db spring.datasource.username=flyway_user -spring.datasource.password=stdUNmu7KTUQV6KGMKjzHIiwQ2gbipArvg02 +spring.datasource.password=7e7v55UcYGrY0e3UPYI0qtyMA4YJ1ZkTEaoyZ252GluFkiEMHVT9U5ULS7Rg2rGi spring.datasource.defaultSchema=flyway_db spring.datasource.hikari.schema=flyway_db graph.user=root graph.password=playwithdata -graph.connection=jdbc:postgresql://192.168.178.29:5432/graph +graph.connection=jdbc:postgresql://192.168.178.50:5432/graph graph.http-port:2480 graph.postgres-port:5432 -graph.host=192.168.178.29 +graph.host=192.168.178.50 graph.graph-name=graph \ No newline at end of file diff --git a/src/test/java/com/stktrk/app/TestAppApplication.java b/src/test/java/com/stktrk/app/TestAppApplication.java index 75dcf3f..b263882 100644 --- a/src/test/java/com/stktrk/app/TestAppApplication.java +++ b/src/test/java/com/stktrk/app/TestAppApplication.java @@ -1,10 +1,11 @@ package com.stktrk.app; +import jakarta.annotation.Nonnull; import org.springframework.boot.SpringApplication; public class TestAppApplication { - public static void main(String[] args) { + public static void main(@Nonnull String[] args) { SpringApplication.from(AppApplication::main).with(TestcontainersConfiguration.class).run(args); } diff --git a/src/test/java/com/stktrk/app/TestcontainersConfiguration.java b/src/test/java/com/stktrk/app/TestcontainersConfiguration.java index 27a7ef5..4248f99 100644 --- a/src/test/java/com/stktrk/app/TestcontainersConfiguration.java +++ b/src/test/java/com/stktrk/app/TestcontainersConfiguration.java @@ -1,5 +1,6 @@ package com.stktrk.app; +import jakarta.annotation.Nonnull; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; @@ -11,6 +12,7 @@ class TestcontainersConfiguration { @Bean @ServiceConnection + @Nonnull RabbitMQContainer rabbitContainer() { return new RabbitMQContainer(DockerImageName.parse("rabbitmq:latest")); } diff --git a/src/test/java/com/stktrk/app/utils/EncryptIdTest.java b/src/test/java/com/stktrk/app/utils/EncryptIdTest.java new file mode 100644 index 0000000..190e4a1 --- /dev/null +++ b/src/test/java/com/stktrk/app/utils/EncryptIdTest.java @@ -0,0 +1,22 @@ +package com.stktrk.app.utils; + +import com.arcadedb.database.RID; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.security.InvalidKeyException; + +class EncryptIdTest { + + + @Test + void encrypt() { + Assertions.assertEquals("nOua", EncryptId.encrypt(new RID(1,2L))); + + } + + @Test + void decrypt() throws InvalidKeyException { + Assertions.assertEquals(new RID(1,2L), EncryptId.decrypt("nOua")); + } +} \ No newline at end of file