From 03459fbdc85d5ccac9ff54f167fcbbbb3db2ea67 Mon Sep 17 00:00:00 2001 From: vivek-gofynd Date: Tue, 11 Mar 2025 00:25:13 +0530 Subject: [PATCH] Integrate multilevel storage for storing extension access tokens --- pom.xml | 2 +- .../example/java/ExampleJavaApplication.java | 91 +++++++++++-------- .../fynd/example/java/config/MongoConfig.java | 22 +++++ .../fynd/example/java/config/RedisConfig.java | 17 ++++ src/main/resources/application.yml | 2 +- 5 files changed, 92 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/fynd/example/java/config/MongoConfig.java create mode 100644 src/main/java/com/fynd/example/java/config/RedisConfig.java diff --git a/pom.xml b/pom.xml index 199b016..7535a60 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 17 2.3.0 3.14.7 - 0.6.5 + v1.1.0-beta.2 1.5.2 true diff --git a/src/main/java/com/fynd/example/java/ExampleJavaApplication.java b/src/main/java/com/fynd/example/java/ExampleJavaApplication.java index 59816a0..ce730a8 100644 --- a/src/main/java/com/fynd/example/java/ExampleJavaApplication.java +++ b/src/main/java/com/fynd/example/java/ExampleJavaApplication.java @@ -1,69 +1,80 @@ package com.fynd.example.java; - import com.fynd.extension.model.Extension; import com.fynd.extension.model.ExtensionCallback; import com.fynd.extension.model.ExtensionProperties; import com.fynd.extension.session.Session; -import com.fynd.extension.storage.SQLiteStorage; +import com.fynd.extension.storage.MultiLevelStorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import redis.clients.jedis.JedisPool; +import com.mongodb.client.MongoDatabase; +import com.fynd.example.java.config.RedisConfig; +import com.fynd.example.java.config.MongoConfig; + +import java.util.HashMap; +import java.util.Map; @SpringBootApplication @ComponentScan(basePackages = {"com.fynd.**","com.sdk.**"}) +@Import({RedisConfig.class, MongoConfig.class}) public class ExampleJavaApplication { - private static final String REDIS_KEY = "ext_sample"; + private static final String REDIS_KEY = "ext_sample"; - private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Value("${sqlite.db.url}") - private String dbUrl; + @Autowired + ExtensionProperties extensionProperties; - @Autowired - ExtensionProperties extensionProperties; + @Autowired + JedisPool jedisPool; + @Autowired + MongoDatabase mongoDatabase; - ExtensionCallback callbacks = new ExtensionCallback((request) -> { - Session fdkSession = (Session) request.getAttribute("session"); - logger.debug("In Auth callback"); - if(request.getParameter("application_id") != null){ - return extensionProperties.getBaseUrl() + "/company/" + fdkSession.getCompanyId() + "/application/" + request.getParameter("application_id"); - } - else { - return extensionProperties.getBaseUrl() + "/company/" + fdkSession.getCompanyId(); - } - }, (context) -> { - logger.info("In install callback"); - return extensionProperties.getBaseUrl(); + ExtensionCallback callbacks = new ExtensionCallback((request) -> { + Session fdkSession = (Session) request.getAttribute("session"); + logger.debug("In Auth callback"); + if(request.getParameter("application_id") != null){ + return extensionProperties.getBaseUrl() + "/company/" + fdkSession.getCompanyId() + "/application/" + request.getParameter("application_id"); + } + else { + return extensionProperties.getBaseUrl() + "/company/" + fdkSession.getCompanyId(); + } + }, (context) -> { + logger.info("In install callback"); + return extensionProperties.getBaseUrl(); - }, (fdkSession) -> { - logger.info("In uninstall callback"); - return extensionProperties.getBaseUrl(); + }, (fdkSession) -> { + logger.info("In uninstall callback"); + return extensionProperties.getBaseUrl(); - }, (fdkSession) -> { - logger.info("In auto-install callback"); - return extensionProperties.getBaseUrl(); - }); + }, (fdkSession) -> { + logger.info("In auto-install callback"); + return extensionProperties.getBaseUrl(); + }); - public static void main(String[] args) { - SpringApplication.run(ExampleJavaApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(ExampleJavaApplication.class, args); + } - @Bean - public com.fynd.extension.model.Extension getExtension() throws ClassNotFoundException { - Extension extension = new Extension(); - return extension.initialize( - extensionProperties, - new SQLiteStorage(dbUrl, REDIS_KEY), - callbacks - ); - } + @Bean + public com.fynd.extension.model.Extension getExtension() throws ClassNotFoundException { + Extension extension = new Extension(); + Map options = new HashMap<>(); + // Add any required options to the map + return extension.initialize( + extensionProperties, + new MultiLevelStorage(jedisPool, mongoDatabase, REDIS_KEY, options), + callbacks + ); + } } \ No newline at end of file diff --git a/src/main/java/com/fynd/example/java/config/MongoConfig.java b/src/main/java/com/fynd/example/java/config/MongoConfig.java new file mode 100644 index 0000000..c87231f --- /dev/null +++ b/src/main/java/com/fynd/example/java/config/MongoConfig.java @@ -0,0 +1,22 @@ +package com.fynd.example.java.config; + +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoDatabase; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MongoConfig { + + @Bean + public MongoClient mongoClient() { + return MongoClients.create("mongodb://localhost:27017"); + } + + @Bean + public MongoDatabase mongoDatabase(MongoClient mongoClient) { + // Replace "yourDatabaseName" with the name of your MongoDB database + return mongoClient.getDatabase("extension-storage"); + } +} diff --git a/src/main/java/com/fynd/example/java/config/RedisConfig.java b/src/main/java/com/fynd/example/java/config/RedisConfig.java new file mode 100644 index 0000000..bf72dc9 --- /dev/null +++ b/src/main/java/com/fynd/example/java/config/RedisConfig.java @@ -0,0 +1,17 @@ +package com.fynd.example.java.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +@Configuration +public class RedisConfig { + + @Bean + public JedisPool jedisPool() { + JedisPoolConfig poolConfig = new JedisPoolConfig(); + // Configure the pool if necessary + return new JedisPool(poolConfig, "localhost", 6379); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f9fdcf0..f0a30d3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -48,7 +48,7 @@ server: ext: api_key: ${EXTENSION_API_KEY} api_secret: ${EXTENSION_API_SECRET} - scopes: "" + access_mode : 'offline' base_url: ${EXTENSION_BASE_URL} cluster: ${FP_API_DOMAIN:https://api.fynd.com} webhook: