diff --git a/.gitignore b/.gitignore
index f3f99e28..9f36f197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,11 +2,13 @@
*.swo
*.sublime-*
*.pyc
+
jmeter.log
__pycache__
tmp/
node_modules/
sftp-config.json
+
.DS_Store
*.iml
*.ipr
@@ -20,6 +22,12 @@ backups/
build.gradle
.vscode/
nohup.out
+logs/
+
docker-compose.dev.yml
docker-compose.custom.yml
+.jqwik-database
private
+
+target/
+dist/
diff --git a/compose/plugins/.gitignore b/compose/plugins/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/compose/plugins/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/compose/sample.env b/compose/sample.env
new file mode 100644
index 00000000..ab37c3f1
--- /dev/null
+++ b/compose/sample.env
@@ -0,0 +1,7 @@
+# https://docs.docker.com/compose/reference/envvars/#compose_file
+# use Enterprise edition: docker-compose.yml:./private/docker-compose.ext.yml
+# use other customize yml, copy docker-compose.yml as docker-compose.custom.yml
+# and edit .env with COMPOSE_FILE=docker-compose.custom.yml, docker-compose.custom.yml
+# is ignored with .gitignore
+COMPOSE_FILE=docker-compose.yml
+COMPOSE_PROJECT_NAME=cskefu_v8
diff --git a/plugins/sample/pom.xml b/plugins/sample/pom.xml
new file mode 100644
index 00000000..d302e107
--- /dev/null
+++ b/plugins/sample/pom.xml
@@ -0,0 +1,101 @@
+
+
+ 4.0.0
+ com.cskefu.plugins
+ sample
+ 0.0.1-SNAPSHOT
+ bundle
+ CSKeFu Plugin Sample
+
+
+ 17
+ 17
+ 17
+ 5.1.1
+
+
+
+
+ com.cskefu
+ mod-plugin
+
+
+
+
+
+
+ com.cskefu
+ bom-plugin
+ 0.0.1-SNAPSHOT
+ pom
+ import
+
+
+
+
+
+ ${project.groupId}-${project.artifactId}-${project.version}.${build.time}
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.10
+
+
+ timestamp-property
+
+ timestamp-property
+
+
+ build.time
+ yyyyMMddHHmm
+ zh_CN
+ Asia/Shanghai
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${java.version}
+ ${java.version}
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ ${bundle.plugin.version}
+ true
+
+
+
+ ${project.artifactId}
+
+ ${project.name}
+ ${project.version}
+ com.cskefu.plugins.sample.Activator
+ com.cskefu.plugins.sample
+
+ !*,org.osgi.framework,com.cskefu.mod.plugin,com.cskefu.mod.plugin.dto
+
+
+
+ slf4j-api;scope=compile|runtime; type=!pom; inline=false,
+ logback-*;scope=compile|runtime; type=!pom; inline=false
+
+ com.cskefu.plugins.sample.Sample
+ true
+
+ ../../compose/plugins
+
+
+
+
+
+
diff --git a/plugins/sample/src/main/java/com/cskefu/plugins/sample/Activator.java b/plugins/sample/src/main/java/com/cskefu/plugins/sample/Activator.java
new file mode 100644
index 00000000..f2ba96a4
--- /dev/null
+++ b/plugins/sample/src/main/java/com/cskefu/plugins/sample/Activator.java
@@ -0,0 +1,21 @@
+package com.cskefu.plugins.sample;
+
+import com.cskefu.mod.plugin.AbstractPluginActivator;
+import com.cskefu.mod.plugin.IPlugin;
+import com.cskefu.mod.plugin.PluginDescriptor;
+
+import java.util.Hashtable;
+
+public class Activator extends AbstractPluginActivator {
+
+ @Override
+ protected PluginDescriptor registerService() {
+ Hashtable props = new Hashtable<>();
+ props.put("Plugin-Name", "SamplePlugin");
+ return PluginDescriptor.builder()
+ .implementation(new Sample())
+ .name(IPlugin.class.getName())
+ .params(props)
+ .build();
+ }
+}
diff --git a/plugins/sample/src/main/java/com/cskefu/plugins/sample/Sample.java b/plugins/sample/src/main/java/com/cskefu/plugins/sample/Sample.java
new file mode 100644
index 00000000..275c2121
--- /dev/null
+++ b/plugins/sample/src/main/java/com/cskefu/plugins/sample/Sample.java
@@ -0,0 +1,18 @@
+package com.cskefu.plugins.sample;
+
+import com.cskefu.mod.plugin.IPlugin;
+import com.cskefu.mod.plugin.dto.ActionResponse;
+import com.cskefu.mod.plugin.dto.NotificationResponse;
+
+public class Sample implements IPlugin {
+ @Override
+ public ActionResponse doAction() {
+ return ActionResponse.builder().body("Action Worked !!").build();
+ }
+
+ @Override
+ public NotificationResponse doNotification() {
+ return NotificationResponse.builder().body("Notification Processed...").build();
+ }
+
+}
diff --git a/server/README.md b/server/README.md
index e69de29b..01a6c80b 100644
--- a/server/README.md
+++ b/server/README.md
@@ -0,0 +1,15 @@
+# Server
+
+## Scripts
+
+```
+./scripts/package.sh # package JAR
+./scripts/deploy.sh # deploy JAR, POM into Chatopera Nexus Repo
+```
+
+
+## Serving API
+
+```
+./scripts/dev.sh # run JAR as standalone spring boot application, provide API with 8080
+```
\ No newline at end of file
diff --git a/server/bom-plugin/pom.xml b/server/bom-plugin/pom.xml
new file mode 100644
index 00000000..d80a1d59
--- /dev/null
+++ b/server/bom-plugin/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ root
+ com.cskefu
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+ CSKeFu Bom Plugin
+ bom-plugin
+ pom
+ Standard Parent POM for CSKeFu Plugins.
+
+
+ ${java.version}
+ ${java.version}
+
+
+
+
+
+ mod-plugin
+ com.cskefu
+ ${project.parent.version}
+
+
+
+
diff --git a/server/mod-plugin/pom.xml b/server/mod-plugin/pom.xml
new file mode 100644
index 00000000..d7ba90f3
--- /dev/null
+++ b/server/mod-plugin/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ root
+ com.cskefu
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+ CSKeFu Module Plugin
+ mod-plugin
+
+
+ ${java.version}
+ ${java.version}
+
+
+
diff --git a/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/AbstractPluginActivator.java b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/AbstractPluginActivator.java
new file mode 100644
index 00000000..696bc452
--- /dev/null
+++ b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/AbstractPluginActivator.java
@@ -0,0 +1,27 @@
+package com.cskefu.mod.plugin;
+
+import lombok.extern.slf4j.Slf4j;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+@Slf4j
+public abstract class AbstractPluginActivator implements BundleActivator {
+
+ public static BundleContext bundleContext;
+
+ @Override
+ public final void start(BundleContext context) throws Exception {
+ bundleContext = context;
+ PluginDescriptor descriptor = registerService();
+ bundleContext.registerService(descriptor.getName(), descriptor.getImplementation(), descriptor.getParams());
+ log.info("Service registered: " + descriptor.getImplementation().getClass().getName());
+ }
+
+ @Override
+ public final void stop(BundleContext context) throws Exception {
+ bundleContext = null;
+ log.info("Stopping plugin " + this.getClass().getName());
+ }
+
+ protected abstract PluginDescriptor registerService();
+}
diff --git a/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/IPlugin.java b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/IPlugin.java
new file mode 100644
index 00000000..4407f573
--- /dev/null
+++ b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/IPlugin.java
@@ -0,0 +1,11 @@
+package com.cskefu.mod.plugin;
+
+import com.cskefu.mod.plugin.dto.ActionResponse;
+import com.cskefu.mod.plugin.dto.NotificationResponse;
+
+public interface IPlugin {
+
+ ActionResponse doAction();
+
+ NotificationResponse doNotification();
+}
diff --git a/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/PluginDescriptor.java b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/PluginDescriptor.java
new file mode 100644
index 00000000..0411ef6d
--- /dev/null
+++ b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/PluginDescriptor.java
@@ -0,0 +1,15 @@
+package com.cskefu.mod.plugin;
+
+import java.util.Hashtable;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class PluginDescriptor {
+
+ Object implementation;
+ String name;
+ Hashtable params;
+
+}
diff --git a/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/ActionResponse.java b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/ActionResponse.java
new file mode 100644
index 00000000..d6532698
--- /dev/null
+++ b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/ActionResponse.java
@@ -0,0 +1,10 @@
+package com.cskefu.mod.plugin.dto;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class ActionResponse {
+ String body;
+}
diff --git a/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/NotificationResponse.java b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/NotificationResponse.java
new file mode 100644
index 00000000..e9ef964f
--- /dev/null
+++ b/server/mod-plugin/src/main/java/com/cskefu/mod/plugin/dto/NotificationResponse.java
@@ -0,0 +1,10 @@
+package com.cskefu.mod.plugin.dto;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class NotificationResponse {
+ String body;
+}
diff --git a/server/mod-plugin/src/test/java/com/cskefu/mod/plugin/AbstractPluginActivatorTest.java b/server/mod-plugin/src/test/java/com/cskefu/mod/plugin/AbstractPluginActivatorTest.java
new file mode 100644
index 00000000..24845522
--- /dev/null
+++ b/server/mod-plugin/src/test/java/com/cskefu/mod/plugin/AbstractPluginActivatorTest.java
@@ -0,0 +1,58 @@
+package com.cskefu.mod.plugin;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import com.cskefu.mod.plugin.dto.ActionResponse;
+import com.cskefu.mod.plugin.dto.NotificationResponse;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.osgi.framework.BundleContext;
+
+@ExtendWith(MockitoExtension.class)
+class AbstractPluginActivatorTest {
+
+ private AbstractPluginActivator cut;
+ @Mock
+ private BundleContext bundleContext;
+
+
+ @BeforeEach
+ void setUp() {
+ cut = new TestActivator();
+ }
+
+ @Test
+ @DisplayName("When start method invoked, then the plugin service is registered into the bundle context")
+ void testStart() throws Exception {
+ cut.start(bundleContext);
+ verify(bundleContext, times(1)).registerService(eq("com.mornati.sample.commons.plugins.IPlugin"), any(SampleService.class), any());
+ }
+
+ public class TestActivator extends AbstractPluginActivator {
+
+ @Override
+ protected PluginDescriptor registerService() {
+ return PluginDescriptor.builder().implementation(new SampleService()).name(IPlugin.class.getName()).build();
+ }
+ }
+
+ public class SampleService implements IPlugin {
+
+ @Override
+ public ActionResponse doAction() {
+ return ActionResponse.builder().body("sample action").build();
+ }
+
+ @Override
+ public NotificationResponse doNotification() {
+ return NotificationResponse.builder().body("sample notification").build();
+ }
+ }
+}
diff --git a/server/pom.xml b/server/pom.xml
new file mode 100644
index 00000000..6a2af02d
--- /dev/null
+++ b/server/pom.xml
@@ -0,0 +1,211 @@
+
+
+ 4.0.0
+ pom
+
+ serving-api
+ mod-plugin
+ bom-plugin
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.7
+
+
+ com.cskefu
+ root
+ 0.0.1-SNAPSHOT
+ CSKeFu Root
+ OpenSource Contact Center
+
+
+ 17
+ 8.0.0
+ 7.0.5
+ 5.1.1
+ 0.8.7
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.osgi
+ osgi.core
+ ${osgi.version}
+
+
+
+
+ org.apache.felix
+ org.apache.felix.framework
+ ${felix.version}
+
+
+
+
+ org.apache.felix
+ org.apache.felix.main
+ ${felix.version}
+
+
+
+
+ org.apache.felix
+ org.apache.felix.fileinstall
+ 3.6.8
+ provided
+
+
+
+
+ org.apache.felix
+ org.apache.felix.scr
+ 2.1.24
+ provided
+
+
+
+
+ org.osgi
+ org.osgi.util.promise
+ 1.1.1
+ provided
+
+
+
+
+ org.osgi
+ org.osgi.util.function
+ 1.1.0
+ provided
+
+
+
+
+ org.osgi
+ org.osgi.service.cm
+ 1.5.0
+ provided
+
+
+
+
+ org.apache.felix
+ org.apache.felix.shell
+ 1.4.3
+
+
+
+
+ org.apache.felix
+ org.apache.felix.shell.remote
+ 1.2.0
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ ${jacoco.maven.plugin.version}
+ test
+
+
+
+ net.jqwik
+ jqwik
+ 1.6.2
+ test
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ ${jacoco.maven.plugin.version}
+
+
+
+ prepare-agent
+
+
+
+
+ report
+ test
+
+ report
+
+
+
+
+
+
+
+
+
+ chatopera
+ Chatopera Inc.
+ https://nexus.chatopera.com/repository/maven-public
+
+ true
+
+
+ true
+
+
+
+
+
+
+ chatopera-releases
+ Chatopera Nexus Releases
+ https://nexus.chatopera.com/repository/maven-releases/
+
+
+ chatopera-snapshots
+ Chatopera Nexus Snapshots
+ https://nexus.chatopera.com/repository/maven-snapshots/
+
+
+
+
+
+ hailiang-wang
+ Hai Liang Wang
+ h@cskefu.com
+ https://github.com/hailiang-wang
+ Chatopera Inc.
+ https://www.chatopera.com
+
+ chief engineer
+ developer
+
+ Asia/Shanghai
+
+
+
+
diff --git a/server/scripts/deploy.sh b/server/scripts/deploy.sh
new file mode 100644
index 00000000..a23aabd0
--- /dev/null
+++ b/server/scripts/deploy.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+###########################################
+#
+###########################################
+
+# constants
+baseDir=$(cd `dirname "$0"`;pwd)
+cwdDir=$PWD
+export PYTHONUNBUFFERED=1
+export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH
+export TS=$(date +%Y%m%d%H%M%S)
+export DATE=`date "+%Y%m%d"`
+export DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
+
+# functions
+
+# main
+[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return
+cd $baseDir/..
+mvn -DskipTests clean package deploy
diff --git a/server/scripts/dev.sh b/server/scripts/dev.sh
new file mode 100644
index 00000000..1b825b6d
--- /dev/null
+++ b/server/scripts/dev.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+###########################################
+#
+###########################################
+
+# constants
+baseDir=$(cd `dirname "$0"`;pwd)
+cwdDir=$PWD
+export PYTHONUNBUFFERED=1
+export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH
+export TS=$(date +%Y%m%d%H%M%S)
+export DATE=`date "+%Y%m%d"`
+export DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
+
+# functions
+
+# main
+[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return
+cd $baseDir/..
+java -jar serving-api/target/serving-api-0.0.1-SNAPSHOT.jar
diff --git a/server/scripts/package.sh b/server/scripts/package.sh
new file mode 100644
index 00000000..43043822
--- /dev/null
+++ b/server/scripts/package.sh
@@ -0,0 +1,20 @@
+#! /bin/bash
+###########################################
+#
+###########################################
+
+# constants
+baseDir=$(cd `dirname "$0"`;pwd)
+cwdDir=$PWD
+export PYTHONUNBUFFERED=1
+export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH
+export TS=$(date +%Y%m%d%H%M%S)
+export DATE=`date "+%Y%m%d"`
+export DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
+
+# functions
+
+# main
+[ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return
+cd $baseDir/..
+mvn -DskipTests clean package
diff --git a/server/serving-api/Dockerfile b/server/serving-api/Dockerfile
new file mode 100644
index 00000000..d74ea5a1
--- /dev/null
+++ b/server/serving-api/Dockerfile
@@ -0,0 +1,20 @@
+FROM adoptopenjdk/openjdk15:jdk-15.0.1_9-alpine-slim as build
+WORKDIR /workspace/app
+COPY target/core*.jar /workspace/app
+RUN mkdir -p /workspace/app/dependency && (cd /workspace/app/dependency; jar -xf ../*.jar)
+
+
+FROM adoptopenjdk/openjdk15:jdk-15.0.1_9-alpine-slim
+VOLUME /tmp
+
+ARG DEPENDENCY=/workspace/app/dependency
+RUN addgroup --system app_group && adduser --system app_user --ingroup app_group --home /app
+COPY --from=build --chown=app_user ${DEPENDENCY}/BOOT-INF/lib /app/lib
+COPY --from=build --chown=app_user ${DEPENDENCY}/META-INF /app/META-INF
+COPY --chown=app_user target/internal-bundles /app/internal-bundles
+COPY --from=build --chown=app_user ${DEPENDENCY}/BOOT-INF/classes /app
+
+USER app_user:app_group
+WORKDIR /app
+
+ENTRYPOINT ["java","-cp","./:lib/*","com.cskefu.serving.api.SampleApplication"]
diff --git a/server/serving-api/pom.xml b/server/serving-api/pom.xml
new file mode 100644
index 00000000..c5ec67ea
--- /dev/null
+++ b/server/serving-api/pom.xml
@@ -0,0 +1,65 @@
+
+
+
+ root
+ com.cskefu
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+ CSKeFu Serving API
+ serving-api
+
+
+ ${java.version}
+ ${java.version}
+
+
+
+
+ com.cskefu
+ mod-plugin
+ ${project.parent.version}
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.1.2
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ org.apache.felix.fileinstall,org.apache.felix.shell,org.apache.felix.shell.remote,org.osgi.util.function,org.osgi.util.promise,org.apache.felix.scr,org.osgi.service.cm
+ ${project.build.directory}/internal-bundles
+ false
+ true
+ true
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/SampleApplication.java b/server/serving-api/src/main/java/com/cskefu/serving/api/SampleApplication.java
new file mode 100644
index 00000000..70b2ae3e
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/SampleApplication.java
@@ -0,0 +1,16 @@
+package com.cskefu.serving.api;
+
+import com.cskefu.serving.api.config.PluginsConfigurer;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+
+@SpringBootApplication
+@EnableConfigurationProperties(PluginsConfigurer.class)
+public class SampleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SampleApplication.class, args);
+ }
+
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/config/PluginsConfigurer.java b/server/serving-api/src/main/java/com/cskefu/serving/api/config/PluginsConfigurer.java
new file mode 100644
index 00000000..f876d5a4
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/config/PluginsConfigurer.java
@@ -0,0 +1,27 @@
+package com.cskefu.serving.api.config;
+
+import java.util.Map;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+@Configuration
+@ConfigurationProperties(prefix = "plugins")
+@Getter
+@Setter
+public class PluginsConfigurer {
+
+ private Map config;
+
+// @PostConstruct
+// public void print() {
+// for (Map.Entry entry : config.entrySet()) {
+// System.out.println(entry.getKey() + ":" + entry.getValue());
+// }
+// }
+
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/controllers/SampleController.java b/server/serving-api/src/main/java/com/cskefu/serving/api/controllers/SampleController.java
new file mode 100644
index 00000000..4d929325
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/controllers/SampleController.java
@@ -0,0 +1,46 @@
+package com.cskefu.serving.api.controllers;
+
+import com.cskefu.mod.plugin.dto.ActionResponse;
+import com.cskefu.mod.plugin.dto.NotificationResponse;
+import com.cskefu.serving.api.service.PluginList;
+
+import java.util.Set;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/plugins")
+@RequiredArgsConstructor
+public class SampleController {
+
+ private final PluginList pluginList;
+
+ @GetMapping
+ @ResponseBody
+ public ResponseEntity> getSamples() {
+ return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON)
+ .body(pluginList.registered());
+
+ }
+
+ @GetMapping(value = "/{name}")
+ @ResponseBody
+ public ResponseEntity doAction(@PathVariable(value = "name") String name) {
+ return pluginList.lookup(name).map(pluginImpl -> ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON)
+ .body(pluginImpl.doAction())).orElseGet(() -> ResponseEntity.badRequest().body(ActionResponse.builder().body("Plugin not found for " + name).build()));
+ }
+
+ @GetMapping(value = "/{name}/notification")
+ @ResponseBody
+ public ResponseEntity doNotify(@PathVariable(value = "name") String name) {
+ return pluginList.lookup(name).map(pluginImpl -> ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON)
+ .body(pluginImpl.doNotification())).orElseGet(() -> ResponseEntity.badRequest().body(NotificationResponse.builder().body("Plugin not found for " + name).build()));
+ }
+
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/dto/Sample.java b/server/serving-api/src/main/java/com/cskefu/serving/api/dto/Sample.java
new file mode 100644
index 00000000..949a9521
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/dto/Sample.java
@@ -0,0 +1,11 @@
+package com.cskefu.serving.api.dto;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class Sample {
+ String name;
+ Long id;
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginList.java b/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginList.java
new file mode 100644
index 00000000..a9f1262c
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginList.java
@@ -0,0 +1,30 @@
+package com.cskefu.serving.api.service;
+
+import com.cskefu.mod.plugin.IPlugin;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PluginList {
+ private Map plugins = new HashMap<>();
+
+ public Set registered() {
+ return plugins.keySet();
+ }
+
+ public Optional lookup(String name) {
+ return Optional.ofNullable(plugins.get(name));
+ }
+
+ public void register(String name, IPlugin service) {
+ plugins.put(name, service);
+ }
+
+ public void unregister(String name) {
+ plugins.remove(name);
+ }
+
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginService.java b/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginService.java
new file mode 100644
index 00000000..bc1a777b
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/service/PluginService.java
@@ -0,0 +1,130 @@
+package com.cskefu.serving.api.service;
+
+import com.cskefu.serving.api.config.PluginsConfigurer;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.annotation.PreDestroy;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.felix.main.AutoProcessor;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.launch.FrameworkFactory;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.resource.Capability;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.SystemPropertyUtils;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class PluginService {
+
+ @Getter
+ private Framework framework;
+ private final SpringAwareBundleListener springAwareBundleListener;
+ private final PluginsConfigurer pluginsConfigurer;
+
+ @EventListener(ApplicationReadyEvent.class)
+ public void startFramework() throws BundleException {
+ log.info("Starting Plugin OSGi service...");
+ // Get Felix properties from Spring Boot config
+
+ try {
+ // Create an instance and initialise the framework.
+ FrameworkFactory factory = new org.apache.felix.framework.FrameworkFactory();
+ Map felixProperties = new HashMap<>(pluginsConfigurer.getConfig());
+ felixProperties.put("org.osgi.framework.system.packages.extra",
+ findPackageNamesStartingWith(
+ Optional.ofNullable(felixProperties.get("auto.exported.packages"))
+ .map(s -> s.split(","))
+ .map(Arrays::asList)
+ .orElse(List.of())
+ ) + "," + felixProperties.get("org.osgi.framework.system.packages.extra"));
+ framework = factory.newFramework(felixProperties);
+ framework.init();
+
+ // Use the system bundle context to process the auto-deploy
+ // and auto-install/auto-start properties.
+ AutoProcessor.process(pluginsConfigurer.getConfig(), framework.getBundleContext());
+
+ // Log Bundle Activations
+ framework.getBundleContext().addBundleListener(springAwareBundleListener);
+
+ // Start the framework.
+ framework.start();
+
+ Bundle b = framework.getBundleContext().getBundle(0);
+ BundleRevision br = b.adapt(BundleRevision.class);
+ List caps = br.getCapabilities("osgi.ee");
+ log.debug("OSGi capabilities: " + caps);
+ } catch (Exception ex) {
+ log.error("Error initializing the OSGi framework. As it is mandatory the system will be halted", ex);
+ System.exit(1);
+ }
+ }
+
+ @PreDestroy
+ public void destroy() throws BundleException, InterruptedException {
+ log.info("Stopping plugins OSGi service...");
+ framework.stop();
+ framework.waitForStop(0);
+ }
+
+ /**
+ * Felix provides an isolated classloader to each bundle. Bundles need to declare what packages they need in there manifest.
+ * If a Bundle needs e.g. something from org.slf4j it either needs to have it as classes itself or another bundle must
+ * export this packages. java.* packages will be provided by the framework from the classloader it was created with.
+ * We can modify this, by giving the framework a list of additional packages, that are provided by the spring boot
+ * container (should include e.g.slf4j)
+ */
+ protected String findPackageNamesStartingWith(List packages) {
+ return packages.stream().map(this::getPackages)
+ .flatMap(Set::stream)
+ .collect(Collectors.joining(","));
+ }
+
+ protected Set getPackages(String basePackage) {
+ try {
+ ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
+ MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
+ String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + resolveBasePackage(basePackage) + File.separator + "**/*.class";
+ return Arrays.stream(resourcePatternResolver.getResources(packageSearchPath)).map(resource -> {
+ try {
+ MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
+ Class> aClass = Class.forName(metadataReader.getClassMetadata().getClassName());
+ return aClass.getPackage().getName();
+ } catch (ClassNotFoundException | IOException e) {
+ log.error("Error looking for provided package", e);
+ return null;
+ }
+ }).collect(Collectors.toSet());
+ } catch (IOException e) {
+ log.error("Error looking for provided resource", e);
+ return Set.of();
+ }
+ }
+
+ private String resolveBasePackage(String basePackage) {
+ return ClassUtils.convertClassNameToResourcePath(SystemPropertyUtils.resolvePlaceholders(basePackage));
+ }
+
+}
diff --git a/server/serving-api/src/main/java/com/cskefu/serving/api/service/SpringAwareBundleListener.java b/server/serving-api/src/main/java/com/cskefu/serving/api/service/SpringAwareBundleListener.java
new file mode 100644
index 00000000..cd3ce4d0
--- /dev/null
+++ b/server/serving-api/src/main/java/com/cskefu/serving/api/service/SpringAwareBundleListener.java
@@ -0,0 +1,67 @@
+package com.cskefu.serving.api.service;
+
+import com.cskefu.mod.plugin.IPlugin;
+
+import java.util.Arrays;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+@Slf4j
+public class SpringAwareBundleListener implements BundleListener {
+
+ private final PluginList pluginList;
+
+ @Override
+ public void bundleChanged(BundleEvent bundleEvent) {
+
+ log.info(
+ String.format(
+ "Bundle %s:%s changed state to %s - Type: %s",
+ bundleEvent.getBundle().getSymbolicName(),
+ bundleEvent.getBundle().getVersion(),
+ getBundleStateAsString(bundleEvent.getBundle().getState()),
+ getBundleStateAsString(bundleEvent.getType())
+ )
+ );
+
+ if (bundleEvent.getBundle().getState() == Bundle.ACTIVE) {
+ try {
+ Bundle bundle = bundleEvent.getBundle();
+ BundleContext bundleContext = bundle.getBundleContext();
+ ServiceReference>[] services = bundleContext.getAllServiceReferences(IPlugin.class.getName(), null);
+ if (services != null && services.length > 0)
+ Arrays.asList(services)
+ .forEach(s -> pluginList.register(s.getBundle().getSymbolicName(), (IPlugin) bundleContext.getService(s)));
+
+ } catch (InvalidSyntaxException e) {
+ log.warn("Problem reading services from BundleContext");
+ }
+
+ } else if (bundleEvent.getBundle().getState() == Bundle.UNINSTALLED) {
+ pluginList.unregister(bundleEvent.getBundle().getSymbolicName());
+ }
+
+ }
+
+ private String getBundleStateAsString(int state) {
+ return switch (state) {
+ case Bundle.ACTIVE -> "Active";
+ case Bundle.INSTALLED -> "Installed";
+ case Bundle.RESOLVED -> "Resolved";
+ case Bundle.STARTING -> "Starting";
+ case Bundle.STOPPING -> "Stopping";
+ case Bundle.UNINSTALLED -> "Uninstalled";
+ default -> "Unknown";
+ };
+
+ }
+}
diff --git a/server/serving-api/src/main/resources/application.properties b/server/serving-api/src/main/resources/application.properties
new file mode 100644
index 00000000..e93ef522
--- /dev/null
+++ b/server/serving-api/src/main/resources/application.properties
@@ -0,0 +1,22 @@
+# --------------------------------
+# Felix Framework settings
+# https://felix.apache.org/documentation/subprojects/apache-felix-framework/apache-felix-framework-configuration-properties.html
+# --------------------------------
+# If true will configure a shutdown hook to shutdown the framework on JVM shutdown
+plugins.config.felix.shutdown.hook=true
+# Where is the felix bundle cache dir
+plugins.config.org.osgi.framework.storage=./serving-api/target/felix-cache
+# When to clean the felix-cache directory
+plugins.config.org.osgi.framework.storage.clean=onFirstInit
+# Directory to look for bundles to deploy once when framework first loads
+plugins.config.felix.auto.deploy.dir=./serving-api/target/internal-bundles
+# Actions to perform on discovered bundles
+plugins.config.felix.auto.deploy.action=install,start,update,uninstall
+plugins.config.felix.startlevel.bundle=1
+plugins.config.felix.fileinstall.dir=../compose/plugins
+plugins.config.felix.fileinstall.log.level=2
+plugins.config.felix.fileinstall.bundles.updateWithListeners=true
+plugins.config.org.osgi.framework.system.packages.extra=org.osgi.framework,org.xml.sax,org.xml.sax.helpers,javax.xml.parsers,javax.naming
+plugins.config.auto.exported.packages=com.cskefu.mod.plugin,org.slf4j
+
+server.servlet.context-path=/api
diff --git a/server/serving-api/src/test/java/com/cskefu/serving/api/controllers/SampleControllerTest.java b/server/serving-api/src/test/java/com/cskefu/serving/api/controllers/SampleControllerTest.java
new file mode 100644
index 00000000..9c343771
--- /dev/null
+++ b/server/serving-api/src/test/java/com/cskefu/serving/api/controllers/SampleControllerTest.java
@@ -0,0 +1,53 @@
+package com.cskefu.serving.api.controllers;
+
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.web.servlet.MockMvc;
+
+@SpringBootTest
+@AutoConfigureMockMvc
+class SampleControllerTest {
+
+ @Autowired
+ private SampleController cut;
+ @Autowired
+ private MockMvc mockMvc;
+
+ @Test
+ @DisplayName("When the SpringBoot application is initialized, then the controller is created")
+ void testControllerInit() {
+ assertNotNull(cut);
+ }
+
+ @Test
+ @DisplayName("When samples list api is called, then the list of installed bundles is returned")
+ void samplesList() throws Exception {
+ mockMvc.perform(get("/v1/samples")).andDo(print()).andExpect(status().isOk())
+ .andExpect(content().string(containsString("[]")));
+ }
+
+ @Test
+ @DisplayName("When missing sample bundle is called, then the httpStatus is 400 with a message explaining the problem")
+ void missingPluginCall() throws Exception {
+ mockMvc.perform(get("/v1/samples/missing-bundle")).andDo(print()).andExpect(status().isBadRequest())
+ .andExpect(content().string(containsString("Plugin not found for missing-bundle")));
+ }
+
+ @Test
+ @DisplayName("When missing sample bundle notification is called, then the httpStatus is 400 with a message explaining the problem")
+ void missingPluginNotificationCall() throws Exception {
+ mockMvc.perform(get("/v1/samples/missing-bundle/notification")).andDo(print()).andExpect(status().isBadRequest())
+ .andExpect(content().string(containsString("Plugin not found for missing-bundle")));
+ }
+}
diff --git a/server/serving-api/src/test/java/com/cskefu/serving/api/service/PluginServiceTests.java b/server/serving-api/src/test/java/com/cskefu/serving/api/service/PluginServiceTests.java
new file mode 100644
index 00000000..1038d068
--- /dev/null
+++ b/server/serving-api/src/test/java/com/cskefu/serving/api/service/PluginServiceTests.java
@@ -0,0 +1,49 @@
+package com.cskefu.serving.api.service;
+
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import com.cskefu.serving.api.config.PluginsConfigurer;
+
+import java.util.List;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+
+@ExtendWith(MockitoExtension.class)
+@SpringBootTest(classes = PluginService.class)
+class PluginServiceTests {
+
+ @MockBean
+ private SpringAwareBundleListener springAwareBundleListener;
+ @MockBean
+ private PluginsConfigurer pluginsConfigurer;
+ @Autowired
+ private PluginService cut;
+
+ @Test
+ @DisplayName(
+ "when BundleService is initialized, then the Felix framework is created using the Spring ApplicationReadyEvent")
+ void testFelixFrameworkCreation() {
+ assertAll(
+ () -> assertNotNull(cut),
+ () -> assertNotNull(cut.getFramework())
+ );
+ }
+
+ @Test
+ @DisplayName("When find package is called with a specific package, then subpackages are provided too")
+ void testExtraPackageConfiguration() {
+ String result = cut.findPackageNamesStartingWith(List.of("com.mornati.sample"));
+ assertAll(
+ () -> assertNotNull(result),
+ () -> assertTrue(result.contains("com.mornati.sample.service")),
+ () -> assertTrue(result.contains("com.mornati.sample.commons.plugins.dto"))
+ );
+ }
+}
diff --git a/server/serving-api/src/test/java/com/cskefu/serving/api/service/SpringAwareBundleListenerTest.java b/server/serving-api/src/test/java/com/cskefu/serving/api/service/SpringAwareBundleListenerTest.java
new file mode 100644
index 00000000..719b04ff
--- /dev/null
+++ b/server/serving-api/src/test/java/com/cskefu/serving/api/service/SpringAwareBundleListenerTest.java
@@ -0,0 +1,100 @@
+package com.cskefu.serving.api.service;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.cskefu.mod.plugin.IPlugin;
+import com.cskefu.mod.plugin.dto.ActionResponse;
+import com.cskefu.mod.plugin.dto.NotificationResponse;
+
+import java.util.List;
+import net.jqwik.api.ForAll;
+import net.jqwik.api.Property;
+import net.jqwik.api.lifecycle.BeforeProperty;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mockito;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+
+@ExtendWith(MockitoExtension.class)
+class SpringAwareBundleListenerTest {
+
+ private SpringAwareBundleListener cut;
+ private final PluginList pluginList = Mockito.mock(PluginList.class);
+ private final BundleEvent bundleEvent = Mockito.mock(BundleEvent.class);
+ private final Bundle bundle = Mockito.mock(Bundle.class);
+ private final BundleContext bundleContext = Mockito.mock(BundleContext.class);
+ private final ServiceReference serviceReference = Mockito.mock(ServiceReference.class);
+
+
+ @BeforeProperty
+ void setUp() {
+ cut = new SpringAwareBundleListener(pluginList);
+ }
+
+ @Property
+ void testActivateBundleEventInvalidPlugin(@ForAll String bundleName) {
+ when(bundleEvent.getBundle()).thenReturn(bundle);
+ when(bundle.getBundleContext()).thenReturn(bundleContext);
+ when(bundle.getState()).thenReturn(Bundle.ACTIVE);
+ when(bundle.getSymbolicName()).thenReturn(bundleName);
+ cut.bundleChanged(bundleEvent);
+ verify(pluginList, never()).register(anyString(), any());
+ }
+
+ @Property
+ void testActivateBundleEventRegisterService(@ForAll String bundleName) throws InvalidSyntaxException {
+ MockPlugin plugin = new MockPlugin();
+ when(bundleEvent.getBundle()).thenReturn(bundle);
+ when(bundle.getBundleContext()).thenReturn(bundleContext);
+ when(bundle.getState()).thenReturn(Bundle.ACTIVE);
+ when(bundle.getSymbolicName()).thenReturn(bundleName);
+ when(bundleContext.getAllServiceReferences(IPlugin.class.getName(), null)).thenReturn(List.of(serviceReference).toArray(new ServiceReference[0]));
+ when(bundleContext.getService(serviceReference)).thenReturn(plugin);
+ when(serviceReference.getBundle()).thenReturn(bundle);
+
+ cut.bundleChanged(bundleEvent);
+
+ verify(pluginList).register(bundleName, plugin);
+ }
+
+ @Property
+ void testUnregisterService(@ForAll String bundleName) throws InvalidSyntaxException {
+ MockPlugin plugin = new MockPlugin();
+ when(bundleEvent.getBundle()).thenReturn(bundle);
+ when(bundle.getBundleContext()).thenReturn(bundleContext);
+ when(bundle.getState()).thenReturn(Bundle.ACTIVE);
+ when(bundle.getSymbolicName()).thenReturn(bundleName);
+ when(bundleContext.getAllServiceReferences(IPlugin.class.getName(), null)).thenReturn(List.of(serviceReference).toArray(new ServiceReference[0]));
+ when(bundleContext.getService(serviceReference)).thenReturn(plugin);
+ when(serviceReference.getBundle()).thenReturn(bundle);
+
+ cut.bundleChanged(bundleEvent);
+ when(bundle.getState()).thenReturn(Bundle.UNINSTALLED);
+ cut.bundleChanged(bundleEvent);
+ verify(pluginList, atLeast(1)).unregister(bundleName);
+ }
+
+ class MockPlugin implements IPlugin {
+
+ @Override
+ public ActionResponse doAction() {
+ return null;
+ }
+
+ @Override
+ public NotificationResponse doNotification() {
+ return null;
+ }
+ }
+
+
+}
diff --git a/server/serving-auth/pom.xml b/server/serving-auth/pom.xml
deleted file mode 100644
index 8a3b922b..00000000
--- a/server/serving-auth/pom.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
- com.cskefu
- cskefu-auth
- 0.0.1-SNAPSHOT
- 4.0.0
- cskefu-auth
- https://www.cskefu.com/
-
- UTF-8
- 11
- 11
- 11
- 2.7.4
- 2021.0.4
- 2.2.2
- 1.18.6
- 8.0.30
- 3.17.7
- 3.0.0
- 0.11.5
- 0.0.9
-
-
-
- com.cskefu
- cskefu-common
- 0.0.1-SNAPSHOT
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
-
-
-
- com.github.axet
- kaptcha
- ${kaptcha.version}
-
-
- io.jsonwebtoken
- jjwt-api
- ${jsonwebtoken.version}
-
-
- io.jsonwebtoken
- jjwt-impl
- ${jsonwebtoken.version}
-
-
- io.jsonwebtoken
- jjwt-jackson
- ${jsonwebtoken.version}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- io.springfox
- springfox-swagger2
- ${swagger.version}
-
-
- io.springfox
- springfox-swagger-ui
- ${swagger.version}
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud.version}.0
- pom
- import
-
-
-
-
diff --git a/server/serving-auth/src/main/java/com/cskefu/auth/CskefuAuthApplication.java b/server/serving-auth/src/main/java/com/cskefu/auth/CskefuAuthApplication.java
deleted file mode 100644
index e8fd07dc..00000000
--- a/server/serving-auth/src/main/java/com/cskefu/auth/CskefuAuthApplication.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.cskefu.auth;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class CskefuAuthApplication {
- public static void main(String[] args) {
- SpringApplication.run(CskefuAuthApplication.class, args);
- }
-}
\ No newline at end of file
diff --git a/server/serving-auth/src/main/resources/application-dev.yml b/server/serving-auth/src/main/resources/application-dev.yml
deleted file mode 100644
index cc21aa76..00000000
--- a/server/serving-auth/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-spring:
- datasource:
- url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
- username: root
- password: 123456
-
- cloud:
- # sentinel配置
- sentinel:
- eager: true
- transport:
- dashboard:
- 127.0.0.1:8848
- port: 8719
- heartbeat-interval-ms: 5000
- nacos:
- # 注册中心配置
- discovery:
- server-addr: localhost:8848
- namespace: xxxxxxx
-# # 配置中心
-# config:
-# server-addr: 127.0.0.1:8848
-# file-extension: yaml
-# namespace: jm-live-dev
-# shared-configs[0]:
-# group: sentinel
-# data-id: sentinel-shared.yaml
-# refresh: true
diff --git a/server/serving-auth/src/main/resources/application-pro.yml b/server/serving-auth/src/main/resources/application-pro.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/server/serving-auth/src/main/resources/application.yml b/server/serving-auth/src/main/resources/application.yml
deleted file mode 100644
index b3a925ac..00000000
--- a/server/serving-auth/src/main/resources/application.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-server:
- port: 8000
-spring:
- application:
- name: cskefu-auth
- profiles:
- active: dev
- datasource:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- hikari:
- connection-timeout: 5000
- minimum-idle: 5
- maximum-pool-size: 20
- auto-commit: false
- idle-timeout: 600000
- pool-name: DataSourceHikariCP
- max-lifetime: 1800000
- connection-test-query: select 1
- redis:
- host: 127.0.0.1
- port: 6379
- timeout: 5000
- database: 0
- lettuce:
- pool:
- max-active: 8
- max-idle: 8
- min-idle: 0
- max-wait: -1ms
-
-cskefu:
- cskefu:
- private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8TSxdMp76dZS2L8DpvJOgHNJmeI8PM30CFSeVMCHV5dEjtixipsMsSQu0ariAtVfA5M/ma1wcqEpsDO9nVQRsmsJCKMIWOcR6yBQU9f0T7Hkmil4Ckf61C1R7wLrynOjCeUCneQ7R0+dg9K25CymclPnK4ym2GInmuUjdbyQQcX4QBuIbmuY10MG8nW9ovhFML85KoBk5yxV4zVwLGP4TFJVnBmiNO3XSKL2XsX7wFFO93O8jmAnzgpWj8khsZAYG4nijIz2BciS9uQFa/lUX6yD50ykjNklbhCBIMGaQ6rr1WjnwLHDZU9sLvcYMboKPJHWz1FttvxuKSLYbf7j/AgMBAAECggEAEH1rPSrwF47kdW/vibu+uDuat7Tz3w9RpM6lc/Mn6ctoA6PLqN5hvFpJPbhHoAqn1kSZ0EJNA4imIjNsluf8rMyAs1QbN+CnMpMC7zL7jrS1IO+ze+LwVnpyufbbm3nfCE85OKSC7IbAfhHvUYOHIvQI5Zn76FTamFHxh5klpCrY1h8gcVWdRxiK0Q8AQP7KD0QnkzgROhkRmdI01639VyTCTc6Rtv5puU6J6idJwTd3JAiJXZ2qcoAwhnkSHnVnP5ktFxl66eHGJKeol6bGcJIFQRGLVmh78x6MXoqkJ2M7DRntL38TLKT5KCYViGxUpO0gED/HQBhDALyNevJZQQKBgQDr+pZDtRIQ6mMZMswKTo2+zIFEUFES2sR/bunEW5snPR3krKdgzJoEg7WERkMviSlvW6K7a6VeJ9KKO/iE07lcRkN2NQZUkBDsrNRgoOwB17hHJqrMyZ1It+hZmPQTkeyJu/BCxDkIMwbQYXxIe8J/dVYjHJVXZgzPqEXKYqeViwKBgQDMRwr7ceW+9c/GzHd7p6849s3+MbT0kzyXDTdeJkQFSDPufYapTCan/MrdJmnIRz8pq2URZrO4kDDxxeWu2Vkekv9cxVFrQVFfvuq+4BFpQvYkRHk9PDzCmgFJD/wLG8gzNTH7UahaNb7m0tPB3D1g5Q6LzZCc1h3s2K6SLS7g3QKBgE41Bof6ArrIc39ubmEcF64caNsTI0t0ZZs2TxNcqNcgUj/vWKmkJYdJf2cPQkUG2Eynug8TZgMGf6iAp6Sd5tjGEKWkfSyZcoJ95QUBUDZsIA60qfak+xOWn9LR9lJmElazirUWAzDMeH2nUWFUYumLIbkRSA1nLOfFhRvGBnRxAoGBAJvDAAjCzGBTpt77QZA0SFOzPVc6J7TmICk9lp5fpzYv3AlaBbhJrKAjDbybccWZLfxkCGjAWwG8UNXKBFzStjWt+LGQc4jJAXd0aCKrUBtnR7BX1epvaBUqwRgo7BK8WGdThI0RssE2gh4XXAhSGysq/XB0inRMf/z9K/+iHECxAoGAFlcIZ4/xXhbObUPU05hZFoj+zN5obaOLefRJn4uqjD9/VSRnI2bBv7vXKoLX6BwFF/PWvg1hzGy3O9TQ4XYPOqNGcBFDOqwxmVVevzXgRInoiRNP3xZXcqswppEbqORGbRoPLQBqLnPx1GKwbo7Fp9O5ywARVZtf4STt3pRK8PY=
- public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvE0sXTKe+nWUti/A6byToBzSZniPDzN9AhUnlTAh1eXRI7YsYqbDLEkLtGq4gLVXwOTP5mtcHKhKbAzvZ1UEbJrCQijCFjnEesgUFPX9E+x5JopeApH+tQtUe8C68pzownlAp3kO0dPnYPStuQspnJT5yuMpthiJ5rlI3W8kEHF+EAbiG5rmNdDBvJ1vaL4RTC/OSqAZOcsVeM1cCxj+ExSVZwZojTt10ii9l7F+8BRTvdzvI5gJ84KVo/JIbGQGBuJ4oyM9gXIkvbkBWv5VF+sg+dMpIzZJW4QgSDBmkOq69Vo58Cxw2VPbC73GDG6CjyR1s9Rbbb8biki2G3+4/wIDAQAB
diff --git a/server/serving-biz/pom.xml b/server/serving-biz/pom.xml
deleted file mode 100644
index b6a168d2..00000000
--- a/server/serving-biz/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
- com.cskefu
- cskefu-biz
- 0.0.1-SNAPSHOT
- 4.0.0
- cskefu-biz
- https://www.cskefu.com/
-
- UTF-8
- 11
- 11
- 11
- 2.7.4
- 2021.0.4
- 2.2.2
- 1.18.6
- 8.0.30
- 3.17.7
- 3.0.0
-
-
-
- com.cskefu
- cskefu-common
- 0.0.1-SNAPSHOT
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
- org.redisson
- redisson-spring-boot-starter
- ${redisson-spring.version}
-
-
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- ${mybatis-spring.version}
-
-
- mysql
- mysql-connector-java
- ${mysql-connector.version}
- runtime
-
-
- io.springfox
- springfox-swagger2
- ${swagger.version}
-
-
- io.springfox
- springfox-swagger-ui
- ${swagger.version}
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud.version}.0
- pom
- import
-
-
-
-
diff --git a/server/serving-biz/src/main/java/com/cskefu/biz/CskefuBIZApplication.java b/server/serving-biz/src/main/java/com/cskefu/biz/CskefuBIZApplication.java
deleted file mode 100644
index cbc11eb6..00000000
--- a/server/serving-biz/src/main/java/com/cskefu/biz/CskefuBIZApplication.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.cskefu.biz;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class CskefuBIZApplication {
- public static void main(String[] args) {
- SpringApplication.run(CskefuBIZApplication.class, args);
- }
-}
\ No newline at end of file
diff --git a/server/serving-biz/src/main/java/com/cskefu/biz/swagger/SwaggerConfiguration.java b/server/serving-biz/src/main/java/com/cskefu/biz/swagger/SwaggerConfiguration.java
deleted file mode 100644
index 63fa3bd8..00000000
--- a/server/serving-biz/src/main/java/com/cskefu/biz/swagger/SwaggerConfiguration.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.cskefu.biz.swagger;
-
-import io.swagger.annotations.ApiOperation;
-import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.*;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfiguration {
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.OAS_30)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- .paths(PathSelectors.regex("(?!/error.*).*"))
- .build()
- .securityContexts(Arrays.asList(securityContext()))
- .securitySchemes(Arrays.asList(new ApiKey("token", "token", SecuritySchemeIn.HEADER.name())));
- }
-
- private SecurityContext securityContext() {
- return SecurityContext.builder()
- .securityReferences(defaultAuth())
- //.forPaths(PathSelectors.regex("/*.*"))
- .build();
- }
-
- private List defaultAuth() {
- AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
- AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
- authorizationScopes[0] = authorizationScope;
- return Collections.singletonList(new SecurityReference("token", authorizationScopes));
- }
-
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("cskefu Swagger API")
- .description("春松客服Swagger API")
- .contact(new Contact("cskefu", "https://www.cskefu.com/", "dev@lists.cskefu.com"))
- .license("Apache License Version 2.0")
- .licenseUrl("http://www.apache.org/licenese/LICENSE-2.0")
- .version("1.0")
- .build();
- }
-}
\ No newline at end of file
diff --git a/server/serving-biz/src/main/resources/application-dev.yml b/server/serving-biz/src/main/resources/application-dev.yml
deleted file mode 100644
index cc21aa76..00000000
--- a/server/serving-biz/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-spring:
- datasource:
- url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
- username: root
- password: 123456
-
- cloud:
- # sentinel配置
- sentinel:
- eager: true
- transport:
- dashboard:
- 127.0.0.1:8848
- port: 8719
- heartbeat-interval-ms: 5000
- nacos:
- # 注册中心配置
- discovery:
- server-addr: localhost:8848
- namespace: xxxxxxx
-# # 配置中心
-# config:
-# server-addr: 127.0.0.1:8848
-# file-extension: yaml
-# namespace: jm-live-dev
-# shared-configs[0]:
-# group: sentinel
-# data-id: sentinel-shared.yaml
-# refresh: true
diff --git a/server/serving-biz/src/main/resources/application-pro.yml b/server/serving-biz/src/main/resources/application-pro.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/server/serving-biz/src/main/resources/application.yml b/server/serving-biz/src/main/resources/application.yml
deleted file mode 100644
index d078a64e..00000000
--- a/server/serving-biz/src/main/resources/application.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-spring:
- application:
- name: cskefu-biz
- profiles:
- active: dev
- datasource:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- hikari:
- connection-timeout: 5000
- minimum-idle: 5
- maximum-pool-size: 20
- auto-commit: false
- idle-timeout: 600000
- pool-name: DataSourceHikariCP
- max-lifetime: 1800000
- connection-test-query: select 1
- redis:
- host: 127.0.0.1
- port: 6379
- timeout: 5000
- database: 0
- lettuce:
- pool:
- max-active: 8
- max-idle: 8
- min-idle: 0
- max-wait: -1ms
diff --git a/server/serving-common/pom.xml b/server/serving-common/pom.xml
deleted file mode 100644
index 28dcca1f..00000000
--- a/server/serving-common/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
- com.cskefu
- cskefu-common
- 0.0.1-SNAPSHOT
- 4.0.0
- cskefu-common
- https://www.cskefu.com/
-
- UTF-8
- 11
- 11
- 11
- 2.7.4
- 2021.0.4
- 2.2.2
- 1.18.6
- 8.0.30
- 3.17.7
- 3.0.0
- 2.13.4
-
-
-
- org.projectlombok
- lombok
-
-
- com.fasterxml.jackson.core
- jackson-annotations
-
-
- com.fasterxml.jackson.core
- jackson-core
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud.version}.0
- pom
- import
-
-
-
-
diff --git a/server/serving-common/src/main/java/com/cskefu/common/BaseEntity.java b/server/serving-common/src/main/java/com/cskefu/common/BaseEntity.java
deleted file mode 100644
index f29c3b5a..00000000
--- a/server/serving-common/src/main/java/com/cskefu/common/BaseEntity.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.cskefu.common;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class BaseEntity implements Serializable {
- private static final long serialVersionUID = -6751846719593132836L;
- private T id;
- private Date createTime;
- private Date updateTime;
- private String creator;
- private String updator;
- private Boolean deleted;
- private Integer version;
-}
diff --git a/server/serving-common/src/main/java/com/cskefu/common/Result.java b/server/serving-common/src/main/java/com/cskefu/common/Result.java
deleted file mode 100644
index 676f31e3..00000000
--- a/server/serving-common/src/main/java/com/cskefu/common/Result.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.cskefu.common;
-
-import lombok.Getter;
-
-@Getter
-public class Result {
- private final boolean success;
- private final int code;
- private final T data;
- private final String message;
-
- Result(boolean success, int code, T data, String message) {
- this.success = success;
- this.code = code;
- this.data = data;
- this.message = message;
- }
-
- public static ResultBuilder builder() {
- return new ResultBuilder<>();
- }
-
- public static Result success() {
- return Result.builder().code(0).success(true).build();
- }
-
- public static Result success(int code, T data) {
- return Result.builder().code(code).success(true).data(data).build();
- }
-
- public static Result error(int code, String i18nMessage) {
- return Result.builder().code(code).success(false).message(i18nMessage).build();
- }
-
- @Override
- public String toString() {
- return "Result(success=" + this.success + ", code=" + this.code + ", data=" + this.data + ", message=" + this.message + ")";
- }
-
- public static class ResultBuilder {
- private boolean success;
- private int code;
- private T data;
- private String message;
-
- ResultBuilder() {
- }
-
- public ResultBuilder success(boolean success) {
- this.success = success;
- return this;
- }
-
- public ResultBuilder code(int code) {
- this.code = code;
- return this;
- }
-
- public ResultBuilder data(T data) {
- this.data = data;
- return this;
- }
-
- public ResultBuilder message(String message) {
- this.message = message;
- return this;
- }
-
- public Result build() {
- return new Result(this.success, this.code, this.data, this.message);
- }
-
- @Override
- public String toString() {
- return this.getClass().getName() + "(success=" + this.success + ", code=" + this.code + ", data=" + this.data + ", message=" + this.message + ")";
- }
- }
-}
diff --git a/server/serving-conversation/pom.xml b/server/serving-conversation/pom.xml
deleted file mode 100644
index 672e1349..00000000
--- a/server/serving-conversation/pom.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
- com.cskefu
- cskefu-conversation
- 0.0.1-SNAPSHOT
- 4.0.0
- cskefu-conversation
- https://www.cskefu.com/
-
- UTF-8
- 11
- 11
- 11
- 2.7.4
- 2021.0.4
- 2.2.2
- 1.18.6
- 8.0.30
- 3.17.7
- 3.0.0
-
-
-
- com.cskefu
- cskefu-common
- 0.0.1-SNAPSHOT
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.redisson
- redisson-spring-boot-starter
- ${redisson-spring.version}
-
-
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- ${mybatis-spring.version}
-
-
- mysql
- mysql-connector-java
- ${mysql-connector.version}
- runtime
-
-
- io.springfox
- springfox-swagger2
- ${swagger.version}
-
-
- io.springfox
- springfox-swagger-ui
- ${swagger.version}
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud.version}.0
- pom
- import
-
-
-
-
diff --git a/server/serving-conversation/src/main/java/com/cskefu/io/CskefuConversationApplication.java b/server/serving-conversation/src/main/java/com/cskefu/io/CskefuConversationApplication.java
deleted file mode 100644
index 36e98d2c..00000000
--- a/server/serving-conversation/src/main/java/com/cskefu/io/CskefuConversationApplication.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.cskefu.io;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class CskefuConversationApplication {
- public static void main(String[] args) {
- SpringApplication.run(CskefuSessionApplication.class, args);
- }
-}
\ No newline at end of file
diff --git a/server/serving-conversation/src/main/java/com/cskefu/io/swagger/SwaggerConfiguration.java b/server/serving-conversation/src/main/java/com/cskefu/io/swagger/SwaggerConfiguration.java
deleted file mode 100644
index aef1757a..00000000
--- a/server/serving-conversation/src/main/java/com/cskefu/io/swagger/SwaggerConfiguration.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.cskefu.io.swagger;
-
-import io.swagger.annotations.ApiOperation;
-import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.*;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfiguration {
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.OAS_30)
- .apiInfo(apiInfo())
- .select()
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- .paths(PathSelectors.regex("(?!/error.*).*"))
- .build()
- .securityContexts(Arrays.asList(securityContext()))
- .securitySchemes(Arrays.asList(new ApiKey("token", "token", SecuritySchemeIn.HEADER.name())));
- }
-
- private SecurityContext securityContext() {
- return SecurityContext.builder()
- .securityReferences(defaultAuth())
- //.forPaths(PathSelectors.regex("/*.*"))
- .build();
- }
-
- private List defaultAuth() {
- AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
- AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
- authorizationScopes[0] = authorizationScope;
- return Collections.singletonList(new SecurityReference("token", authorizationScopes));
- }
-
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("cskefu Swagger API")
- .description("春松客服Swagger API")
- .contact(new Contact("cskefu", "https://www.cskefu.com/", "dev@lists.cskefu.com"))
- .license("Apache License Version 2.0")
- .licenseUrl("http://www.apache.org/licenese/LICENSE-2.0")
- .version("1.0")
- .build();
- }
-}
\ No newline at end of file
diff --git a/server/serving-conversation/src/main/resources/application-dev.yml b/server/serving-conversation/src/main/resources/application-dev.yml
deleted file mode 100644
index cc21aa76..00000000
--- a/server/serving-conversation/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-spring:
- datasource:
- url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
- username: root
- password: 123456
-
- cloud:
- # sentinel配置
- sentinel:
- eager: true
- transport:
- dashboard:
- 127.0.0.1:8848
- port: 8719
- heartbeat-interval-ms: 5000
- nacos:
- # 注册中心配置
- discovery:
- server-addr: localhost:8848
- namespace: xxxxxxx
-# # 配置中心
-# config:
-# server-addr: 127.0.0.1:8848
-# file-extension: yaml
-# namespace: jm-live-dev
-# shared-configs[0]:
-# group: sentinel
-# data-id: sentinel-shared.yaml
-# refresh: true
diff --git a/server/serving-conversation/src/main/resources/application-pro.yml b/server/serving-conversation/src/main/resources/application-pro.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/server/serving-conversation/src/main/resources/application.yml b/server/serving-conversation/src/main/resources/application.yml
deleted file mode 100644
index 98a843c2..00000000
--- a/server/serving-conversation/src/main/resources/application.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-spring:
- application:
- name: cskefu-conversation
- profiles:
- active: dev
- datasource:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- hikari:
- connection-timeout: 5000
- minimum-idle: 5
- maximum-pool-size: 20
- auto-commit: false
- idle-timeout: 600000
- pool-name: DataSourceHikariCP
- max-lifetime: 1800000
- connection-test-query: select 1
- redis:
- host: 127.0.0.1
- port: 6379
- timeout: 5000
- database: 0
- lettuce:
- pool:
- max-active: 8
- max-idle: 8
- min-idle: 0
- max-wait: -1ms
diff --git a/server/serving-gateway/pom.xml b/server/serving-gateway/pom.xml
deleted file mode 100644
index 5115d319..00000000
--- a/server/serving-gateway/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- com.cskefu
- cskefu-gateway
- 0.0.1-SNAPSHOT
- 4.0.0
- cskefu-gateway
- https://www.cskefu.com/
-
- UTF-8
- 11
- 11
- 11
- 2.7.4
- 2021.0.4
- 2.2.2
- 1.18.6
- 8.0.30
- 3.17.7
- 3.0.0
-
-
-
- com.cskefu
- cskefu-common
- 0.0.1-SNAPSHOT
-
-
- org.springframework.cloud
- spring-cloud-starter-gateway
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud.version}.0
- pom
- import
-
-
-
-
diff --git a/server/serving-gateway/src/main/java/com/cskefu/gateway/CskefuGatewayApplication.java b/server/serving-gateway/src/main/java/com/cskefu/gateway/CskefuGatewayApplication.java
deleted file mode 100644
index ed6590e5..00000000
--- a/server/serving-gateway/src/main/java/com/cskefu/gateway/CskefuGatewayApplication.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.cskefu.gateway;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class CskefuGatewayApplication {
- public static void main(String[] args) {
- SpringApplication.run(CskefuGatewayApplication.class, args);
- }
-}
\ No newline at end of file
diff --git a/server/serving-gateway/src/main/resources/application-dev.yml b/server/serving-gateway/src/main/resources/application-dev.yml
deleted file mode 100644
index cc21aa76..00000000
--- a/server/serving-gateway/src/main/resources/application-dev.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-spring:
- datasource:
- url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
- username: root
- password: 123456
-
- cloud:
- # sentinel配置
- sentinel:
- eager: true
- transport:
- dashboard:
- 127.0.0.1:8848
- port: 8719
- heartbeat-interval-ms: 5000
- nacos:
- # 注册中心配置
- discovery:
- server-addr: localhost:8848
- namespace: xxxxxxx
-# # 配置中心
-# config:
-# server-addr: 127.0.0.1:8848
-# file-extension: yaml
-# namespace: jm-live-dev
-# shared-configs[0]:
-# group: sentinel
-# data-id: sentinel-shared.yaml
-# refresh: true
diff --git a/server/serving-gateway/src/main/resources/application-pro.yml b/server/serving-gateway/src/main/resources/application-pro.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/server/serving-gateway/src/main/resources/application.yml b/server/serving-gateway/src/main/resources/application.yml
deleted file mode 100644
index 127952d2..00000000
--- a/server/serving-gateway/src/main/resources/application.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-spring:
- application:
- name: cskefu-gateway
- profiles:
- active: dev