Browse Source

preparing document module

feature/document
Stephan Richter 4 months ago
parent
commit
a11f2f0718
  1. 1
      backend/build.gradle.kts
  2. 3
      backend/src/main/java/de/srsoftware/umbrella/backend/Application.java
  3. 5
      core/src/main/java/de/srsoftware/umbrella/core/model/EmailAddress.java
  4. 5
      documents/build.gradle.kts
  5. 8
      documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java
  6. 26
      documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java
  7. 7
      frontend/src/App.svelte
  8. 1
      frontend/src/Components/Menu.svelte
  9. 29
      frontend/src/routes/document/List.svelte
  10. 1
      messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java
  11. 2
      messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java
  12. 2
      settings.gradle.kts

1
backend/build.gradle.kts

@ -13,6 +13,7 @@ application{ @@ -13,6 +13,7 @@ application{
dependencies{
implementation(project(":core"))
implementation(project(":documents"))
implementation(project(":legacy"))
implementation(project(":messages"))
implementation(project(":translations"))

3
backend/src/main/java/de/srsoftware/umbrella/backend/Application.java

@ -10,6 +10,7 @@ import de.srsoftware.configuration.JsonConfig; @@ -10,6 +10,7 @@ import de.srsoftware.configuration.JsonConfig;
import de.srsoftware.tools.ColorLogger;
import de.srsoftware.umbrella.core.ConnectionProvider;
import de.srsoftware.umbrella.core.UmbrellaException;
import de.srsoftware.umbrella.documents.DocumentApi;
import de.srsoftware.umbrella.legacy.LegacyApi;
import de.srsoftware.umbrella.message.MessageApi;
import de.srsoftware.umbrella.message.MessageSystem;
@ -59,8 +60,8 @@ public class Application { @@ -59,8 +60,8 @@ public class Application {
var server = HttpServer.create(new InetSocketAddress(port), 0);
server.setExecutor(Executors.newFixedThreadPool(threads));
new LegacyApi(userDb,config).bindPath("/legacy").on(server);
new DocumentApi().bindPath("/api/document").on(server);
new MessageApi(messageSystem).bindPath("/api/messages").on(server);
translationModule.bindPath("/api/translations").on(server);
new UserModule(userDb,loginServiceDb,messageSystem).bindPath("/api/user").on(server);

5
core/src/main/java/de/srsoftware/umbrella/core/model/EmailAddress.java

@ -1,11 +1,10 @@ @@ -1,11 +1,10 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.core.model;
import de.srsoftware.umbrella.core.UmbrellaException;
import static de.srsoftware.tools.Optionals.allSet;
import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
import static java.text.MessageFormat.format;
import de.srsoftware.umbrella.core.UmbrellaException;
public class EmailAddress {
private final String email;

5
documents/build.gradle.kts

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
description = "Umbrella : Documents"
dependencies{
implementation(project(":core"))
}

8
documents/src/main/java/de/srsoftware/umbrella/documents/Constants.java

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.documents;
public class Constants {
private Constants(){}
public static final String COMPANIES = "companies";
}

26
documents/src/main/java/de/srsoftware/umbrella/documents/DocumentApi.java

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.documents;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_NOT_IMPLEMENTED;
import static de.srsoftware.umbrella.documents.Constants.COMPANIES;
import com.sun.net.httpserver.HttpExchange;
import de.srsoftware.tools.Path;
import de.srsoftware.umbrella.core.BaseHandler;
import java.io.IOException;
public class DocumentApi extends BaseHandler {
@Override
public boolean doGet(Path path, HttpExchange ex) throws IOException {
addCors(ex);
var head = path.pop();
return switch (head){
case COMPANIES -> getCompanies(ex);
case null, default -> super.doGet(path,ex);
};
}
private boolean getCompanies(HttpExchange ex) throws IOException {
return sendEmptyResponse(HTTP_NOT_IMPLEMENTED,ex);
}
}

7
frontend/src/App.svelte

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
import { user } from './user.svelte.js';
import { Router, Route } from 'svelte-tiny-router';
import Callback from "./routes/user/OidcCallback.svelte";
import DocList from "./routes/document/List.svelte";
import EditService from "./routes/user/EditService.svelte";
import EditUser from "./routes/user/EditUser.svelte";
import Footer from "./Components/Footer.svelte";
@ -34,6 +35,8 @@ @@ -34,6 +35,8 @@
{#if user.name }
<!-- https://github.com/notnotsamuel/svelte-tiny-router -->
<Menu />
<Route path="/" component={User} />
<Route path="/document" component={DocList} />
<Route path="/message/settings" component={Messages} />
<Route path="/search" component={Search} />
<Route path="/user" component={User} />
@ -42,7 +45,9 @@ @@ -42,7 +45,9 @@
<Route path="/user/:user_id/edit" component={EditUser} />
<Route path="/user/oidc/add" component={EditService} />
<Route path="/user/oidc/edit/:serviceName" component={EditService} />
<Route component={User} />
<Route>
Not found!
</Route>
{:else}
<Route path="/user/reset/pw" component={ResetPw} />
<Route path="/oidc_callback" component={Callback} />

1
frontend/src/Components/Menu.svelte

@ -30,6 +30,7 @@ onMount(fetchModules); @@ -30,6 +30,7 @@ onMount(fetchModules);
<nav>
<a onclick={() => router.navigate('/user')}>{t('menu.users')}</a>
<a onclick={() => router.navigate('/document')}>{t('menu.documents')}</a>
<a href="https://svelte.dev/tutorial/svelte/state" target="_blank">{t('menu.tutorial')}</a>
{#each modules as module,i}
<a href={module.url}>{module.name}</a>

29
frontend/src/routes/document/List.svelte

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
<script>
import { onMount } from 'svelte';
import { t } from '../../translations.svelte.js';
let company = null;
let error = null;
async function loadCompanies(){
const url = `${location.protocol}//${location.host.replace('5173','8080')}/api/document/companies`;
var resp = await fetch(url,{ credentials: 'include'});
if (resp.ok){
} else {
error = await resp.text();
}
}
onMount(loadCompanies);
</script>
<fieldset>
<legend>{t('documents.documents')}</legend>
{#if error}
<div class="error">{error}</div>
{/if}
<div>
{t('documents.select_company')}
</div>
</fieldset>

1
messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java

@ -25,7 +25,6 @@ import jakarta.mail.util.ByteArrayDataSource; @@ -25,7 +25,6 @@ import jakarta.mail.util.ByteArrayDataSource;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.BiFunction;
import java.util.function.Function;
public class MessageSystem implements PostBox {
public static final System.Logger LOG = System.getLogger(MessageSystem.class.getSimpleName());

2
messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java

@ -6,10 +6,8 @@ import static java.lang.System.Logger.Level.TRACE; @@ -6,10 +6,8 @@ import static java.lang.System.Logger.Level.TRACE;
import static java.text.MessageFormat.format;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Function;
public class CombinedMessage {
private static final System.Logger LOG = System.getLogger(CombinedMessage.class.getSimpleName());

2
settings.gradle.kts

@ -7,3 +7,5 @@ include("messages") @@ -7,3 +7,5 @@ include("messages")
include("translations")
include("user")
include("web")
include("documents")
Loading…
Cancel
Save