diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts
index 13a7a1b..849628f 100644
--- a/backend/build.gradle.kts
+++ b/backend/build.gradle.kts
@@ -15,6 +15,7 @@ dependencies{
implementation(project(":contact"))
implementation(project(":core"))
implementation(project(":documents"))
+ implementation(project(":items"))
implementation(project(":legacy"))
implementation(project(":markdown"))
implementation(project(":messages"))
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 fa23c71..e154bbf 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.company.CompanyModule;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.documents.DocumentApi;
+import de.srsoftware.umbrella.items.ItemApi;
import de.srsoftware.umbrella.legacy.LegacyApi;
import de.srsoftware.umbrella.markdown.MarkdownApi;
import de.srsoftware.umbrella.message.MessageApi;
@@ -57,12 +58,14 @@ public class Application {
var userModule = new UserModule(config,messageSystem);
var companyModule = new CompanyModule(config, userModule);
var documentApi = new DocumentApi(companyModule, config);
+ var itemApi = new ItemApi(config,userModule);
var legacyApi = new LegacyApi(userModule.userDb(),config);
var markdownApi = new MarkdownApi(userModule);
var messageApi = new MessageApi(messageSystem);
var webHandler = new WebHandler();
documentApi .bindPath("/api/document") .on(server);
+ itemApi .bindPath("/api/items") .on(server);
markdownApi .bindPath("/api/markdown") .on(server);
messageApi .bindPath("/api/messages") .on(server);
translationModule.bindPath("/api/translations").on(server);
diff --git a/core/src/main/java/de/srsoftware/umbrella/core/BaseHandler.java b/core/src/main/java/de/srsoftware/umbrella/core/BaseHandler.java
index 851749a..a07850c 100644
--- a/core/src/main/java/de/srsoftware/umbrella/core/BaseHandler.java
+++ b/core/src/main/java/de/srsoftware/umbrella/core/BaseHandler.java
@@ -72,7 +72,7 @@ public abstract class BaseHandler extends PathHandler {
return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
}
- public boolean notImplemented(HttpExchange ex,String message,Object clazz) throws IOException{
- return sendContent(ex,HTTP_NOT_IMPLEMENTED,format(message,clazz.getClass().getSimpleName()));
+ public boolean notImplemented(HttpExchange ex,String method,Object clazz) throws IOException{
+ return sendContent(ex,HTTP_NOT_IMPLEMENTED,format("{0}.{1} not implemented",clazz.getClass().getSimpleName(),method));
}
}
diff --git a/frontend/src/routes/document/ItemList.svelte b/frontend/src/routes/document/ItemList.svelte
index 560dce8..47c584f 100644
--- a/frontend/src/routes/document/ItemList.svelte
+++ b/frontend/src/routes/document/ItemList.svelte
@@ -1,7 +1,26 @@
Items
+ {#if error}
+ {error}
+ {/if}
\ No newline at end of file
diff --git a/items/build.gradle.kts b/items/build.gradle.kts
new file mode 100644
index 0000000..8ea554d
--- /dev/null
+++ b/items/build.gradle.kts
@@ -0,0 +1,8 @@
+description = "Umbrella : Items"
+
+dependencies{
+ implementation(project(":core"))
+ implementation("de.srsoftware:configuration.api:1.0.2")
+ implementation("de.srsoftware:tools.jdbc:1.3.2")
+ implementation("de.srsoftware:tools.util:2.0.3")
+}
\ No newline at end of file
diff --git a/items/src/main/java/de/srsoftware/umbrella/items/Constants.java b/items/src/main/java/de/srsoftware/umbrella/items/Constants.java
new file mode 100644
index 0000000..fbb7032
--- /dev/null
+++ b/items/src/main/java/de/srsoftware/umbrella/items/Constants.java
@@ -0,0 +1,7 @@
+package de.srsoftware.umbrella.items;
+
+public class Constants {
+ private Constants(){}
+
+ public static final String CONFIG_DATABASE = "umbrella.modules.items.database";
+}
diff --git a/items/src/main/java/de/srsoftware/umbrella/items/Item.java b/items/src/main/java/de/srsoftware/umbrella/items/Item.java
new file mode 100644
index 0000000..aaaa086
--- /dev/null
+++ b/items/src/main/java/de/srsoftware/umbrella/items/Item.java
@@ -0,0 +1,4 @@
+package de.srsoftware.umbrella.items;
+
+public class Item {
+}
diff --git a/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java b/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java
new file mode 100644
index 0000000..67988d2
--- /dev/null
+++ b/items/src/main/java/de/srsoftware/umbrella/items/ItemApi.java
@@ -0,0 +1,53 @@
+package de.srsoftware.umbrella.items;
+
+import com.sun.net.httpserver.HttpExchange;
+import de.srsoftware.configuration.Configuration;
+import de.srsoftware.tools.Path;
+import de.srsoftware.tools.SessionToken;
+import de.srsoftware.umbrella.core.BaseHandler;
+import de.srsoftware.umbrella.core.api.UserService;
+import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
+import de.srsoftware.umbrella.core.model.Token;
+import de.srsoftware.umbrella.core.model.UmbrellaUser;
+
+import java.io.IOException;
+import java.util.Optional;
+
+import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
+import static de.srsoftware.umbrella.core.Paths.LIST;
+import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException;
+import static de.srsoftware.umbrella.items.Constants.CONFIG_DATABASE;
+
+public class ItemApi extends BaseHandler {
+
+ private final ItemDb itemDb;
+ private final UserService users;
+
+ public ItemApi(Configuration config, UserService userService) throws UmbrellaException {
+ var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE));
+ itemDb = new SqliteDb(connect(dbFile));
+ users = userService;
+ }
+
+ @Override
+ public boolean doGet(Path path, HttpExchange ex) throws IOException {
+ addCors(ex);
+ try {
+ Optional token = SessionToken.from(ex).map(Token::of);
+ var user = users.loadUser(token);
+ if (user.isEmpty()) return unauthorized(ex);
+ var head = path.pop();
+ return switch (head) {
+ case LIST -> listItems(ex,user);
+ default -> super.doGet(path,ex);
+ };
+ } catch (UmbrellaException e){
+ return send(ex,e);
+ }
+ }
+
+ private boolean listItems(HttpExchange ex, Optional user) throws IOException {
+ var items = itemDb.list();
+ return notImplemented(ex,"listItems",this);
+ }
+}
\ No newline at end of file
diff --git a/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java b/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java
new file mode 100644
index 0000000..18766e6
--- /dev/null
+++ b/items/src/main/java/de/srsoftware/umbrella/items/ItemDb.java
@@ -0,0 +1,7 @@
+package de.srsoftware.umbrella.items;
+
+import java.util.Collection;
+
+public interface ItemDb {
+ Collection- list();
+}
diff --git a/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java b/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java
new file mode 100644
index 0000000..b8487e9
--- /dev/null
+++ b/items/src/main/java/de/srsoftware/umbrella/items/SqliteDb.java
@@ -0,0 +1,11 @@
+package de.srsoftware.umbrella.items;
+
+import java.sql.Connection;
+
+public class SqliteDb implements ItemDb{
+ private final Connection db;
+
+ public SqliteDb(Connection connection) {
+ db = connection;
+ }
+}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 8f76ca9..7d7c659 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -12,4 +12,5 @@ include("web")
include("company")
include("contact")
-include("markdown")
\ No newline at end of file
+include("markdown")
+include("items")
\ No newline at end of file