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