diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 949b1d5..33add0a 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -28,6 +28,8 @@ dependencies{ implementation(project(":translations")) implementation(project(":user")) implementation(project(":web")) + implementation(project(":wiki")) + implementation("de.srsoftware:configuration.json:1.0.3") implementation("de.srsoftware:tools.slf4j2syslog:1.0.1") // this provides a slf4j implementation that forwards to System.Logger } diff --git a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java index 3e59a18..7fc7c20 100644 --- a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java +++ b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java @@ -12,6 +12,7 @@ import de.srsoftware.umbrella.bookmarks.BookmarkApi; import de.srsoftware.umbrella.company.CompanyModule; import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.Util; +import de.srsoftware.umbrella.core.api.WikiService; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.documents.DocumentApi; import de.srsoftware.umbrella.items.ItemApi; @@ -30,6 +31,8 @@ import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.Executors; + +import de.srsoftware.umbrella.wiki.WikiModule; import org.json.JSONObject; public class Application { @@ -79,6 +82,7 @@ public class Application { new TaskLegacy(registry, config).bindPath("/legacy/task").on(server); new TimeModule(registry, config).bindPath("/api/time").on(server); new WebHandler(registry).bindPath("/").on(server); + new WikiModule(registry, config).bindPath("/api/wiki").on(server); server.setExecutor(Executors.newFixedThreadPool(threads)); server.start(); diff --git a/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java b/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java index 723e516..b85ac6b 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/ModuleRegistry.java @@ -18,7 +18,7 @@ public class ModuleRegistry { private TimeService timeService; private Translator translator; private UserService userService; - + private WikiService wikiService; public ModuleRegistry add(Object service) { @@ -36,6 +36,7 @@ public class ModuleRegistry { case TimeService ts: timeService = ts; break; case Translator tr: translator = tr; break; case UserService us: userService = us; break; + case WikiService ws: wikiService = ws; break; case null: break; default: System.getLogger(getClass().getSimpleName()).log(System.Logger.Level.WARNING,"Trying to add untracked class {0} to {1}",service.getClass().getSimpleName(),getClass().getSimpleName()); } @@ -93,4 +94,6 @@ public class ModuleRegistry { public UserService userService(){ return userService; } + + public WikiService wikiService() { return wikiService; }; } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/api/WikiService.java b/core/src/main/java/de/srsoftware/umbrella/core/api/WikiService.java new file mode 100644 index 0000000..e2489f4 --- /dev/null +++ b/core/src/main/java/de/srsoftware/umbrella/core/api/WikiService.java @@ -0,0 +1,4 @@ +package de.srsoftware.umbrella.core.api; + +public interface WikiService { +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 6d2516c..ee979d6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -18,3 +18,4 @@ include("time") include("translations") include("user") include("web") +include("wiki") diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/Constants.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/Constants.java new file mode 100644 index 0000000..3b3c627 --- /dev/null +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/Constants.java @@ -0,0 +1,8 @@ +/* © SRSoftware 2025 */ +package de.srsoftware.umbrella.wiki; + +public class Constants { + private Constants(){} + + public static final String CONFIG_DATABASE = "umbrella.modules.wiki.database"; +} diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java new file mode 100644 index 0000000..4f7d447 --- /dev/null +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java @@ -0,0 +1,24 @@ +package de.srsoftware.umbrella.wiki; + +import de.srsoftware.umbrella.core.BaseDb; + +import java.sql.Connection; + +public class SqliteDb extends BaseDb implements WikiDb { + private static final System.Logger LOG = System.getLogger("TaskDb"); + private static final int INITIAL_DB_VERSION = 1; + + public SqliteDb(Connection connection) { + super(connection); + } + + @Override + protected int createTables() { + int currentVersion = createSettingsTable(); + switch (currentVersion){ + case 0: ; // TODO + } + + return setCurrentVersion(3); + } +} \ No newline at end of file diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiDb.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiDb.java new file mode 100644 index 0000000..f43ff06 --- /dev/null +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiDb.java @@ -0,0 +1,16 @@ +/* © SRSoftware 2025 */ +package de.srsoftware.umbrella.wiki; + + +import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.Permission; +import de.srsoftware.umbrella.core.model.Task; +import de.srsoftware.umbrella.core.model.UmbrellaUser; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public interface WikiDb { + +} diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiModule.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiModule.java new file mode 100644 index 0000000..8007034 --- /dev/null +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/WikiModule.java @@ -0,0 +1,20 @@ +package de.srsoftware.umbrella.wiki; + +import de.srsoftware.configuration.Configuration; +import de.srsoftware.umbrella.core.BaseHandler; +import de.srsoftware.umbrella.core.ModuleRegistry; +import de.srsoftware.umbrella.core.api.WikiService; + +import static de.srsoftware.umbrella.core.ConnectionProvider.connect; +import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; +import static de.srsoftware.umbrella.wiki.Constants.CONFIG_DATABASE; + +public class WikiModule extends BaseHandler implements WikiService { + private final WikiDb wikiDb; + + public WikiModule(ModuleRegistry registry, Configuration config) { + super(registry); + var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE)); + wikiDb = new SqliteDb(connect(dbFile)); + } +}